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

问题描述:

我正在AMD阿布扎比架构上执行多线程程序,它有8个NUMA域。我正在使用numactl在不同核心中分配线程,并尝试使用不同的内存策略。我想测量由NUMA域安排的缓存未命中/命中,但是使用像perf这样的工具获得了总计数器。我已经浏览过numastat,likwid和hpctoolkit等工具。你知道有哪些工具可以获得由NUMA域隔开的标准性能计数器吗?测量Linux中NUMA节点缓存未命中/命中的工具?

+0

在perf stat中使用--per-socket参数允许我获得所需的计数器。尽管不是我想要的,因为在AMD架构中每个插座有2个NUMA节点。 – Jofe

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 
+0

嗨,谢谢你的回答。 Numastat没有提供足够的信息,因为只显示请求的页面是否在特定节点中,而没有考虑哪个节点请求该页面。我想知道有多少请求在其域和特定节点之外创建了特定节点。你明白我的意思吗? – Jofe

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