在Linux系统中,NUMA(Non-Uniform Memory Access,非一致性内存访问)是一种用于多处理器系统的内存架构。它允许每个处理器使用本地内存,从而减少内存访问延迟并提高性能。查看Linux系统的NUMA信息对于性能调优和资源分配非常重要。本文将详细介绍如何查看Linux系统的NUMA信息。
numactl
工具numactl
是一个用于控制NUMA策略的工具,也可以用来查看NUMA信息。
numactl
在大多数Linux发行版中,numactl
可能已经安装。如果没有安装,可以通过包管理器进行安装:
# 对于基于Debian的系统
sudo apt-get install numactl
# 对于基于RedHat的系统
sudo yum install numactl
使用numactl --hardware
命令可以查看系统的NUMA硬件信息:
numactl --hardware
输出示例:
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3
node 0 size: 16384 MB
node 0 free: 8192 MB
node 1 cpus: 4 5 6 7
node 1 size: 16384 MB
node 1 free: 7168 MB
node distances:
node 0 1
0: 10 20
1: 20 10
available
: 表示可用的NUMA节点数。node X cpus
: 列出属于该节点的所有CPU核心。node X size
: 表示该节点的总内存大小。node X free
: 表示该节点的可用内存大小。node distances
: 表示不同节点之间的距离(越小越好)。/proc
文件系统Linux内核提供了/proc
文件系统,其中包含有关系统状态的各种信息。可以通过读取/proc
下的文件来获取NUMA信息。
/proc/cpuinfo
文件包含了CPU的相关信息,包括它们所属的NUMA节点。可以通过以下命令查看:
cat /proc/cpuinfo | grep "physical id\|core id\|processor\|node"
输出示例:
processor : 0
physical id : 0
core id : 0
numa node : 0
processor : 1
physical id : 0
core id : 1
numa node : 0
processor : 2
physical id : 1
core id : 0
numa node : 1
processor : 3
physical id : 1
core id : 1
numa node : 1
/proc/meminfo
文件包含了内存的信息,但并不直接显示NUMA信息。要查看NUMA节点上的内存分布,可以使用numastat
工具或直接读取/sys/devices/system/node
目录下的文件。
cat /sys/devices/system/node/node*/meminfo
这将显示每个NUMA节点上的内存使用情况。
lscpu
命令lscpu
是一个简单的命令行工具,用于显示CPU架构信息。它也可以提供一些关于NUMA的信息。
lscpu
输出示例:
Architecture: x86_64
CPU(s): 4
On-line CPU(s) list: 0-3
NUMA node(s): 2
NUMA node0 CPU(s): 0-1
NUMA node1 CPU(s): 2-3
NUMA node(s)
: 表示系统中的NUMA节点数。NUMA nodeX CPU(s)
: 列出了属于每个NUMA节点的CPU核心。htop
或top
监控NUMA信息htop
和top
是常用的系统监控工具,虽然它们不能直接显示NUMA信息,但可以通过观察CPU使用率和内存使用情况来间接了解NUMA的影响。
numactl
命令绑定进程到特定的NUMA节点。