在
Linux机器上,我需要计算进程执行的对内存(DRAM)的读写访问次数.该机器具有NUMA配置,我使用numactl绑定进程以从单个远程NUMA节点访问内存.该进程在节点0中的CPU上运行并访问节点1中的内存.
目前,我使用perf来计算LLC加载未命中和LLC存储未命中事件的数量,以用作对存储器的读和写访问的估计.因为,我猜想LLC错过将需要由内存访问服务.这种方法是否正确,即此事件是否相关?并且,有没有其他方法可以获取读写访问信息?
处理器:Intel Xeon E5-4620
内核:Linux 3.9.0
最佳答案 根据您的硬件,您应该能够访问位于内存侧的性能计数器,以准确计算内存访问.在Intel处理器上,这些事件称为非核心事件.我知道你也可以在AMD处理器上算上同样的东西.
计算LLC未命中并不完全正确,因为诸如硬件预取器之类的某些事件可能导致大量的存储器访问.
关于您的硬件,遗憾的是您将不得不使用原始事件(在perf术语中).这些事件不能通过perf推广,因为它们是处理器的细节,因此您必须查看处理器的手册以找到事件的原始编码以赋予perf.对于您的英特尔处理器,您应该查看章节18.9.8英特尔®至强®处理器E5系列非核心性能监控工具和第19章性能监控事件英特尔软件开发人员手册文档here在这些文档中,您将需要准确的ID您可以使用/ proc / cpuinfo获得的处理器