ram - 使用linux perf工具测量CPU访问主存的次数

标签 ram perf

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

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

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

最佳答案

有很多标有“dram”的事件,但没有一个是您想要的......:-(。

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

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

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

perf list | grep -i cas

返回:

  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 这样的文档表明内存 Controller 性能计数器在这些产品中也可用。

关于ram - 使用linux perf工具测量CPU访问主存的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64923795/

相关文章:

linux - 监控 cgroups 的 Linux 性能事件

numpy - 由于 RAM 使用过多,Colab 中的 session 崩溃

linux - 应最大化哪种类型的 POWER8 PMU 事件?

linux - perf 记录的默认行为是什么?

linux命令ram类型

linux - 我可以通过X86_64机器码获取内存访问信息吗?

c - 列 "symbol"显示地址而不是函数名

python - 如何使用 pathos 避免过多的内存消耗

java - 调用 java "from Python"时分配超过 4 GB 的堆空间时出现问题

java - Java中字节数组的内存使用