据我了解,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/