计算对内存的读写访问
Posted
技术标签:
【中文标题】计算对内存的读写访问【英文标题】:Count read and write accesses to memory 【发布时间】:2014-08-16 21:40:06 【问题描述】:在 Linux 机器上,我需要计算一个进程对 memory
(DRAM) 的 read
和 write
访问次数。这台机器有一个 NUMA 配置,我正在绑定进程以使用 numactl
从单个远程 NUMA 节点访问内存。该进程在节点 0 的 CPU 上运行并访问节点 1 中的内存。
目前,我使用perf 来计算LLC load miss
和LLC store miss
事件的数量,作为对内存读写访问的估计。因为,我猜 LLC 未命中需要通过内存访问来解决。这种方法是否正确,即这个事件是否相关?而且,有没有其他方法可以获取read
和write
访问信息?
处理器:英特尔至强 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 Facility
和 CHAPTER 19 PERFORMANCE-MONITORING EVENTS
章在这些文档中,您需要使用您的处理器的确切 ID,您可以使用 /proc/cpuinfo
【讨论】:
添加了相关信息。我不确定哪些性能计数器与计算硬件预取器相关事件相关。以上是关于计算对内存的读写访问的主要内容,如果未能解决你的问题,请参考以下文章
oracle为啥创建实例,为何通过实例来访问数据,这样有啥优点吗