在 AMD EPYC Turin(Zen 5 架构,代号 9005 系列)多 socket 配置中,选择 UMA(Uniform Memory Access,NPS0 模式)还是 NUMA(Non-Uniform Memory Access,NPS1+ 模式)直接影响 HPC 工作负载的性能。观点上,NUMA 模式是现代多 socket 系统的首选,因为它通过暴露 socket / 节点亲和性,实现更低的本地延迟和可预测的缓存一致性,尽管编程稍复杂;UMA 虽简化模型,但缓存一致性开销和跨控制器路由导致延迟激增,仅适合低负载或 NUMA-unaware 应用。
首先,从基准证据看,双路 EPYC 9575F(高频 5GHz 版)在 NPS0 (UMA) 模式下,DRAM 访问延迟超过 220 ns,比单 socket EPYC 9355P 的 NPS1 模式高出近 90 ns。据 Chips and Cheese 测试,这种惩罚源于 UMA 将双 socket 所有 24 个内存控制器(IMC)视为单一均匀池,访问需跨 GMI(Infinity Fabric)路由,放大缓存 coherency 协议(如 CCIX/GSI)的 snoop 开销。在带宽测试中,NPS0 直到系统负载近 400 GB/s 才显现优势(利用更多 IMC),但 per-CCD 带宽(GMI-Wide 链接下读写各 64B/cycle)与 NPS1 相当,仅在极端饱和时 NPS0 略胜。这反映了 Turin 的 chiplet 设计:CCD 间 Fabric 时钟(典型 2GHz)限制了 UMA 的 scaling。
SPEC CPU2017 单线程基准进一步证实 tradeoffs。高缓存命中率任务(如 548.exchange2)中,9575F 的 5GHz 时钟让 NPS0 整体分数不落下风,甚至超低频 NUMA 配置;但内存密集型如 502.gcc、505.mcf(DRAM miss 多)性能倒退,高延迟抵消时钟收益。浮点套件中,549.fotonik3d 和 554.roms 等模拟负载 NPS0 落后明显,而 538.imagick 等缓存友好者受益。这说明 UMA 的 “均匀分布” 在 coherency traffic 高时恶化 L3 争用,尤其多 socket 下跨 die snoop 风暴放大 20-30% 开销。
针对 HPC 工作负载(如 MPI/OpenMP 模拟、AI 训练),延迟 tradeoffs 更关键:本地访问(<150 ns)占 80%+ 时 NUMA 胜出;随机全局访问时 UMA 带宽 scaling 助一臂之力。但 Turin 双路下,远程访问比例>10% 即触发性能 cliff,故优化焦点是强化数据局部性。
可落地参数与清单:
1. BIOS 调优(优先 NPS1):
- NPS Mode: NPS1(每个 socket 一 NUMA 节点,平衡延迟 / 带宽)。
- NPS4(细粒度,8 IMC/node):仅内存局部性极强负载(如 per-CCD 绑定)。
- DF Cstates: Enabled(Fabric 电源门控,减 coherency idle 开销)。
- GMI LCLK Freq: Max(Infinity Fabric 时钟拉满,Turin 目标 2.2GHz+)。
- 阈值监控:
numastat中 numa_miss <5%,local_node>90%。
2. 运行时绑定(numactl):
- 单节点:
numactl --cpunodebind=0 --membind=0 ./app(绑定进程 / 内存到 node 0)。 - MPI 多节点:
mpirun --bind-to socket -np 192 ./mpi_app(OpenMPI 默认 NUMA-aware)。 - 容器 / K8s:
numa-balance: true,Pod spec 中nodeSelector: numa.node=0。 - 回滚:若 miss 率 >15%,降 NPS0 测试,但预设超时阈值 10% perf loss 即弃。
3. 监控与 profiling 清单:
| 指标 | 工具 | 优值阈值 | 风险 |
|---|---|---|---|
| DRAM 延迟 | jsmemtest.chipsandcheese.com |
NPS1 <150 ns | UMA >220 ns,单线程 -20% |
| 带宽饱和 | Stream Triad | >400 GB/s 选 UMA | NPS0 idle 时低效 |
| Coherency traffic | perf stat -e cycles,remote_cache |
<10% cycles | snoop 风暴,降 NPS |
| NUMA miss | numastat |
<5% | 跨 node >20%,rebind |
| SPEC-like | Phoronix/CK | NPS1 baseline | UMA 仅 cache-hit >80% |
4. HPC 场景参数:
- 科学模拟(HACC-like):NPS1 +
numactl --hardware验证均衡。 - 大模型训练:NPS1,GPU 与对应 node 绑定(
nvidia-smi -i 0 -c EXCLUSIVE_PROCESS+ numa)。 - 回滚策略:perf 降 >15% 时,fallback NPS0 但加
--interleave=all模拟均匀。
总之,在 Turin 多 socket HPC,NUMA (NPS1) 的低延迟与 scaling 是主流,UMA 的 coherency overheads 只在特定高带宽 unaware 场景有 niche。实际部署前,必跑 Stream/MLC 基准,结合 perf/numastat 迭代。
资料来源:
- Chips and Cheese: “Evaluating Uniform Memory Access Mode on AMD's Turin”(延迟 / 带宽数据)。
- AMD EPYC 9005 架构文档(NPS 模式说明)。
(正文字数:约 1050 字)