用于测量 Linux 中 NUMA 节点缓存未命中/命中的工具?

Posted

技术标签:

【中文标题】用于测量 Linux 中 NUMA 节点缓存未命中/命中的工具?【英文标题】:Tools to measure cache miss/hit by NUMA node in Linux? 【发布时间】:2014-07-04 11:33:03 【问题描述】:

我正在 AMD 阿布扎比架构上执行一个多线程程序,它有 8 个 NUMA 域。我正在使用 numactl 在不同的内核中分配线程,并尝试不同的内存策略。我想测量由 NUMA 域安排的缓存未命中/命中,但使用 perf 之类的工具我获得了一个整体计数器。我已经回顾了 numastat、likwid 和 hpctoolkit 等工具。您是否知道任何允许获取由 NUMA 域分隔的标准性能计数器的工具?

【问题讨论】:

在 perf stat 中使用 --per-socket 参数可以让我获得所需的计数器。虽然不是我想要的,因为在 AMD 架构中,每个插槽有 2 个 NUMA 节点。 【参考方案1】:

numastat 不足以满足您的需要吗?

>numastat
                           node0           node1           node2           node3
numa_hit              2511148413      2668024472      2541805396      2631938751
numa_miss                 687767          186973          510852           79546
numa_foreign              544853         1772504         1306738         1461626
interleave_hit             14268           14291           14281           14309
local_node            2509822983      2667700745      2541325673      2631417570
other_node               2013197          510700          990575          600727

                           node4           node5           node6           node7
numa_hit              2551615375      2287945142      2199394273      2506262343
numa_miss                1178554         1863536         2037710         1278384
numa_foreign             1709984          541463          241266          244888
interleave_hit             14287           14274           14291           14294
local_node            2551212630      2278515165      2198877939      2505436756
other_node               1581299        11293513         2554044         2103971

【讨论】:

您好,感谢您的回答。 Numastat 没有提供足够的信息,因为仅显示请求的页面是否在特定节点中,而不考虑哪个节点请求了该页面。我想知道有多少请求向其域之外的特定节点发出了请求,以及向哪个节点发出了请求。你明白我的意思吗?【参考方案2】:

Intel PCM 软件包附带一个名为 pcm-numa.x 的工具。它告诉您每个核心从本地 NUMA 节点访问数据的次数,以及从远程节点访问数据的次数。

【讨论】:

以上是关于用于测量 Linux 中 NUMA 节点缓存未命中/命中的工具?的主要内容,如果未能解决你的问题,请参考以下文章

用于缓存引用的 Linux perf 命令

如何测量多线程应用程序中的缓存性能?

如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中

如何测量 .NET 内存缓存 4.0 的当前大小?

如何在 Unity 中获取有关缓存未命中的分析数据?

“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别