服务公告
NUMA 与多核调度:大内存机器的性能细节
发布时间:2026-07-20 11:32
## 概念是什么 大内存多路服务器把 CPU 与内存分成多个节点,每个节点有自己的内存控制器,访问本节点内存快,跨节点访问要走过互连总线,延迟明显更高。这就是 NUMA 架构:内存不再是等距的池子,离哪个 CPU 近就归哪个节点管。程序的数据落在别的节点上时,再多的内存带宽也被跨节点访问吃掉。 ## 背后原理 内存分配默认按当前运行所在节点本地化,调度器随后又可能把进程迁到别的核,数据和 CPU 就此分居,跨节点访问比例上升,带宽敏感型应用直接表现为性能不达预期。节点间的距离不等,访问延迟呈阶梯分布,numa 统计里的跨节点流量占比是判断问题的核心读数。 ``` numactl --hardware numastat -p 数据库进程 cat /sys/devices/system/node/node*/distance ``` ## 最小实操 诊断三步:看节点拓扑与各节点内存余量;看目标进程的内存分布,local 与 foreign 两列对比,foreign 占比高就是跨节点问题;对症下药,用 numactl 把进程与内存绑定到同一节点启动,或用系统级的均衡策略缓解。 ``` numactl --cpunodebind=0 --membind=0 /usr/local/bin/db-service ``` 数据库机器尤其值得做:一类实例独占节点,配合绑核把网络中断与进程钉在同一节点,尾延迟的表现会明显改善。 ## 常见错误 盲目绑死所有进程到单节点,把多路机器用成单路,吞吐反而下降,绑核只给有明确收益的进程。虚拟机的 NUMA 拓扑取决于宿主呈现,云服务器内看到的节点信息未必等于物理结构,顺云云服务器上先观测跨节点统计再决定动作,不要按物理机经验直接套用。 验证绑核收益要量化:绑定前后各跑一轮基准,对比吞吐与尾延迟两个指标,只看均值会被长尾骗过。中断亲和与进程绑定的配合也值得做,把网卡队列的中断与处理进程放在同一节点,内存访问不过互连,收包路径的延迟抖动会小一截。这些细节在大流量服务上的收益积少成多,值得在压测环境逐项验证后再上生产。上一篇: 服务器托管的机房等级怎么看
下一篇: 多线路接入说明:电信联通移动三网访问优化