benchmark参数详解

在上面的示例代码中,我们编写了一个简单的基准测试代码,并解读了测试结果。但实际工作中,仅仅按照前面的当时进行基准测试是不够的,我们需要结合cpu等信息,获取更加详细的基准测试结果,准确评估代码性能。go benchmark提供了丰富的可选参数来辅助我们获取更加准确的基准测试信息。

一、bench

-bench 参数支持传入一个正则表达式,匹配到的用例才会得到执行,格式如下:

go test -bench=<pattern1>|<pattern2> path/to/file_test.go

pattern可以同时指定多个,bench第二个参数为测试文件地址。例如只运行以 Fib 结尾的 benchmark 用例

go test -bench=Fib$ .

如果想要执行所有用例:

go test -bench=.

只执行某个文件中的用例

go test -bench=. test_test.go

二、cpu

-cpu 参数用于指定用于运行基准测试的CPU核心数,默认值为所有可用的CPU核心。 您可以使用数字来指定要使用的CPU核心数,或者使用 1, 2, 4, 8 等表示核心数的值,也可以使用 all 表示使用所有可用的核心,例如:

go test -bench=. -cpu=4,8,12

将分别使用使用4、8、12个CPU核心来运行基准测试函数,结果如下:

goos: darwin
goarch: arm64
BenchmarkFibonacci-4               49794             22255 ns/op
BenchmarkFibonacci-8               53928             22281 ns/op
BenchmarkFibonacci-12              53738             22300 ns/op
PASS
ok      command-line-arguments  4.553s

三、count

go test 命令提供了 -count 参数,用于指定每个基准测试函数的运行次数。-count 参数的默认值为 1 ,表示每个基准测试函数只运行一次。您可以使用 -count 参数来增加基准测试的运行次数,以获得更准确的性能数据。以下是 -count 参数的用法示例:

go test -bench=. -count=3

这个命令将运行所有基准测试函数,每个函数运行3次,运行结果如下:

goos: darwin
goarch: arm64
pkg: test2/man/test
BenchmarkFibonacci-8       50841             22257 ns/op
BenchmarkFibonacci-8       53942             22291 ns/op
BenchmarkFibonacci-8       53932             22285 ns/op
PASS
ok      test2/man/test  4.478s

通过增加运行次数,可以减少随机因素对性能测试结果的影响,从而获得更准确的平均性能数据。 需要注意的是, -count 参数仅适用于基准测试函数,对于普通的测试函数不起作用。此外, -count 参数的值必须是一个非负整数。

四、benchtime

-benchtime 参数用于指定每个基准测试函数的运行时间,默认值为 1s。您可以使用不同的时间单位,如 ns (纳秒)、 us (微秒)、 ms (毫秒)和 s (秒)。例如:

go test -bench=. -benchtime=10s 

将每个基准测试函数的运行时间设置为10秒,运行结果如下:

goos: darwin
goarch: arm64
pkg: test2/man/test
BenchmarkFibonacci-8      512041             22426 ns/op
PASS
ok      test2/man/test  12.364s

benchtime 参数不仅可以执行运行时间,还可以指定运行的次数,例如

go test -bench=. -benchtime=10x

核心代码将会被执行10次,结果如下:

goos: darwin
goarch: arm64
pkg: test/man
BenchmarkFibonacci-8       10000             23722 ns/op
PASS
ok      test/man  0.688s

五、benchmem

go test 命令提供了 -benchmem 参数,用于在基准测试中报告内存分配的统计信息。-benchmem 参数的默认值为 false ,表示不报告内存分配的统计信息。您可以使用 -benchmem 参数来获取每个基准测试函数的内存分配统计信息,包括分配的字节数、内存分配次数等。以下是 -benchmem 参数的用法示例:

go test -bench=. -benchmem

这个命令将运行所有基准测试函数,并在报告中包含内存分配的统计信息,结果如下:

goos: darwin
goarch: arm64
pkg: test2/man/test
BenchmarkFibonacci-8       51030             22315 ns/op               0 B/op          0 allocs/op
PASS
ok      test2/man/test  1.929s

结果中的0 B/op0 allocs/op即为内存分配结果,示例结果中表示0次分配,每次分配0B。 通过使用 -benchmem 参数,您可以更全面地了解基准测试函数的内存使用情况,帮助您评估代码的性能和内存效率。同样的, -benchmem 参数仅适用于基准测试函数,对于普通的测试函数不起作用。

#go##golang项目##性能优化#
高性能Golang编程 文章被收录于专栏

galang各种高性能编码姿势一网打尽!

全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务