NUMA 的关键不是“有几个 CPU”,而是执行位置、页面位置和设备路径不一致时,谁承担跨节点访问与通信成本。
节点不是插槽的别名
NUMA 节点描述非均匀内存访问域。一个插槽如何映射节点取决于平台和配置;OS 展示的拓扑还受到固件提供的信息影响。双路不能自动推出正好两个节点,节点编号也不是永久稳定的资产标识。
Linux 的 NUMA 内存策略 规定了内存分配策略的作用范围。线程调度位置与页面分配策略分别控制不同对象,不能把 CPU 绑定当成已经迁移了全部内存。
三种位置要一起看
执行位置是线程当前运行在哪些 CPU;数据位置是访问的物理页属于哪些节点;I/O 位置是设备路径和处理队列与哪些资源更接近。对高 I/O 业务,忽视中断或完成处理位置,可能使“线程和内存在一起”的优化仍跨节点搬运。
节点 A:工作线程 / 本地页 / 某设备队列
|
跨域互连
|
节点 B:工作线程 / 本地页 / 其他设备队列
请求路径 = 执行位置 + 页面位置 + 设备与完成位置
这是示意拓扑,不是 TaiShan 某个插槽的实际连接。具体关系需来自对应手册和获授权的系统观测。
首次访问为什么重要但不是万能规律
页面通常在需要建立实际映射或分配时获得物理存储,分配策略、调用线程位置和资源可用性会影响结果。共享页、文件映射以及后续迁移具有不同语义,因此“谁最先碰到就永远归谁”是过度简化。
原创场景:初始化线程在一组 CPU 上准备全部数据,工作线程后来分散运行。工作负载可能遇到与预期不同的页面分布。改变线程绑定不一定改变已经分配的页;这一点也解释了为什么实验必须记录初始化阶段。
本地访问、均匀分配与负载平衡的取舍
优先本地分配能够减少部分访问距离,但一个节点资源不足时会出现其他约束。交错分配可能帮助使用多个节点的带宽,却不等于每次依赖读取都更快。最合适的方式依赖共享程度、工作集和并发模型。
优化不能只追求“本地比例最高”。如果过度绑定使少数 CPU 排队,跨节点流量减少的收益可能被调度等待抵消。配额与 cpuset 的限制还会与分配策略共同作用,语义以实际内核配置为准。
设备路径与队列亲和性
网卡多队列、接收处理、应用线程和内存分配可以形成一条更完整的路径。RSS 与软件转发机制属于不同层,见 Linux 网络扩展机制。增加队列并不自动使应用单连接利用所有核心。
如何形成有边界的结论
“NUMA 导致慢”必须给出路径假设与比较条件:相同请求分布、相同总资源、相同数据规模,观察吞吐和尾延迟变化。拓扑可支持距离解释,不能独自证明具体瓶颈。性能变化还需排除频率、缓存状态、共享负载等因素,相关报告字段见 测试证据。
服务器知识库 · 系统架构 · 数据路径 · 测试验收 · 工程参考
公开资料核对:2026-10-07。文档类型:Explanation。逻辑图、场景推演与报告模板为原创,不代表实测结果、厂商内部设计或公司制度;操作仅限获授权的目标和环境。