Hotdry.
systems-engineering

AMD Turin 上 UMA 与 NUMA 基准测试:缓存一致性开销、带宽扩展与延迟权衡

AMD EPYC Turin 双路系统 NPS0 (UMA) 模式下 DRAM 延迟飙升至 220 ns,高出 NUMA 90 ns;剖析缓存一致性开销、带宽缩放与多 socket HPC 延迟 tradeoffs,提供 BIOS 调优清单。

在 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 字)

查看归档