计算对内存的读写访问

Posted

技术标签:

【中文标题】计算对内存的读写访问【英文标题】:Count read and write accesses to memory 【发布时间】:2014-08-16 21:40:06 【问题描述】:

在 Linux 机器上,我需要计算一个进程对 memory (DRAM) 的 readwrite 访问次数。这台机器有一个 NUMA 配置,我正在绑定进程以使用 numactl 从单个远程 NUMA 节点访问内存。该进程在节点 0 的 CPU 上运行并访问节点 1 中的内存。

目前,我使用perf 来计算LLC load missLLC store miss 事件的数量,作为对内存读写访问的估计。因为,我猜 LLC 未命中需要通过内存访问来解决。这种方法是否正确,即这个事件是否相关?而且,有没有其他方法可以获取readwrite 访问信息?

处理器:英特尔至强 E5-4620 内核:Linux 3.9.0+

【问题讨论】:

【参考方案1】:

根据您的硬件,您应该能够访问位于内存端的性能计数器,以准确计算内存访问次数。在 Intel 处理器上,这些事件称为非核心事件。我知道你也可以在 AMD 处理器上计算同样的东西。

计算 LLC 未命中数并不完全正确,因为硬件预取器等某些事件可能会导致大量内存访问。

关于您的硬件,很遗憾您将不得不使用原始事件(在 perf 术语中)。这些事件不能被 perf 概括,因为它们是处理器的细节,因此您必须查看处理器的手册以找到要提供给 perf 的事件的原始编码。对于您的英特尔处理器,您应该查看英特尔软件开发人员手册文档here 的第 18.9.8 Intel® Xeon® Processor E5 Family Uncore Performance Monitoring FacilityCHAPTER 19 PERFORMANCE-MONITORING EVENTS 章在这些文档中,您需要使用您的处理器的确切 ID,您可以使用 /proc/cpuinfo

【讨论】:

添加了相关信息。我不确定哪些性能计数器与计算硬件预取器相关事件相关。

以上是关于计算对内存的读写访问的主要内容,如果未能解决你的问题,请参考以下文章

数组和指针,内存之间的关系

oracle为啥创建实例,为何通过实例来访问数据,这样有啥优点吗

java内存模型

Java内存模型(JMM)总结与学习

Linux 读写memory操作,devmem直接访问物理内存地址

Linux 读写memory操作,devmem直接访问物理内存地址