在Linux计算机上,我需要计算进程执行的read
({1}}({0}}次访问的数量。该机器具有NUMA配置,我使用write
绑定进程以从单个远程NUMA节点访问内存。该进程在节点0中的CPU上运行并访问节点1中的内存。
目前,我使用perf来计算memory
和numactl
事件的数量,以作为对内存的读写访问的估计。因为,我猜想LLC错过将需要由内存访问服务。这种方法是否正确,即此事件是否相关?并且,有没有其他方法可以获取LLC load miss
和LLC store miss
访问信息?
处理器:Intel Xeon E5-4620 内核:Linux 3.9.0 +
答案 0 :(得分:2)
根据您的硬件,您应该能够访问位于内存端的性能计数器,以准确计算内存访问。在Intel处理器上,这些事件称为非核心事件。我知道你也可以在AMD处理器上做同样的事情。
计算LLC未命中并不完全正确,因为某些事件(如硬件预取程序)可能会导致大量内存访问。
关于您的硬件,遗憾的是您必须使用原始事件(在perf术语中)。这些事件不能通过perf推广,因为它们是处理器的细节,因此您必须查看处理器的手册以找到事件的原始编码以赋予perf。对于您的英特尔处理器,您应该查看可用的英特尔软件开发人员手册文档的第1章8.9.8 Intel® Xeon® Processor E5 Family Uncore Performance Monitoring Facility
和CHAPTER 19 PERFORMANCE-MONITORING EVENTS
here在这些文档中,您需要具备处理器的确切ID使用/proc/cpuinfo