2. EPYC平台技术基线

把业务从旧平台迁到EPYC,第一步不是装系统,而是先建立“技术基线”认知:这颗CPU内部到底怎么组织核心、内存和IO,操作系统看到的NUMA拓扑长什么样,PCIe通道从哪来、够不够用。这些结构决定了迁移后性能是提升还是倒退,也决定了虚拟化、数据库、AI推理等负载的调优方向。本节围绕Zen架构演进、Chiplet封装、NUMA域、内存与IO拓扑、PCIe通道五条线索,说明它们如何共同影响迁移工程。

一、Zen架构演进:从“单die多核”到“多CCD+IOD”

AMD EPYC的根基是Zen微架构。第一代Zen(Naples,7001系列)用4个Zeppelin die通过Infinity Fabric拼接,每die 8核,最多32核,内存控制器和IO分布在每个die内。Zen 2(Rome,7002系列)是迁移工程中最常见的基线之一:计算部分改为最多8个CCD(Core Chiplet Die),每个CCD含2个CCX、共8个Zen 2核心,统一挂到一个中央IOD(I/O Die)上;IOD集中了8通道DDR4控制器、128条PCIe 4.0通道和Infinity Fabric交换网络。Zen 3(Milan,7003系列)把每个CCX从4核扩到8核,8个核心共享32MB L3,跨CCX延迟显著下降;Zen 4(Genoa,9004系列)升级到5nm CCD+6nm IOD,支持12通道DDR5、PCIe 5.0和最高96核。对迁移而言,代际差异不只是核数,而是“内存通道数、PCIe代数、NUMA域数量、L3共享范围”这四项直接改变容量规划与调优参数。

二、Chiplet设计带来的“距离”概念

Chiplet把大芯片拆成小die,好处是良率和成本,代价是核心之间不再等距。以Rome为例:同一CCX内的核心共享16MB L3,延迟最低;同一CCD内两个CCX通过Infinity Fabric互访,延迟略高;跨CCD访问要经过IOD,延迟最高。内存访问同理:每个CCD通过IOD连接到8个内存通道,但物理上并非所有通道到所有CCD等距。因此EPYC的NUMA不是“一个节点”,而是按NPS(Nodes Per Socket)配置呈现为1、2或4个NUMA节点。迁移前必须确认目标机BIOS中NPS设置,因为它直接改变操作系统看到的节点数和内存延迟分布。

EPYC Rome/Milan 典型拓扑:CCD—IOD—内存/PCIe 与 NUMA 域 IOD(I/O Die) Infinity Fabric 交换 内存控制器 + PCIe 根复合体 CCD0 CCX0+CCX1 8核 / 32MB L3 CCD1 CCX0+CCX1 8核 / 32MB L3 CCD2 CCX0+CCX1 8核 / 32MB L3 CCD3 CCX0+CCX1 8核 / 32MB L3 Infinity Fabric(跨CCD延迟高于片内) DDR4 通道0-1 NUMA Node 0 DDR4 通道2-3 NUMA Node 0 DDR4 通道4-5 NUMA Node 1 DDR4 通道6-7 NUMA Node 1 PCIe 4.0 x128 x16×8 或 x8×16 拆分 NVMe / GPU / NIC NPS=2 时:Node0 覆盖 CCD0/1 就近内存,Node1 覆盖 CCD2/3 就近内存;跨节点访问经 IOD,延迟更高

三、NUMA域:迁移前必须确认的“隐形参数”

EPYC的NUMA域由NPS决定。NPS=1时整颗CPU呈现为1个NUMA节点,操作系统看不到内存距离差异,适合对延迟不敏感、追求简单调度的场景;NPS=2时按IOD左右各4通道划分;NPS=4时进一步细分,每个节点2个内存通道。迁移工程中常见问题:旧平台是单节点,迁移后BIOS默认NPS=4,数据库或虚拟化层未重新绑定,导致跨节点内存访问比例升高,表现为吞吐下降、尾延迟抖动。判断方法是在目标机执行 numactl --hardware 或 lscpu | grep NUMA,确认节点数、每节点CPU列表和内存大小,再与业务进程的CPU亲和性、内存分配策略对照。

四、内存与IO拓扑:通道数决定带宽上限

Rome/Milan每路8通道DDR4-3200,理论带宽约204.8GB/s;Genoa每路12通道DDR5-4800,理论带宽约460.8GB/s。迁移时若旧平台是6通道,直接按核数扩容可能让内存带宽成为瓶颈,尤其是内存数据库、实时分析、NFV转发类负载。IO侧,Rome/Milan提供128条PCIe 4.0通道,Genoa提供128条PCIe 5.0通道。通道不是“无限可切”,典型配置是:每路CPU引出若干x16插槽,剩余通道给板载NVMe、OCP网卡和BMC。迁移前应列出目标机PCIe设备清单,核对GPU、NVMe、网卡所需的lane数和代数,避免“插槽够但通道不够”或“PCIe 5.0设备插在4.0插槽上降速”。

五、对迁移工程的直接影响与检查清单

把上述基线落到迁移动作上,可形成一份可执行的核对表:

检查项 目标值/示例 判断依据
NPS设置 NPS=1/2/4,与业务调度匹配 numactl --hardware 节点数与预期一致
内存通道占用 8通道全插(Rome/Milan) BIOS/带外显示所有通道已填充,带宽达标
PCIe链路宽度与代数 GPU x16 Gen4、NVMe x4 Gen4 lspci -vv 中 LnkSta 显示 16GT/s x16
跨CCD/跨节点延迟 同CCX < 跨CCD < 跨Socket 用 likwid 或延迟测试工具对比
虚拟化CPU绑定 vCPU落在同一NUMA节点 virsh vcpupin / numatune 配置后验证
迁移前建议在目标EPYC上先跑一轮基线测试:numactl --hardware 看拓扑,lscpu 看NUMA与缓存,lspci -vv 看PCIe链路,再用业务自身的压测脚本对比迁移前后P99延迟与吞吐。只有拓扑与业务调度对齐,Chiplet带来的核心数优势才能真正转化为性能收益。

总结来说,EPYC平台的技术基线不是一张规格表,而是“Zen代际—Chiplet布局—NUMA域—内存通道—PCIe通道”这条因果链。迁移工程中,先确认目标机NPS与内存通道填充,再核对PCIe链路宽度与代数,最后按NUMA节点绑定业务进程和虚拟机的CPU/内存,才能避免“核多了、性能反而降了”的典型问题。