numactl的介绍(及工具numactl介绍)

一、numactl -C

numactl是一种用于在Linux系统中设置NUMA策略的实用程序。利用numactl命令,我们可以控制进程或任务的 NUMA 策略。numactl还允许我们使用NUMA机器中的特定节点或CPU核心绑定进程,同时还能够控制内存操作策略。numactl可以在x86和IA-64架构下运行,并使用libnuma库实现。

numactl -C可以用来查看系统中每个CPU上的缓存和内存信息,它可以显示每个CPU的NUMA节点,缓存、内存和CPU插槽的拓扑结构。numactl -C命令输出每个CPU的缓存大小、缓存行和缓存关联信息。如果我们需要测试系统缓存是否按照我们的预期运行,可以使用numactl -C来验证。

[root@localhost ~]# numactl -C
available: 8 nodes (0-7)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16377 MB
node 0 free: 12851 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 32768 MB
node 1 free: 8998 MB
node 2 cpus: 16 17 18 19 20 21 22 23
node 2 size: 32767 MB
node 2 free: 3085 MB
...

二、numactl和taskset

除了numactl命令,Linux系统还提供taskset命令。主要区别在于numactl除了可以绑定CPU也可以控制内存,而taskset主要用于绑定CPU。numactl命令使用使用比taskset更加灵活,可以控制任务调度策略、内存分配策略等,而taskset只能进行简单的绑定CPU操作。

使用numactl和taskset都可以绑定CPU核心。例如,我们使用下面的命令将进程绑定在第二个CPU核心上:

[root@localhost ~]# numactl -C 2 program_name
[root@localhost ~]# taskset -c 2 program_name

在这个例子中,我们使用numactl和taskset将program_name这个进程的CPU绑定在第二个CPU核心上。

三、numactl -N

numactl -N命令可以用来限制进程可以访问的NUMA节点集。这个命令可以用于NUMA机器上不同节点之间的内存访问,可以避免远程访问节点上的内存而导致性能下降。

例如,我们可以使用下面的命令来限制当前进程只能使用节点0和1:

[root@localhost ~]# numactl -N 0-1 program_name

四、numactl -m

numactl -m命令与numactl -N类似,但是它用于限制进程可以访问的内存节点集。当我们在NUMA机器上进行内存访问时,如果访问的内存位于远程节点,则访问速度会受到影响。使用numactl -m命令可以避免这种情况的发生。

例如,下面的命令将程序绑定到节点0和1,并限制进程只能访问节点0的内存:

[root@localhost ~]# numactl -m 0 -N 0-1 program_name

五、numactl安装

numactl是一个标准的Linux工具,因此大多数Linux发行版都包含了numactl。如果你的系统上没有已经安装了numactl,则可以使用下面的命令安装:

[root@localhost ~]# yum install numactl

如果你使用的不是Red Hat系列的Linux发行版,可以使用以下命令安装numactl:

[root@localhost ~]# apt-get install numactl

六、numactl命令详解

numactl命令的用法非常灵活,下面介绍一些常用的用法。

1. 查看系统中NUMA信息:通过numactl –hardware命令可以查看系统中NUMA节点、CPU核心、内存等信息。

[root@localhost ~]# numactl --hardware
available: 8 nodes (0-7)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16377 MB
node 0 free: 12854 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 32768 MB
node 1 free: 8994 MB
node 2 cpus: 16 17 18 19 20 21 22 23
node 2 size: 32767 MB
node 2 free: 3088 MB
...

2. 绑定进程到指定的CPU核心:numactl -C命令可以将进程绑定到指定的CPU核心上。

[root@localhost ~]# numactl -C 2 program_name

3. 设置进程使用的内存节点集:numactl -m命令可以限制进程只能使用指定的内存节点集。

[root@localhost ~]# numactl -m 0 -N 0-1 program_name

4. 设置进程使用的NUMA节点集:numactl -N命令可以限制进程只能使用指定的NUMA节点集。

[root@localhost ~]# numactl -N 0-1 program_name

5. 查看当前进程的NUMA策略:可以通过numactl –show命令查看当前进程的NUMA策略。

[root@localhost ~]# numactl --show
policy: default
preferred node: current
physcpubind: 2
cpubind: 2
nodebind: 0-1
membind: 0

七、numactl绑核

在Linux系统中,可以使用numactl将进程绑定到指定的CPU核心上。这可以提高程序的性能,因为它可以避免在CPU缓存之间移动数据的开销。通过绑定进程到指定的核心上,可以使进程始终运行在同一片CPU缓存中,从而减少缓存之间移动数据的开销。

例如,下面的命令将进程绑定到第二个CPU核心上:

[root@localhost ~]# numactl -C 2 program_name

八、numactl –hardware

numactl –hardware命令可以用来显示系统中NUMA节点、CPU核心、内存等信息。它可以帮助我们了解系统的NUMA拓扑结构,以及系统中的NUMA资源分配状况。

例如,下面的命令可以显示系统中每个CPU的NUMA节点、缓存和内存信息:

[root@localhost ~]# numactl --hardware

九、总结

本文介绍了numactl的使用方法和一些常用命令。通过使用numactl,我们可以控制进程或任务的NUMA策略,从而提高程序的性能。虽然numactl的使用方法比较灵活,但需要注意的是在使用时要根据实际情况选择合适的策略。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平