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和内存节点
结束

五、注意事项

  1. 虚拟化环境:虚拟机内看到的NUMA拓扑可能由Hypervisor虚拟化,需在宿主机层优化。
  2. 容器环境:Kubernetes等容器平台可能限制NUMA感知,需结合cpuset控制。
  3. BIOS设置:部分服务器需在BIOS中开启NUMA支持(如Intel的Sub-NUMA Clustering)。

通过以上命令组合,您可以全面掌握系统的NUMA状态,并为性能调优提供数据支撑。

发表回复 0

Your email address will not be published.