NUMA:核心、内存及它们之间的距离
本文深入探讨了NUMA(非统一内存访问)架构的工作原理,解释了在多处理器系统中,不同核心访问不同内存位置的延迟差异。文章通过清晰的概念拆解,帮助读者理解CPU核心与内存之间的“距离”如何影响系统性能,以及如何利用NUMA感知编程来优化现代计算应用。
背景速读
- NUMA(Non-Uniform Memory Access,非统一内存访问)是计算机硬件架构的一种设计方式,核心思想是:CPU访问自己的本地内存比访问其他CPU的内存要快得多。
- 传统多核系统采用UMA(统一内存访问),所有核心共享主内存,延迟一致。但核心数增多后,内存控制器成为瓶颈。
- NUMA将CPU核心和内存分成多个“节点”(NUMA node),每个节点有自己的内存控制器和内存插槽。CPU访问本节点的内存延迟低,访问其他节点内存需经过“互联通道”(如Intel的UPI或AMD的Infinity Fabric),代价更高。
- “距离”在NUMA中不是物理米数,而是由操作系统和硬件共同定义的一个抽象指标——通常用“跳数”(hops,即需要经过多少个互联通道才能到达目标内存)来量化。
- 操作系统(如Linux)对NUMA拓扑有感知,会尽量让进程和线程在同一个节点上分配内存和执行,以提高缓存命中率、降低延迟。
- 但程序员如果忽略NUMA,可能无意中导致线程在节点A上运行却从节点B分配内存,产生“远端访问惩罚”,性能下降明显(尤其在数据库、高频交易、游戏引擎等敏感场景)。
- 本文是该系列第一部分,从基础概念讲起,后续预计会深入操作系统调度、内存分配策略、性能调优等实操话题。