首页/系统/服务器硬件与 RAID 速查/NUMA 拓扑与内存访问
内存与电源72 条

NUMA 拓扑与内存访问

多路服务器上内存按 CPU 分组为 NUMA 节点:跨节点访问延迟更高,数据库与虚拟化场景通常需要感知拓扑做绑定与规划。

NUMA 拓扑与内存访问

多路服务器上,每颗 CPU 有自己的内存控制器:与它直连的内存构成一个 NUMA 节点,本地访问延迟低,跨节点访问要经过处理器互连,延迟更高、带宽更低。操作系统默认尽量让进程在本节点分配内存,但负载不均衡、绑定策略缺失或调度抖动都会让一部分内存访问变成跨节点。数据库、虚拟化、高性能计算这类对延迟敏感的场景需要显式感知拓扑。

基本信息

适用平台Linux 内核自带 NUMA 支持(多数 x86_64 发行版)
查看命令lscpu 与 lscpu --extended、numactl --hardware、numastat
内核接口/sys/devices/system/node 下按节点组织
绑定工具numactl、numad、服务自身的绑定配置项
权限要求查看无需特权,绑定进程通常需要 root 或相应权限
典型距离本地为 10,跨节点常见 20 以上(数值越大越远)

典型使用场景

  • 上架后确认 NUMA 节点与内存分布,作为容量台账的一部分
  • 数据库调优:核对实例是否把内存与 CPU 绑在同一节点
  • 虚拟化规划:按节点容量分配虚拟机,减少跨节点占用
  • 性能抖动排查:用 numastat 看是否存在大量跨节点访问
  • 跨节点访问比例偏高时评估关闭自动均衡或调整绑定策略
  • 内存故障影响面评估:故障条属于哪个节点,影响哪些进程

查看拓扑与访问情况

查看拓扑与访问情况
# 看 NUMA 节点数量与 CPU 归属
lscpu | grep -i numa
lscpu --extended | head -5
# 每个节点的 CPU、内存容量与节点间距离
numactl --hardware | head -30
# 内存跨节点访问统计:本地命中与远端命中
numastat -m | head -20
# 按节点查看内存使用量(内核接口,实时)
grep -H MemTotal /sys/devices/system/node/node*/meminfo

输出逐项读法

输出项含义判定要点
available: N nodes节点总数,通常与 CPU 路数相关与机型手册核对是否一致
node N cpus该节点包含的 CPU 核心绑定 CPU 时直接引用这些编号
node N size / free该节点内存容量与空闲量节点间容量明显不均时需检查内存分布
node distances节点间访问代价矩阵对角线为本地值,其余为跨节点值
numa_hit / numa_miss本地命中与远端分配失败次数miss 持续偏高说明绑定策略不合理
local_node / other_node在本节点与其它节点上分配的次数other_node 占比高即存在跨节点访问
numastat 的统计是累计值:判断趋势要看增量,连续两次采样相减比直接看绝对值更有意义。
部分平台允许在 BIOS 中把多节点合并为单节点呈现(如节点交织模式)。改这项会改变延迟特征,调整前先与业务方确认性能预期。

易错点

  • 忽略拓扑均匀分配虚拟机:跨节点访问导致性能抖动,很难在应用侧定位
  • 只看内存总量不看节点分布:容量够但单节点超配,仍会出现远端分配
  • 绑定 CPU 不绑定内存:进程固定在某节点 CPU 上却从其它节点取内存
  • 内存故障时不看节点归属:影响面评估失真,业务到底受不受影响说不清

数据来源与参考

  • Linux 内核文档(NUMA)
  • man 8 numactl
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌