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

如何在Linux/AMD平台分析多线程程序缓存行竞争?有无类perf c2c工具

AMD处理器上的缓存行竞争剖析工具

AMD平台上没有和Intel perf c2c完全对应的直接命令,但可以通过定制perf工具的事件追踪,实现对缓存行竞争及跨核心modified缓存行访问的分析。

核心追踪事件

针对你关注的“核心读取其他核心L1缓存中modified状态缓存行”场景,可重点追踪以下perf事件:

  • MEM_LOAD_RETIRED.REMOTE_HITM:直接对应从其他核心的modified状态缓存行加载数据的行为,是你关注的核心场景
  • MEM_LOAD_RETIRED.L1_MISS:定位L1缓存加载未命中事件,用于排查跨核心缓存访问的起点
  • LLC_MISSES:最后一级缓存未命中事件,结合地址采样可定位竞争的缓存行
  • MEM_LOAD_RETIRED.LOCAL_HITM:如果需要区分本地核心内的modified缓存行访问,可追踪该事件

具体使用方法

  1. 采集事件数据:使用perf record结合事件与地址采样,示例命令:

    perf record -e MEM_LOAD_RETIRED.REMOTE_HITM -a -g --call-graph dwarf --sample-addresses ./your_target_program
    

    参数说明:-a监控所有核心,-g记录调用栈,--sample-addresses采集触发事件的内存地址,方便定位具体缓存行。

  2. 分析采样结果:

    • 用perf report查看统计结果:
      perf report -n --stdio
      
    • 用perf annotate定位到触发事件的具体代码行:
      perf annotate ./your_target_program
      
    • 用perf script导出原始数据,可做自定义分析。
  3. 进阶内存访问分析:使用perf mem命令获取内存访问的详细分类统计:

    perf mem record -t load ./your_target_program
    perf mem report
    

    该命令会区分本地/远程内存访问、各级缓存命中/未命中的分布情况。

注意事项

  • AMD不同架构(Zen 2/3/4等)的perf事件名称可能略有差异,可通过perf list | grep MEM_LOAD查看当前平台支持的具体事件。
  • 部分事件需要较新的内核版本(4.15及以上)支持,确保系统内核满足要求。

内容的提问来源于stack exchange,提问作者Dan Kennedy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:55:48