第二代 AMD EPYC 发布后,成为了服务器 CPU 领域无敌一般的存在。
在提 EPYC 前,先要搞明白,服务器 CPU 和家用 CPU,在一些性能要求上,存在什么差别。
同样是 x86 CPU,同样的指令集,毫无疑问的是,你可以把家用 CPU 放到服务器中用,也可以反过来,但是服务器和家用的 CPU,仍然存在着一些差别,这些差别主要源于,家用和服务器用的 CPU,对相关性能的要求是不一致的。
服务器往往有承载高并发的任务,为了获得更大的并发吞吐,往往对 CPU 核数,线程数有更高的要求,反观家用 CPU,对多核并行的利用远没有服务器高,更多时候,单核的高频更重要。
所以服务器用 CPU 往往拥有更多的核心数,但是单核频率,不见得就比家用的更高。就拿 EPYC 2 来说,它搭载 64 颗 7nm 制程的核心,也就是 64 核,128 线程:
Intel 系列目前仍然没有上 7nm,AMD 作为 7nm 工艺的先驱,这块芯片也采用 7nm 制程,带来更低的功耗,采用了新的微架构(Zen 微架构),单核的 IPC (Instructions Per Cycles)相较于上一代有 15% 左右的改善,也就是说,新架构能用更少的周期数,执行更多的指令。
衡量 CPU 性能还有一个重要指标,就是 Cache。大家都知道,CPU 内部也是有缓存的,而且往往是使用的多级缓存,L1,L2,L3… 这块芯片的 L3 级缓存达到了惊人的 256MB:
但看这块 CPU,称作性能怪兽一点也不为过,但除去这些 CPU 内部的指标,服务器往往还需要大内存 + 高内存带宽。
服务端场景下,很多服务需要大内存的支持,比如 Redis 集群,各种缓存机制,内存理论上是越大越好,但是很多时候受限于操作系统和 CPU 架构,内存会有一个理论上限,而服务器也应该支持更高的内存上限。
在 CPU 核心数增多后,每个核心都要对内存发生读写,所以对内存的带宽也提出了更高的要求。
二代EPYC(霄龙)的 AMD Infinity 架构将 I/O 模块和 计算核分离了出来,在芯片架构上,长这样:
可以看到有八个小晶片,中间一个大晶片,你看到的八个小晶片里面装着处理器核心,每个晶片八个核心,而中间的那块大晶片叫 I/O 晶片,专门负责和外部通信 + 处理器安全。也就是说负责 I/ O 的控制模块和处理器核心,在芯片的布局上是分开的,也正因为此它可以提升更高的 I/O 和 内存带宽支持,支持八通道内存,而且更猛的是,这块芯片支持 128 路 PCIe 4.0。
在讲 PCIe 4.0 之前,我们先搞明白 I/O 带宽对服务器有多重要。
CPU 在运行的时候,不可能只是自己独立的运行,它要和外围设备进行数据传输,一个典型的例子就是显卡。CPU 把计算任务交给显卡,显卡完成计算,再将计算结果拷贝回 CPU,这个过程 CPU 和显卡之间要有大量的数据交互,需要极高的 I/O 带宽,和固态硬盘之间进行数据传输,也同样如此,对于这些外围设备,现在 CPU 和它们之间交互,都是用统一的硬件标准 PCIe 进行通信的,而 PCIe 的最大传输速度,就直接决定了 I/O 吞吐的上限在哪。
来看个 PCIe 版本进化图:
PCIe 4.0 的理论带宽上限是 3.0 的两倍,而 AMD 则是第一个发布支持 PCIe 4.0 芯片的公司,EPYC 毫无疑问也同样支持 PCIe 4.0。
无论连接 GPU 作为深度学习服务主机,还是做普通的数据库主机,都让 I/O 能力不再成为系统的瓶颈。
还记得刚才提到的 CPU 架构图中中间的那个大晶片吗?它不仅负责 I/O 控制,还实现了硬件级安全。
我们一般提到的安全,往往都是指一些协议层面的安全,比方说 https,保证了 http 协议通过网络传输时,数据的安全和不可篡改的特性,但这个是网络层面的安全,对于注入到服务器内部的,获取了 root 权限的一些恶意进程,对内存的任意读取带来非常大的安全风险,因此对内存进行加密,是一个很重要的安全保障,EPYC Gen2 原生支持了内存加密。
原理其实比较简单,就是 CPU 和内存在进行数据交互的时候,本来是明文传输,在有了 Secure Memory Encryption 的支持后,CPU 内部会有一个加密模块,所以写到主存中的数据,都是加密后的数据,而这个加密的 Key,理论上无法被外界读取,加密直接硬件集成在芯片中,无需任何软件支持,整个过程对于软件是透明的。
最后不用多说了,AMD 在多核性价比方面一直遥遥领先,在服务器这个吃多核性能的领域,强烈推荐选择使用 AMD 处理器,比如搭载 第二代EPYC的戴尔 PowerEdge 系列等。