如何查看Linux系统的NUMA信息

2025-04发布7次浏览

在Linux系统中,NUMA(Non-Uniform Memory Access,非一致性内存访问)是一种用于多处理器系统的内存架构。它允许每个处理器使用本地内存,从而减少内存访问延迟并提高性能。查看Linux系统的NUMA信息对于性能调优和资源分配非常重要。本文将详细介绍如何查看Linux系统的NUMA信息。

1. 使用numactl工具

numactl 是一个用于控制NUMA策略的工具,也可以用来查看NUMA信息。

安装numactl

在大多数Linux发行版中,numactl可能已经安装。如果没有安装,可以通过包管理器进行安装:

# 对于基于Debian的系统
sudo apt-get install numactl

# 对于基于RedHat的系统
sudo yum install numactl

查看NUMA节点信息

使用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: 表示不同节点之间的距离(越小越好)。

2. 使用/proc文件系统

Linux内核提供了/proc文件系统,其中包含有关系统状态的各种信息。可以通过读取/proc下的文件来获取NUMA信息。

查看CPU与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节点上的内存使用情况。

3. 使用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核心。

4. 使用htoptop监控NUMA信息

htoptop是常用的系统监控工具,虽然它们不能直接显示NUMA信息,但可以通过观察CPU使用率和内存使用情况来间接了解NUMA的影响。

扩展知识

  • NUMA优化: 在NUMA系统中,为了获得最佳性能,应用程序应该尽量使用本地内存。可以通过设置NUMA策略来实现这一点,例如使用numactl命令绑定进程到特定的NUMA节点。
  • NUMA调度: Linux内核支持NUMA-aware调度器,可以根据内存访问模式自动调整线程的运行位置。