Linux环境下如何查询NUMA节点信息、状态及绑定配置方式?

在Linux系统中,NUMA(Non-Uniform Memory Access,非一致内存访问)是一种多处理器架构设计,其中每个CPU核心拥有本地内存节点,访问本地内存的速度快于访问其他节点的远程内存,了解系统的NUMA拓扑对优化性能(尤其是数据库、虚拟化等高负载场景)至关重要,本文将详细介绍Linux系统中查询NUMA信息的方法,包括基础命令、系统文件及专业工具的使用,并结合实例说明如何解读输出结果。

linux 如何查询numa

通过基础命令快速获取NUMA概览

使用lscpu命令查看基础NUMA信息

lscpu是Linux中查看CPU架构信息的常用工具,其输出包含NUMA节点相关的核心数据,执行以下命令:

lscpu

关键输出字段及含义如下:

  • NUMA node(s):系统中的NUMA节点总数,NUMA node(s): 2”表示有2个节点。
  • NUMA node0 CPU(s):节点0包含的CPU核心列表,如“0-7”表示核心0到7属于节点0。
  • NUMA node0 CPU(s):节点1的CPU核心列表,若系统为双节点,通常会显示“NUMA node1 CPU(s): 8-15”。
  • Vendor ID:CPU厂商信息(如GenuineIntel),用于确认是否支持NUMA。

示例输出

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              16
On-line CPU(s) list: 0-15
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           2
NUMA node(s):        2
NUMA node0 CPU(s):   0-3,8-11
NUMA node1 CPU(s):   4-7,12-15

上述输出表明系统有2个NUMA节点,每个节点包含8个CPU核心(共16核心),节点0和节点1分别对应物理插槽0和1的核心。

使用numactl工具查看节点硬件信息

numactl是专门用于NUMA管理的工具,可通过numactl --hardware查看节点的内存和CPU分布情况:

numactl --hardware

输出会列出所有节点的内存总量、可用内存以及CPU核心列表,格式如下:

available: 2 nodes (0-1)
node 0 cpus: 0-3 8-11
node 0 size: 32768 MB
node 0 free: 31234 MB
node 1 cpus: 4-7 12-15
node 1 size: 32768 MB
node 1 free: 30876 MB
node distances:
node   0   1  
  0  10  20  
  1  20  10  
  • node X cpus:节点X包含的CPU核心。
  • node X size:节点X的内存总量(MB)。
  • node X free:节点X的可用内存(MB)。
  • node distances:节点间的访问延迟权重,数值越小表示访问速度越快(如本地节点延迟为10,远程节点为20)。

通过系统文件系统获取详细NUMA数据

Linux内核将NUMA信息暴露在/sys/devices/system/node/目录下,每个节点对应一个nodeX子目录(X为节点编号),可通过读取其中的文件获取更详细的数据。

查看节点内存使用情况

进入目标节点目录(如/sys/devices/system/node/node0/),读取meminfo文件:

cat /sys/devices/system/node/node0/meminfo

输出与/proc/meminfo类似,但仅包含当前节点的内存数据,

linux 如何查询numa

Node 0 MemTotal:       32767844 kB
Node 0 MemFree:        31234156 kB
Node 0 MemUsed:         1533688 kB
Node 0 HugePages_Total:       0
Node 0 HugePages_Free:        0

通过对比不同节点的MemTotalMemFree,可判断内存分布是否均衡。

查看节点包含的CPU核心

/sys/devices/system/node/nodeX/目录下,cpulist文件列出了节点X的所有CPU核心:

cat /sys/devices/system/node/node0/cpulist

输出示例:

0-3,8-11

lscpu中的NUMA node0 CPU(s)一致,但此处直接提供核心列表,便于脚本处理。

查看NUMA节点间的距离矩阵

节点距离(NUMA distance)反映了访问不同节点内存的相对延迟,数据存储在/sys/devices/system/node/目录下的distance文件:

cat /sys/devices/system/node/distance

输出示例:

10 20
20 10

第一行和第一列分别对应节点0和节点1,对角线值(10)表示本地节点延迟,非对角线值(20)表示远程节点延迟,数值越大延迟越高。

使用专业工具进行NUMA性能分析

numastat:查看节点内存分配统计

numastat工具显示每个节点的内存分配和命中情况,可用于诊断内存访问热点:

numastat

输出示例:

linux 如何查询numa

node0           node1
numa_hit        12345678    12345678
numa_miss       1000000     1000000
numa_foreign    0          0
interleave_hit  100000     100000
local_node      12345678    12345678
other_node      1000000     1000000
  • numa_hit:成功在本地节点分配的内存次数。
  • numa_miss:需要在远程节点分配的内存次数(数值过高可能表明内存分配策略不合理)。
  • local_node/other_node:本地/远程节点内存分配次数。

dmesg:查看NUMA相关内核日志

系统启动过程中,内核会输出NUMA节点的初始化信息,可通过dmesg过滤相关日志:

dmesg | grep -i numa

输出示例:

[    0.000000] NUMA: Node0 0MB-32768MB
[    0.000000] NUMA: Node1 32768MB-65536MB
[    0.000000] NUMA: Node0 0MB-32768MB (2MB hole)
[    0.000000] NUMA: Node1 32768MB-65536MB (2MB hole)

此信息可帮助确认节点的内存地址范围及是否存在空洞(内存未连续分配的区域)。

实际应用场景:进程与NUMA的绑定

在优化性能时,常需将进程绑定到特定NUMA节点,以减少远程内存访问,将进程PID=1234绑定到节点0,并优先使用本地内存:

numactl --cpunodebind=0 --membind=0 -- 1234
  • --cpunodebind=0:进程只能在节点0的CPU上运行。
  • --membind=0:进程的内存分配仅限于节点0。

查询Linux系统的NUMA信息可通过多种工具实现:

  • 基础概览lscpu快速查看节点和CPU分布,numactl --hardware获取节点内存和距离矩阵。
  • 详细数据:通过/sys/devices/system/node/nodeX/下的文件(如meminfocpulist)获取节点级别的内存和CPU信息。
  • 性能分析numastat统计内存分配命中情况,dmesg查看内核初始化日志。

合理利用NUMA信息,可优化进程调度和内存分配策略,提升多路服务器在高负载下的性能。

相关问答FAQs

Q1: 如何查看当前进程的NUMA亲和性(即进程被绑定到哪些节点)?
A: 可通过numactl --show查看当前进程的NUMA策略,或读取/proc/[PID]/status文件中的Mems_allowed字段(表示进程允许访问的内存节点掩码)。

numactl --show  # 查看当前shell的NUMA策略
cat /proc/1234/status | grep Mems_allowed  # 查看PID=1234的允许访问节点

Q2: 如果系统显示“NUMA node(s): 1”,是否说明系统不支持NUMA?
A: 不一定。“NUMA node(s): 1”表示系统只有一个NUMA节点,此时所有CPU和内存均属于同一节点,访问内存延迟一致,属于“平坦内存模型”(UMA),这种情况下,NUMA机制仍存在,但不会因跨节点访问产生性能损耗,真正的NUMA系统需至少2个节点,可通过numactl --hardware确认是否存在节点间距离差异(如非对角线延迟值大于本地延迟)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33997.html

(0)
酷番叔酷番叔
上一篇 2025年10月1日 21:04
下一篇 2025年10月1日 21:16

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信