2

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

谢谢,哈莎娜

4

2 回答 2

1

测试是不言自明的。它使用 in 函数在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 上。

于 2014-01-25T00:46:06.580 回答
0

numademonumactl包提供的二进制文件。它提供了系统 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

于 2014-01-25T01:08:12.837 回答