为何Zen5 CPU上PERF_COUNT_HW_REF_CPU_CYCLES方差远高于PERF_COUNT_HW_CPU_CYCLES?
PERF_COUNT_HW_REF_CPU_CYCLES在Zen5上的方差异常问题
我理解PERF_COUNT_HW_REF_CPU_CYCLES是恒定速率的计数器,不受CPU频率缩放影响;而PERF_COUNT_HW_CPU_CYCLES会受频率缩放影响。原本以为消除频率缩放影响能降低计数方差,但在Zen5 CPU上却出现了方差反而升高的情况!
Zen5 CPU测试结果
$ echo; for cycle_type in cycles ref-cycles; do echo -n "$cycle_type stddev: "; for i in {1..100}; do perf stat -e $cycle_type true 2>&1 | grep -E "(cycles|ref-cycles)" | grep -v "seconds"; done | awk '{gsub(/,/,""); print $1}' | awk '{sum+=$1; sumsq+=$1*$1; n++} END {mean=sum/n; print sqrt(sumsq/n - mean*mean)}'; done cycles stddev: 146434 ref-cycles stddev: 353483
Haswell服务器测试结果(符合预期)
$ echo; for cycle_type in cycles ref-cycles; do echo -n "$cycle_type stddev: "; for i in {1..100}; do perf stat -e $cycle_type true 2>&1 | grep -E "(cycles|ref-cycles)" | grep -v "seconds"; done | awk '{gsub(/,/,""); print $1}' | awk '{sum+=$1; sumsq+=$1*$1; n++} END {mean=sum/n; print sqrt(sumsq/n - mean*mean)}'; done cycles stddev: 64606.4 ref-cycles stddev: 46084.4
硬件与软件信息
- Zen5 CPU型号:AMD Ryzen AI 9 HX 370 w/ Radeon 890M
- Haswell CPU型号:Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz
- Perf版本:6.14.2
补充说明
Peter Cordes指出原基准测试可能因主要测量进程启动开销而存在误导性,但即使改用perf_event_open配置计数器,再通过rdpmc在进程内对简单微基准测试采样,仍能观察到相同现象。
内容的提问来源于stack exchange,提问作者Joseph Garvin
相关产品推荐
相关产品推荐

