numactl工具介绍
在麒麟服务器操作系统上默认没有安装numactl工具,可以以下命令进行安装:
yum install numactl
以下是使用 numactl 命令查看系统NUMA信息的详细解读指南,结合关键命令和输出示例:
一、核心命令解析
1. 查看NUMA硬件拓扑
numactl --hardware
输出示例:
available: 2 nodes (0-1) # 系统有2个NUMA节点
node 0 cpus: 0-23,48-71 # 节点0包含的CPU逻辑核心编号
node 0 size: 128941 MB # 节点0的物理内存总量
node 0 free: 5632 MB # 节点0的当前空闲内存
node 1 cpus: 24-47,72-95 # 节点1的CPU核心
node 1 size: 129020 MB
node 1 free: 10240 MB
node distances: # 节点间访问距离(影响延迟)
node 0 1
0: 10 21
1: 21 10
关键字段:
available:系统NUMA节点总数。cpus:该节点管理的CPU核心编号(注意可能包含超线程核心)。size/free:节点内存总量和空闲量(单位MB)。node distances:矩阵中的数值表示访问延迟权重,数值越大延迟越高(如0→0本地访问为10,0→1跨节点为21)。
2. 查看当前NUMA策略
numactl --show
输出示例:
policy: default # 当前默认策略
preferred node: current # 首选节点(此处为当前CPU所在节点)
physcpubind: 0-95 # 可用的物理CPU核心范围
cpubind: 0-1 # 进程可绑定的NUMA节点(此处为节点0和1)
nodebind: 0-1 # 内存可分配的节点
membind: 0-1 # 等效于nodebind
策略说明:
policy:常见策略包括default(本地优先)、interleave(交错分配)、preferred(首选节点)等。preferred node:当策略为preferred时,优先从指定节点分配内存,不足时使用其他节点。
二、进阶命令组合
1. 查看进程的NUMA绑定状态
numactl --pid <PID> --show
- 用途:查看指定进程的CPU和内存绑定策略。
2. 实时监控NUMA内存分配
numastat # 查看各节点内存分配统计
numastat -p <PID> # 查看指定进程的内存分布
输出示例:
Per-node process memory usage (in MBs) for PID 1234...
Node 0 Node 1 Total
--------------- --------------- --------
256.45 512.89 769.34 # 进程在节点0分配256MB,节点1分配513MB
3. 验证CPU与节点关系
lscpu | grep NUMA
输出示例:
NUMA node(s): 2 # NUMA节点数
NUMA node0 CPU(s): 0-23,48-71 # 节点0的CPU核心
NUMA node1 CPU(s): 24-47,72-95
三、输出关键分析技巧
1. 识别NUMA不均衡
- 现象:
numastat显示某个节点内存使用率远高于其他节点。 - 风险:可能导致该节点内存耗尽,触发交换(Swap)或OOM Killer。
2. 优化绑定策略
- 案例:若应用主要运行在节点0的CPU上,但内存分配在节点1(通过
numastat -p发现),可通过以下命令绑定:numactl --cpubind=0 --membind=0 ./application
3. 节点距离与性能
- 规则:
node distances中数值越小性能越好。例如:- 跨节点访问(0→1)的延迟是本地(0→0)的2.1倍(21/10)。
- 应尽量避免跨节点频繁访问内存。
四、调试流程图
开始
│
├─ 执行 numactl --hardware → 确认节点数
│ ├─ 若输出仅1个节点 → NUMA可能关闭或单节点硬件
│ └─ 多节点 → NUMA已启用
│
├─ 检查策略 numactl --show → 确认默认分配策略
│ └─ 若policy=interleave → 内存分配已跨节点
│
└─ 分析进程内存 numastat -p <PID> → 定位跨节点访问
└─ 若Node间分配不均 → 建议绑定CPU和内存节点
结束
五、注意事项
- 虚拟化环境:虚拟机内看到的NUMA拓扑可能由Hypervisor虚拟化,需在宿主机层优化。
- 容器环境:Kubernetes等容器平台可能限制NUMA感知,需结合
cpuset控制。 - BIOS设置:部分服务器需在BIOS中开启NUMA支持(如Intel的
Sub-NUMA Clustering)。
通过以上命令组合,您可以全面掌握系统的NUMA状态,并为性能调优提供数据支撑。