NUMA模式
补充经常听师兄们提到一个词NUMA模式
NUMA架构产生的背景
早期的计算机中,内存控制器在北桥中,所有CPU对内存的访问都要通过北桥来完成。此时所有CPU访问内存都是“一致的”,如下图所示:
这样的架构称为UMA(Uniform Memory Access),直译为“统一内存访问”,这样的总线模型保证了所有的内存访问是一致的,不必考虑不同内存地址之间的差异,即每个处理器核心共享相同的内存地址空间。
在 UMA 架构下,CPU 和内存之间的通信全部都要通过前端总线(FSB)。而提高性能的方式,就是不断地提高 CPU、前端总线和内存的工作频率。因为物理条件的限制,提高工作频率到达了瓶颈。CPU 性能的提升开始从提高主频转向增加 CPU 数量(多核、多 CPU)
但随着CPU核心数的增加,越来越多的CPU对前端总线争用,使前端总线的带宽成为瓶颈,为了消除UM架构的瓶颈NUMA(Non-Uniform Memory Access)架构诞生了。
NUMA架构
将不同的内存器件和CPU核心划分给不同的Node,每个Node都有自己集成的内存控制器(IMC: Integrated Memory Controller),不同Node间通过QPI(Quick Path Interconnect)进行通信。
现在大部分CPU厂商已经把内存控制器集成到CPU内部。一般一个CPU socket会有一个独立的内存控制器。每个CPU socket独立连接到一部分内存(直连的内存称为"本地内存"),CPU之间通过QPI总线进行连接,CPU可以通过QPI总线访问不和自己直接连接的"远程内存"。
*本地内存访问延迟会显著低于远程内存