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

Intel Skylake Xeon处理器上perf stat的LLC-loads数值不一致求助

问题原因分析

这是因为你同时指定的显式事件和-d参数触发了两个底层实现不同但别名相同的LLC-loads统计项,具体原因拆解如下:

  1. -d参数的自动事件逻辑
    perf stat的-d(--detailed)是预定义的快捷参数,每叠加一次会开启更细粒度的硬件事件集合:

    • 第一次-d:添加L1、LLC缓存的基础访问/缺失事件
    • 第二次-d:添加TLB相关事件
    • 第三次-d:添加内存子系统的深层统计事件
      其中第一次-d就会自动加入LLC-loads这个统计项,它对应的是Intel Skylake架构上基于缓存硬件访问触发的底层事件(比如LLC_REFERENCES过滤加载操作)。
  2. 显式指定的LLC-loads的底层实现
    你手动指定的LLC-loads是perf定义的通用事件别名,在Skylake上默认映射到**基于指令退休(retired)**的底层事件(比如MEM_INST_RETIRED.LOAD_L3_HIT + MEM_INST_RETIRED.LOAD_L3_MISS的总和)。

  3. 计数逻辑差异导致数值不一致
    这两种底层事件的计数逻辑完全不同:

    • 缓存访问触发的事件:只要LLC收到加载请求就计数,不管这个请求最终是否导致指令退休(比如被分支预测取消的指令对应的LLC访问)
    • 指令退休触发的事件:只计数那些最终完成执行、被CPU提交的指令对应的LLC加载操作
      这种统计维度的差异直接导致了两个LLC-loads的数值出现偏差,而且这种差异在不同负载下会有不同的表现。
  4. 重复事件的显示逻辑
    perf会区分不同底层事件的统计项,即使它们的别名相同,所以会在输出中分别显示这两个结果,不会合并。

解决方法

如果你想避免这种重复统计,二选一即可:

  • 只保留显式指定的事件,去掉-d参数
  • 去掉手动指定的LLC-loads等事件,依赖-d参数自动生成的统计项

内容的提问来源于stack exchange,提问作者Nikunj Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:44