go benchmark 中的 allocs/op 和 B/op 是啥意思?

Posted

技术标签:

【中文标题】go benchmark 中的 allocs/op 和 B/op 是啥意思?【英文标题】:What does allocs/op and B/op mean in go benchmark?go benchmark 中的 allocs/op 和 B/op 是什么意思? 【发布时间】:2016-02-23 21:24:46 【问题描述】:

当我使用 go test -v -bench=. -benchmem 运行基准测试时,我看到了以下结果。

f1     10000        120860 ns/op        2433 B/op         28 allocs/op
f2     10000        120288 ns/op        2288 B/op         26 allocs/op

根据我的理解:

    10000 是迭代次数 for i := 0; i < b.N; i++ XXX ns/op 是完成一次迭代所需的大致时间

但即使在reading the docs 之后,我也无法找出B/opallocs/op 的含义。


我的猜测是 allocs/op 与垃圾收集和内存分配有关(越少越好)。

谁能很好地解释这些值的含义。也很高兴知道为什么要增加和减少它们的主要步骤(我意识到这是特定于测试的,但可能有一些通用提示在许多情况下都有效)

【问题讨论】:

【参考方案1】:

allocs/op 表示每个操作(单次迭代)发生了多少不同的内存分配。

B/op 是每个操作分配的字节数。

【讨论】:

B/op 是在质押框架还是堆中分配的?还是 GO GC 需要清理的内存量是多少? 是否有正式的文档来解释这些指标? memory allocation 是什么意思?这是否意味着set a value for a variable @RyanLv:不,这意味着内存已分配,未修改。为变量设置值只会修改预分配内存的内容。 @RyanLv 内存分配意味着从操作系统获得更多内存。这样做会减少您和系统中其他程序的可用内存。

以上是关于go benchmark 中的 allocs/op 和 B/op 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Golang的压测工具 hey

2021 年 Go 生态圈 rpc 框架 benchmark

Go学习之Benchmark

Go学习之Benchmark

Go学习之Benchmark

Go学习之Benchmark