谷歌multichase指针追踪基准中ChaseNS与ChaseMibs含义咨询
multichase multiload输出字段解析
你本次运行的测试命令:
./multiload -s 16 -n 5 -t 16 -m 512M -c chaseload -l stream-sum
对应输出的表头与结果行:
Samples , Byte/thd , ChaseThds , ChaseNS , ChaseMibs , ChDeviate , LoadThds , LdMaxMibs , LdAvgMibs , LdDeviate , ChaseArg , MemLdArg 5 , 536870912 , 1 , 212.726 , 36 , 0.017 , 15 , 17427 , 17331 , 0.012 , chaseload , stream-sum
ChaseNS字段说明
- 该字段单位为纳秒,不代表访问整个512MB数组、每隔16字节取一次值的总耗时,指代的是指针追踪测试中单次追踪步的平均访问延迟。
- 结合本次参数:
-s 16指定访问步长为16字节,chaseload模式下的追踪线程会沿固定步长生成的指针链做串行依赖访问——下一次访问的地址完全依赖上一次访问的返回结果,必须等上一次访问完全结束才能发起下一次请求,是典型的内存延迟敏感负载。跑完5轮采样后统计得到,每完成一次16字节步长的依赖访问,平均耗时212.726ns。 - 补充说明:本次测试单线程分配的内存是512MB,按16字节步长计算总共有33554432次追踪步,全量遍历的总耗时为ChaseNS数值乘以总步数,不要把单步延迟和全量遍历耗时混淆。
ChaseMibs字段说明
- 该字段单位为MiB/s,不是16字节步长访问场景下测得的实际内存带宽上限,是基于ChaseNS单步延迟换算出来的追踪线程有效吞吐。
- 换算逻辑:单次追踪步会读取16字节数据,用
单步访问数据量/单步平均延迟即可算出每秒数据读取量,再转换为MiB单位就得到ChaseMibs数值,本次结果36MiB/s就是按这个逻辑计算得出的。 - 该数值远低于同测试中15个
stream-sum负载线程跑出的17331MiB/s平均带宽属于正常现象:追踪线程是串行依赖访问,完全被内存延迟绑定,无法并行发起大量访问请求打满内存带宽,这个值只是延迟指标的附属换算结果,不代表内存的实际带宽能力。
内容的提问来源于stack exchange,提问作者Milan
相关产品推荐
相关产品推荐

