如何解释numademo输出

时间:2014-01-21 08:19:25

标签: linux numa

numademo实用程序(是numactl包的一部分)附带了许多流行的Linux发行版(RHEL,SLES,...)。我试图找出与此工具相关的任何文档,但我无法找到任何有用的信息。没有人使用它或者每个人都知道它。

这是一个示例输出

2个可用节点

memory with no policy memcpy              Avg 10415.77 MB/s Max 10427.37 MB/s Min 10377.83 MB/s
local memory memcpy                       Avg 9499.52 MB/s Max 10423.22 MB/s Min 7239.55 MB/s
memory interleaved on all nodes memcpy    Avg 7355.64 MB/s Max 7657.19 MB/s Min 6284.92 MB/s
memory on node 0 memcpy                   Avg 5837.94 MB/s Max 6073.07 MB/s Min 5067.05 MB/s
memory on node 1 memcpy                   Avg 10285.20 MB/s Max 10425.29 MB/s Min 9206.11 MB/s
memory interleaved on 0 1 memcpy          Avg 7513.01 MB/s Max 7658.31 MB/s Min 6440.88 MB/s

setting preferred node to 0
memory without policy memcpy              Avg 6071.17 MB/s Max 6073.07 MB/s Min 6069.55 MB/s

setting preferred node to 1
memory without policy memcpy              Avg 9126.62 MB/s Max 10427.37 MB/s Min 7236.55 MB/s
manual interleaving to all nodes memcpy   Avg 7357.19 MB/s Max 7656.07 MB/s Min 6439.30 MB/s
manual interleaving on node 0/1 memcpy    Avg 7512.90 MB/s Max 7658.31 MB/s Min 6439.30 MB/s

current interleave node 1
running on node 0, preferred node 0
local memory memcpy                       Avg 10086.53 MB/s Max 10423.22 MB/s Min 8943.84 MB/s
memory interleaved on all nodes memcpy    Avg 6451.66 MB/s Max 6454.36 MB/s Min 6448.01 MB/s
memory interleaved on node 0/1 memcpy     Avg 5199.00 MB/s Max 5200.24 MB/s Min 5196.63 MB/s
alloc on node 1 memcpy                    Avg 5068.47 MB/s Max 5069.99 MB/s Min 5067.05 MB/s
local allocation memcpy                   Avg 10248.81 MB/s Max 10421.15 MB/s Min 8933.17 MB/s

setting wrong preferred node memcpy       Avg 6070.75 MB/s Max 6072.37 MB/s Min 6067.45 MB/s
setting correct preferred node memcpy     Avg 10418.04 MB/s Max 10423.22 MB/s Min 10408.74 MB/s

running on node 1, preferred node 0
local memory memcpy                       Avg 10417.63 MB/s Max 10423.22 MB/s Min 10400.48 MB/s
memory interleaved on all nodes memcpy    Avg 7653.39 MB/s Max 7660.55 MB/s Min 7641.57 MB/s
memory interleaved on node 0/1 memcpy     Avg 6949.18 MB/s Max 7658.31 MB/s Min 5201.27 MB/s
alloc on node 0 memcpy                    Avg 5952.14 MB/s Max 6073.77 MB/s Min 5065.10 MB/s
local allocation memcpy                   Avg 10419.28 MB/s Max 10425.29 MB/s Min 10402.54 MB/s

setting wrong preferred node memcpy       Avg 6069.06 MB/s Max 6073.07 MB/s Min 6059.03 MB/s
setting correct preferred node memcpy     Avg 10248.81 MB/s Max 10423.22 MB/s Min 8946.89 MB/s

我需要知道 这些测试是如何进行的?

如何解释这些结果?

例如:什么可能导致以下数字大幅度差异。

memory on node 0 memcpy                   Avg 5837.94 MB/s
memory on node 1 memcpy                   Avg 10285.20 MB/s

谢谢, Harshana

2 个答案:

答案 0 :(得分:1)

测试非常明显。它使用libnuma中的函数在不同的NUMA节点上分配内存,并测量对其进行操作所需的时间。例如,您的程序最初在第二个NUMA域的CPU内核上运行,因此访问节点0上的内存几乎慢了两倍。交叉存储器的访问速度通常是两个域的访问速度的平均值,因为页面以循环方式分发。

setting preferred node to 0表示程序告诉操作系统优先分配节点0上的内存。以下测试确认此策略正在运行,因为速度仍然很慢(因为程序仍在节点1上运行) )。

setting preferred node to 1告诉操作系统最好在节点1上分配内存。速度因此高于执行程序的本地速度。

running on node 0, preferred node 0 - 程序将自身移动到节点0(libnuma也支持CPU绑定以及内存绑定)并将内存分配器设置为也更喜欢节点0.因此,首选内存位置现在是执行的本地位置程序,因此速度很快。

等等。只需看看该实用程序的源代码。

结果不是很对称,其原因非常复杂。请注意,NUMA在Linux上实现得很糟糕,至少在2.6.x内核中(事情可能在3.x中有所改进)。例如,内存分配器倾向于合并连续的虚拟分配,然后不再遵守内存绑定策略,例如,绑定到节点0的VM区域有时被映射到节点1中的页面。此外,如果存储器被换出到磁盘,则每当它被带回时,NUMA策略被完全忽略,例如,绑定到NUMA节点0的内存可能最终在节点1上。

答案 1 :(得分:0)

  

numademo numactl 包提供的二进制文件。它提供了系统NUMA性能的快速概述。

numademo命令显示不同内存分配策略对系统的影响。

$ numademo --help
usage: numademo [-S] [-f] [-c] [-e] [-t] msize[kmg] {tests}
No tests means run all.
-c output CSV data. -f run even without NUMA API. -S run stupid tests. -e exit on error
-t regression test; do not run all node combinations
valid tests: memset memcpy forward backward stream random2 ptrchase

有效测试的详细信息可在以下位置查看:https://github.com/jmesmon/numactl/blob/master/numademo.c

相关问题