Package-to-Package Bus
Die-to-Die Bus
Core-to-Core Bus
System Bus Underpinning
片上总线 也称作片上网络(Network on Chip, NoC),在 CPU 核心日益增多的今天,变得更加重要. CPU 由单核变成多核,由单 Socket 变成多 Socket,因此一个可靠高效的总线在多核 CPU 的今天越来越重要. 本文从 Intel 总线的发展为例子,为各位开发者讲述总线的发展史, 以此更全面认识系统总线. 在介绍总线之前先做一些技术铺垫.
CPU(Central processing unit) 中央处理器,作为计算机系统运算和控制的核心,是信息处理、程序运行的最后执行单元. 指令在这里处理,信号从这里发出去. CPU 的范围比较大,里面包含了 Core、内存控制器、PCIe 控制器、片外总线等。一个 CPU 中可能包含多个 Core,通常所说的物理核心指的是 Core,每个物理核心都包含各自的电路。
物理核与逻辑核(超线程)
物理核(Physical Core) 是一个独立的执行单元,它可以其他物理核并行运行一个程序线程。现代 CPU 具有多个物理核,例如上图绿色虚线框内就是一个独立的物理核. 每个物理核上可以用于 2 个逻辑核(Logical Core), 逻辑核与在同一个物理核上运行的其他逻辑核心共享资源,例如上图红色框就是一个逻辑核, 两个逻辑核拥有属于各自的寄存器组,但共用一组 ALU 计算单元,如果每个逻辑 CPU 上运行一个进程,那么两个进程之间的通信完成在物理 CPU 核内部,无需系统总线,但从唯一的 ALU 来看无法真正意义上同时执行两个进程。可以将橙色款的部分看做一个没有逻辑核(超线程)的单核物理核. 在 Intel 超线程技术下,逻辑核也称为超线程, 那么在上图中,每个物理核拥有两个逻辑核。vCPU(虚拟 CPU) 等价于逻辑核(超线程),但存在差异: 虚拟 CPU 更多的是限定在虚拟化语境内. 一个宿主机上的逻辑核可以映射为虚拟机内部的一个虚拟CPU(vCPU), 因此在虚拟化语境中基本是同一个术语.
CPU Socket
多核架构指的是在一颗芯片上放多个处理器(CPU), 正如上图所示。一颗芯片插在主板的一个插槽(Socket) 上,一颗芯片上放了多个物理核. 在有的主板上也有多个插槽,那么就可以插多颗芯片,因此会看到 “2 颗 4 核”, 其含义的就是主板上有 2 个芯片插槽,每颗芯片上存在 4 个物理 CPU,那么总共 8 个物理 CPU,如果每个物理核存在 2 个超线程,那么总共 16 个超线程或逻辑核.
通常市面上看到的 CPU 一般会标识 X 核 Y 线程,意思就是该 CPU 包含了 X 个物理核,每个物理核上包含 (Y/X) 个逻辑核或超线程. 例如 Intel 酷睿 i7 11700 CPU 就是八核心十六线程 指的就是其包含 8 个物理核心且每个物理核包含 2 个超线程(逻辑核); 又如 AMD Ryzen 7000 CPU 就是96核心192线程, 指的就是包含了 96 个物理核心,每个物理核上包含了 2 个超线程(逻辑核).
CPU Die
Die 或者 CPU Die 指的是处理器在生产过程中,从晶圆(Silicon Wafer) 上切割下来的一个个小方块,在切割之前需要经过各种加工将电路逻辑刻在 Die 上面. Die 是一块半导体材料(通常是硅),一个 Die 可以包含任意数量的 Core,Die 是构成 CPU 的晶体管实际所在.
对于主流的 CPU 厂商 Intel 和 AMD,他们会将 1 个或者多个 CPU Die 封装起来形成一个 CPU Package, 有时也叫做 CPU socket(CPU 插槽). CPU Die 之间通过片内总线(Infinity Fabric) 互联,并且不同 CPU Die 上的 CPU 内核不能共享 CPU 缓存。在 Intel 的 Xeon 处理器里,同一个 CPU Die 上的物理核共享 L3 Cache.
例如 AMD EYPC CPU 而言,它的每个 CPU Socket 由 4 个 CPU Die 组成,每个 CPU Die 中含有 4 个 CPU 物理核,图中四个横的黑色长方体区域就是 CPU Die,每个 Die 中有 4 个物理核.
CPU Package
CPU Package 指的是包含一个或者多个 CPU Die 的塑料/陶瓷外壳和镀金的触电,也就是当你购买单个处理器时所得到的东西. 主板上每个 CPU 插槽(CPU Socket) 只能安装一个 Package, Package 也指是插在插座上的单元. 例如上图看到一个明亮外壳是 Package 的正面,背面全是金属触电,正好与主板的触电贴合在一起.
双核处理器是一个包含两个物理核(Core) 的 Package,可以是一个 CPU Die 也可以是两个 CPU Die。第一代多核处理器通常是在一个 Package 上使用多个 CPU Die,而现代设计将多个 Core 放到同一个 CPU Die 上,带来了一些优势,比如能够共享 On-Die 缓存。上图是一个双核心(Core) 的 CPU,使用了两片 CPU Die,每片上有一个物理核(Core).
CPU 系统信息
在一台拥有 2 个 Socket 的机器上安装上 2 个 CPU Package,每个 Package 拥有 2 个物理核(Core), 每个物理核上拥有两个超线程(逻辑核)。当系统运行之后,通过 “/proc/cpuinfo” 查看 CPU 相关的信息,其各字段含义:
- processor: 指超线程 ID 或者逻辑核 ID.
- apicid: 指逻辑核对应 LAPIC ID.
- core id: 指逻辑核或超线程所属的 Core ID(物理核 ID).
- physical id: 指超线程(逻辑核)对应的物理核插在 CPU Socket ID.
- cpu cores: 指系统包含物理核(Core) 的总数.