使用 linux perf 工具测量 CPU 必须访问主内存的次数

Using linux perf tool to measure the amount of times the CPU has to acccess the main memory

据我了解,perf 工具可以读取处理器上可用的硬件计数器以提供性能信息。比如我知道用L1-dcache-load-misses来衡量L1缓存没有请求数据的次数

我想知道我的 CPU 当 运行 我的程序必须访问 DRAM 的次数。使用 perf list | grep dram 会抛出数百个我找不到任何信息的计数器。

那么,用哪个事件来衡量DRAM被访问的次数呢?

(这并没有完全回答你的问题,希望有更多内存分析经验的其他人会回答。我提到的事件出现在 Skylake-client 上;IDK 关于其他 CPUs。)

在没有 L4 eDRAM 缓存的 CPU 上,您可以计算 L3 未命中数。例如mem_load_retired.l3_miss 负载。 (但这可能会将 2 次加载算作两次单独的未命中,即使它们都等待相同的 LFB 填充,所以实际上 DRAM 只看到一次访问。)

并且它不会计算由硬件预取驱动的 DRAM 访问。此外,这只是计算负载,而不是存储后脏数据的写回。


offcore_response 事件非常复杂,因为它们考虑了多套接字系统和侦听其他套接字、本地与远程 RAM 等的可能性。不确定是否有一个名称中带有 dram 的事件可以满足您的需求。此外,offcore_response 事件分为 demand_code_rddemand_data_rddemand_rfo(存储未命中)和 other

offcore_requests.l3_miss_demand_data_rd统计需求负载(非预取)

有很多标有“dram”的事件,但其中 none 是您想要的....:-(。

对于 Intel 处理器,无法使用内核中的性能计数器计算所有 DRAM 流量。

好消息是内存控制器中的性能计数器在我测试过的所有英特尔系统中都是准确的。坏消息是,对于“客户端”非核心处理器和“服务器”非核心处理器,它们有不同的名称。

在 Xeon Gold 或 Xeon Platinum 服务器系统上,可以使用以下方法找到事件:

perf list | grep -i cas

哪个returns:

  uncore_imc_0/cas_count_read/                       [Kernel PMU event]
  uncore_imc_0/cas_count_write/                      [Kernel PMU event]
  uncore_imc_1/cas_count_read/                       [Kernel PMU event]
  uncore_imc_1/cas_count_write/                      [Kernel PMU event]
  uncore_imc_2/cas_count_read/                       [Kernel PMU event]
  uncore_imc_2/cas_count_write/                      [Kernel PMU event]
  uncore_imc_3/cas_count_read/                       [Kernel PMU event]
  uncore_imc_3/cas_count_write/                      [Kernel PMU event]
  uncore_imc_4/cas_count_read/                       [Kernel PMU event]
  uncore_imc_4/cas_count_write/                      [Kernel PMU event]
  uncore_imc_5/cas_count_read/                       [Kernel PMU event]
  uncore_imc_5/cas_count_write/                      [Kernel PMU event]

相应的“perf stat”命令很长,但构造起来很简单。

我无法访问任何带有“客户端”非核心的处理器进行测试,但 https://www.intel.com/content/dam/www/public/us/en/documents/manuals/6th-gen-core-family-uncore-performance-monitoring-manual.pdf 等文档表明内存控制器性能计数器在这些产品中也可用。