benchmark template
This commit is contained in:
parent
a564f3dcf5
commit
cf5ce2712c
72
cmd/bench/base.go
Normal file
72
cmd/bench/base.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package bench
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Target struct {
|
||||||
|
//这里定义需要测试的方法
|
||||||
|
}
|
||||||
|
|
||||||
|
//测试基准
|
||||||
|
type Benchmark struct {
|
||||||
|
Parallelism int //并行数目
|
||||||
|
Data interface{} //bench 参数数据
|
||||||
|
TargetBuilder TargetBuilder
|
||||||
|
}
|
||||||
|
|
||||||
|
//构建基准目标
|
||||||
|
type TargetBuilder struct {
|
||||||
|
Name string
|
||||||
|
Make func(bench Benchmark) (Target, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func compose(parallelisms, dataSize []int, numKeys int, builders []TargetBuilder) []Benchmark {
|
||||||
|
benchmarks := make([]Benchmark, 0, len(parallelisms)*len(dataSize)*len(builders))
|
||||||
|
|
||||||
|
for _, p := range parallelisms {
|
||||||
|
for _, _ = range dataSize {
|
||||||
|
|
||||||
|
for _, builder := range builders {
|
||||||
|
benchmarks = append(benchmarks, Benchmark{
|
||||||
|
Parallelism: p,
|
||||||
|
// Data: d,
|
||||||
|
TargetBuilder: builder,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return benchmarks
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunBenchmark(b *testing.B, benchmarks []Benchmark) {
|
||||||
|
for _, bench := range benchmarks {
|
||||||
|
bench := bench
|
||||||
|
b.Run(fmt.Sprintf("%s-parallelism(%d)- ", bench.TargetBuilder.Name, bench.Parallelism), func(b *testing.B) {
|
||||||
|
// target, err := bench.TargetBuilder.Make(bench)
|
||||||
|
// if err != nil {
|
||||||
|
// b.Fatalf("%s setup fail: %v", bench.TargetBuilder.Name, err)
|
||||||
|
// }
|
||||||
|
if bench.Parallelism == 0 {
|
||||||
|
b.ResetTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
//执行测试方法
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
b.SetParallelism(bench.Parallelism) //指定并行数目
|
||||||
|
b.ResetTimer()
|
||||||
|
b.RunParallel(func(pb *testing.PB) { //并行执行
|
||||||
|
for pb.Next() {
|
||||||
|
//执行测试方法
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
b.StopTimer()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
31
cmd/bench/main_test.go
Normal file
31
cmd/bench/main_test.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package bench
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BenchmarkMarsh(b *testing.B) {
|
||||||
|
var (
|
||||||
|
// ncpu = runtime.NumCPU()
|
||||||
|
parallelisms = []int{4, 16, 64}
|
||||||
|
dataSizes = []int{100, 1000, 10000}
|
||||||
|
numKeys = 1024
|
||||||
|
builders = []TargetBuilder{
|
||||||
|
{
|
||||||
|
Name: "测试名1",
|
||||||
|
Make: func(bench Benchmark) (Target, error) {
|
||||||
|
|
||||||
|
return Target{}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "测试名2",
|
||||||
|
Make: func(bench Benchmark) (Target, error) {
|
||||||
|
return Target{}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
RunBenchmark(b, compose(parallelisms, dataSizes, numKeys, builders))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user