经常和处理器的这些概念打交道,每个的意思都蛮熟,但是这个缩写还是时常出现断片情况,总结一下。

首先是更基础的几个概念:

socket:就是主板上插cpu的槽的数目,也即管理员说的”路“,一般做server chip说的dual-socket,就是双路直连的芯片,主要是因为单芯片性能不够,而限于工艺尺寸又没办法放更多的资源在一颗芯片,所以需要多路。

  core:  就是我们平时说的”核“,即双核,4核等

  thread: 就是每个core的硬件线程数

  然后是比较容易混淆的几个概念:

  SMT,同时多线程,Simultaneous multithreading,简称SMT。

  SMT是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)的方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(CPI)计数较高的工作负载创造性能优势。 处理器采用超标量结构,最适于以并行方式读取及运行指令。

  CMP, 片上多处理器(Chip multiprocessors,简称CMP)

  其实就是多核结构。

  SMP, 对称多处理器(Symmetric Multi-Processors,简称SMP)

  是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。像双至强,也就是我们所说的二路,这是在对称处理器系统中最常见的一种(至强MP可以支持到四路,AMD Opteron可以支持1-8路)。也有少数是16路的。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对于多数的用户来说已经够用了。在高性能服务器和工作站级主板架构中最为常见,像UNIX服务器可支持最多256个CPU的系统,其实qemu从代码设计上也是最大支持256个virtual cpu。
  

  NUMA: Non-uniformed Memory Access

  在NUMA出现之前,CPU朝着高频率的方向发展遇到了天花板,转而向着多核心的方向发展。

  在一开始,内存控制器还在北桥中,所有CPU对内存的访问都要通过北桥来完成。此时所有CPU访问内存都是“一致的”,如下图所示:
  
UMA:这样的架构称为UMA(Uniform Memory Access),直译为“统一内存访问”,这样的架构对软件层面来说非常容易,总线模型保证所有的内存访问是一致的,即每个处理器核心共享相同的内存地址空间。但随着CPU核心数的增加,这样的架构难免遇到问题,比如对总线的带宽带来挑战、访问同一块内存的冲突问题。为了解决这些问题,有人搞出了NUMA。

  NUMA 全称 Non-Uniform Memory Access,译为“非一致性内存访问”。这种构架下,不同的内存器件和CPU核心从属不同的 Node,每个 Node 都有自己的集成内存控制器(IMC,Integrated Memory Controller)。

  在 Node 内部,架构类似SMP,使用 IMC Bus 进行不同核心间的通信;不同的 Node 间通过QPI(Quick Path Interconnect)进行通信,如下图所示:
NUMA

一般来说,一个内存插槽对应一个 Node。需要注意的一个特点是,QPI的延迟要高于IMC Bus,也就是说CPU访问内存有了远近(remote/local)之别,而且实验分析来看,这个差别非常明显。
  
  ccNUMA: Cache Coherent NUMA

ARM高性能服务器CPU芯片设计,主要致力于一致性总线CHI, 非一致性总线AXI/AHB设计,PCIe/DDR/Debug/Power等SoC模块设计