在IA多核平台上进行开发时,我们经常会提到NUMA这个词 ,那么NUMA到底指的是什么?我们怎么可以感受到它的存在?以及NUMA的存在对于我们编程会有什么影响?今天我们一起来看一下。
1、NUMA的由来
NUMA(Non-Uniform Memory Access),即非一致性内存访问,是一种关于多个CPU如何访问内存的架构模型,早期,在计算机系统中,CPU是这样访问内存的:

在这种架构中,所有的CPU都是通过一条总线来访问内存,我们把这种架构叫做SMP架构(Symmetric Multi-Processor),也就是对称多处理器结构。可以看出来,SMP架构有下面4个特点:
-
CPU和CPU以及CPU和内存都是通过一条总线连接起来
-
CPU都是平等的,没有主从关系
-
所有的硬件资源都是共享的,即每个CPU都能访问到任何内存、外设等
-
内存是统一结构和统一寻址的(UMA, Uniform Memory Architecture)
SMP架构在CPU核不多的情况下,问题不明显,有实验证明,SMP服务器CPU利用率最好的情况是2至4个CPU:

但是随着CPU多核技术的发展,一颗物理CPU中集成了越来越多的core,导致SMP架构的性能

NUMA是非一致性内存访问架构,解决SMP架构中CPU扩展带来的性能问题。在NUMA中,CPU被划分为多个节点,访问本地内存速度快,远程慢。编程时应尽量减少跨节点交互,提高性能。Linux系统提供工具如lscpu和numactl来查看NUMA信息,通过线程绑定和内存分配策略优化应用性能。

521

被折叠的 条评论
为什么被折叠?



