NUMA
本文最后更新于:1 年前
SMP和AMP对比
SMP(Symmetric MultiProcessing):对称多处理器架构
AMP(Asymmetric MultiProcessing):非对称处理其架构
二者区别:
- SMP里的多处理器是同构的,使用的是相同架构的CPU;AMP的多个处理器可能是异构的;
- SMP多个处理器共享同一内存地址空间;AMP则每个处理器有各自独立的地址空间;
- SMP多处理器可以通过共享内存来协同通信;AMP则需要提供一种处理器间通信机制
现今主流X86架构的多处理器的电脑都是SMP架构,然后AMP架构多是应用于嵌入式系统
NUMA和UMA对比
NUMA(Non-Uniform Memory Access):非统一内存访问
UMA(Uniform Memory Access):统一内存访问
NUMA和UMA所指代的统一是处理器访问内存的访问时间是否依赖于二者相对位置
NUMA和UMA是SMP架构的一种设计和实现的不同选择
摘自Wiki:
NUMA architectures logically follow in scaling from symmetric multiprocessing (SMP) architectures.
先说一下UMA架构,就是CPU对内存的访问不依赖于其二者的相对位置关系,因为CPU访存是通过内存控制器(Memory Controller)来的,内存控制器被北桥芯片集成,因此是以多个CPU-北桥芯片-内存这样的方式链接的.
各个CPU是通过FSB(Front Side Bus)前端总线与北桥相连.
由上图可以看出来,总线模型保证了CPU对所有内存的访问都是一致的,不必考虑相对位置带来时间差异
这种架构适合用于如服务器(网站,数据库)一类的机子上,因为这类工作都是外部请求访问时,服务器创建线程, 随机访存,然后线程处理的时间很短.
但随着业务的扩展,会遇到需要很大运算量的应用,那么此刻若是有一个更接近于CPU的本地内存,可以提升速度,而且这样大运算量的应用,或者说线程,不止一个(则需要多个CPU,或者多个核心),那么UMA就不适应于这样的工作,而且FSB会成为其bottleneck(加核心没用),因此有了NUMA的出现
在NUMA架构中,其将多个核心作为一个节点(Node)(如一颗多核的CPU),内存控制器芯片(MCH)集成在Node内,每一个Node独立连接一部分内存,此直连的内存称为**“本地内存”**,Node间通过QPI(Quick Path Interconnect)总线连接.因此可以访问"远程内存".
由此可以见到内存访问存在本地和远程的区别!
在Linux机器下,可以通过numactl指令进行查看
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!