You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于perf record与perf stat样本计数差异及采样异常的技术咨询

perf record -c 事件计数误差的核心原因

结合你在树莓派5B上的测试数据,perf record估算值与perf stat真值的偏差主要来自以下几个方面:

1. 内核采样上限强制限制采样频率

你观察到-c 10和-c 100的样本数均被限制在100万,这是因为内核通过perf_event_max_sample_rate参数限制了每秒最大采样次数,同时perf_event_mlock_kb会限制采样缓存的大小,避免高频采样导致系统过载。

当你设置的采样周期过小(比如-c 10),理论采样频率会远超过内核限制,此时perf会自动增大实际采样周期,强制将总样本数控制在阈值内。以你的数据为例,真值是92亿次L1D加载,若样本数被限在100万,实际采样周期约为9205171526 / 1000000 ≈ 9205,远大于你设置的10或100,用设置值乘以样本数自然会得到远低于真值的估算结果。

2. 采样中断的延迟与计数丢失

perf record的采样原理是PMU事件计数达到指定周期时触发中断,但中断响应存在延迟:

  • 中断触发后,CPU需要先完成当前指令流的原子操作,这段时间内的PMU事件不会被计入采样间隔;
  • 在ARM Cortex-A76(树莓派5B的CPU)上,中断优先级调度特性可能进一步放大延迟,导致采样点之间的实际事件数大于设置的-c值,最终估算值会低于真值。

3. 采样开销导致的执行路径变化

perf record的采样中断会带来额外的系统开销,当采样频率极高(比如-c 10)时,中断处理的时间占比会显著增加,甚至改变程序的实际执行路径——比如循环的执行时间被拉长,PMU事件计数的分布也会变化。而perf stat是纯硬件计数,无采样开销,这也是两者数值差异的重要原因。

4. ARM平台PMU的硬件特性限制

树莓派5B的Cortex-A76 PMU存在以下特性:

  • 部分事件计数存在微小的硬件误差,虽然单事件追踪时影响不大,但累积后会产生显著偏差;
  • 采样触发的中断会临时占用PMU资源,导致短时间内的事件计数丢失。

你的测试数据对应分析

参数设置估算值样本数偏差原因
-c 1014,859,150100万触发采样上限,实际周期被放大
-c 100153,300,100100万同上
-c 100006,608,030,00066万未触发上限,但存在中断延迟和硬件计数偏差

验证与调整方法

  • 查看当前采样限制:sysctl kernel.perf_event_max_sample_rate,默认值通常为100000(每秒10万次采样),若你的程序运行10秒左右,总样本数就会被限制在100万;
  • 临时提高采样限制:sysctl -w kernel.perf_event_max_sample_rate=1000000,再测试-c 10,观察样本数是否增加、估算值是否更接近真值;
  • 调整采样缓存大小:sysctl -w kernel.perf_event_mlock_kb=8192(根据内存情况调整),避免缓存溢出导致的样本数限制。

你使用的矩阵列读取代码:

for (j = 0; j < N; ++j) {
     for (i = 0; i < M; ++i) {
          sum += matrix[i][j];
     }
}

内容的提问来源于stack exchange,提问作者ysay dong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:10:13