SMP(Symmetric Multi-Processor)对称多CPU:
顾名思义, 在SMP中所有的处理器都是对等的, 它们通过总线连接共享同一块物理内存,这也就导致了系统中所有资源(CPU、内存、I/O等)都是共享的,当我们打开服务器的背板盖,如果发现有多个cpu的槽位,但是却连接到同一个内存插槽的位置,那一般就是smp架构的服务器,一般pc、笔记本、手机还有一些老的服务器都是这个架构,可以发现一个特点就是cpu个数比较少。 各CPU共享相同的物理内存,每个 CPU访问内存中的任何地址所需时间是相同的, 由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费,使 CPU性能的有效性大大降低。
NUMA(Non-Uniform Memory Access) 非一致性内存访问;
计算机早期,内存控制器还没有整合进 CPU,所有的内存访问都需要经过北桥芯片来完成。CPU 通过前端总线(FSB,Front Side Bus)连接到北桥芯片,然后北桥芯片连接到内存——内存控制器集成在北桥芯片里面。在该架构下CPU 和内存之间的通信全部都要通过前端总线,而提高性能的方式,就是不断地提高 CPU、前端总线和内存的工作频率。
不断提高频率的方式来提供性能是行不通的:
插个小曲:物理定律无法违背,温度,制程,功耗均是制约条件之一,疯狂的提高主频,只会使发热量剧增。摩尔定律和登纳德缩放定律说明可以不断缩小晶体管尺寸,并且在CPU中容纳更多晶体管,而功耗基本不变。
于是numa随之诞生:
CPU 厂商把内存控制器集成到 CPU 内部,一般一个 CPU socket 会有一个独立的内存控制器;每个 CPU scoket 独立连接到一部分内存,这部分 CPU 直连的内存称为本地内存;CPU 之间通过 QPI(Quick Path Interconnect) 总线进行连接。CPU 可以通过 QPI 总线访问不和自己直连的远程内存。
如果说smp 相当于多个cpu 连接一个内存池导致请求经常发生冲突的话,numa 就是将cpu的资源分开,以node 为单位进行切割,每个node 里有着独有的core ,memory 等资源,这也就导致了cpu在性能使用上的提升,设计原理就是访问本地资源(本地内存、I/O槽口)的速度远远高于访问远地资源(其他node的资源)的速度,但是同样存在问题就是多个node 之间的资源交互非常慢,当cpu增多的情况下,性能提升的幅度并不是很高,无法实现性能的现象增加。所以可以看到很多明明有很多core的服务器却只有2~4个node区。
MPP (Massive Parallel Processing) :
大规模并行处理系统,这样的系统是由许多松耦合的处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的CPU都有自己私有的资源,如总线,内存,硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。