AMD EPYC™ 9005 BIOS & Workload Tuning Guide

hardware amd-epyc-9005-bios-tuning-guide
bios-tuningepyc-9005numapower-managementinfinity-fabric

AMD EPYC™ 9005 BIOS & Workload Tuning Guide — L2 #

1. TL;DR #

AMD 5th Gen EPYC (Socket SP5) BIOS 调优指南 v2.2:44 个字段、25 张 workload 表。真实结论是"默认即最优"——仅约 30 格偏离默认,集中在 SMT、L3-as-NUMA、NPS、TDP/PPT=OPN Max、APBDIS=1 五个旋钮上;其余是一份未标注冲突的功耗仲裁说明书。


2. Q1 / Q2 / Q3 #

Q1 — 痛点 #

SP5 平台把大量原属固件内部策略的控制权暴露成了 BIOS 用户可见字段:功耗上限(TDP / PPT)、确定性模式(Determinism)、Infinity Fabric P-state(APBDIS / DfPstate)、xGMI 链路速率与宽度、NUMA 划分(NPS × L3-as-NUMA)、以及 7 个独立的 L1/L2 预取器。这些字段两两耦合,且默认值同时由 AMD 推荐值与 OEM 覆盖值双重决定。文档自己给出的问题陈述是:"Default BIOS options generally produce the best overall performance for generic workloads, but these defaults may not be optimal for a specific workload."

痛点的第二层来自架构本身:CPU 的功耗预算是封闭的。core 与 uncore(DF / xGMI / 内存控制器)抢同一个 package power limit,所以"降低 xGMI 速率"这种看似只影响互联的动作,会通过腾出预算的方式提升 core boost 频率。用户无法从任何单个字段的说明里看出这个耦合——§3.4.1 只说"can also save uncore power (CPU power not consumed by the cores) to either: Increase core frequency. Reduce overall power consumption."

第三层是层级覆盖:§2.6 明确 BIOS → UEFI → OS/hypervisor → application 四层,每层都可能改写前一层。于是 BIOS 里设对了不等于生效,这正是 Chapter 5 存在的理由(numad、numa_balancing、cpupower idle-set 都能把 BIOS 决策推翻)。

Q2 — 方法 #

指南采用三层递进结构,而非平铺的字段字典:

  1. Chapter 2(默认值摘要):Tables 2-1…2-5,按子系统分 5 组(processor core / power / NUMA-memory / Infinity Fabric / PCIe-IO-security-virtualization),给出 AMD 推荐给 OEM 的默认名与默认值,并附免责声明"End users must confirm their OEM BIOS setting availability and options."
  2. Chapter 3(字段详解):Tables 3-1…3-21 + 散文小节,给每个字段的语义与"改它能得到什么"。
  3. Chapter 4(workload 配方):25 张表 × 5 个 workload 族(general-purpose / memory-IO / virtualization-containers / database-analytics-AI · HPC-telco-EDA),每族固定 5 个子表(core / power / NUMA-memory / Infinity Fabric / I/O),单元格填 Default 或具体值。
  4. Chapter 5(调试):承认 BIOS 设置会被 OS 推翻,给出 4 步排查法与具体命令。
  5. 方法学上最值得注意的一点:Chapter 4 不是性能数据驱动的推导,而是一张"偏离默认值清单"。preamble 承认了这一点——"these BIOS settings are not 'one size fits all' because your specific workload(s) are not identical to synthetic benchmarks."

    核心技术壁垒:本指南真正无法复现的部分不是任何一条推荐值,而是per-part 的功耗–频率曲线。OPN Max、"maximum algorithm-allowable frequency"、"This headroom varies from part to part" 三处引用共同指向一组未公开的 silicon binning 表。Determinism=Power 模式的全部价值就是"tap into the additional performance above the target performance of a OPN",而这个 headroom 的大小、以及 TDP/PPT 从 400 W 抬到 500 W 到底换来多少 MHz,文档一个数字都没有给。任何第三方要复刻 Chapter 4 的推荐,必须在自己的机器上重新测出这条曲线;指南提供的是参数空间的拓扑,不是参数的取值依据。

    Q3 — 结果 #

    指南没有一条性能数字。可验证的"结果"只有 Chapter 4 的偏离清单本身,其信息量分布极不均匀(详见 §5):

    • 25 张表里绝大多数单元格是 Default;真正承重的偏离约 30 格。
    • 有 4 个 workload(HPC / EDA / NIC THROUGHPUT / NIC LATENCY)关掉 SMT,理由在 §3.1.1:"Enabling SMT causes neutral to negative performance impacts on some workloads, especially HPC."
    • AI/ML 这一列没有任何专属调优:只有 Determinism=Power + TDP/PPT=OPN Max,与 RDBMS 完全同构。
    • 唯一给出量级的三处断言全部无数据支撑:PCIe 10-bit tag 带来 "3x increase" 的 non-posted request 数、x2AVIC 支持 "512 virtual CPUs"、xGMI DLWM 把宽度从 "16 to 8, or x4"。

    3. 架构 / 方法图 #

    源文档 35 页里只有 1 张图(封面美术图,非技术图),所有拓扑与耦合关系都以散文形式散落在 Chapter 2/3 两处。下面三张图是把这些散文重建为结构。

    3.1 功耗预算仲裁 —— 五个旋钮如何抢同一份 package power #

    graph TD OPN["OPN silicon bin
    (未公开的 P-f 曲线)"] --> PPL["Package Power Limit
    PPT 100-500 W"] DET["Determinism Enable
    Power / Performance"] --> PPL TDPC["TDP Control=Manual
    TDP 100-500 W"] --> PPL PPL --> CORE["core power
    → Core Performance Boost
    上限 BoostFmax"] PPL --> UNCORE["uncore power"] UNCORE --> DF["DF / Infinity Fabric P-state
    APBDIS + DfPstate 0-4"] UNCORE --> XGMI["xGMI link
    speed 20/25/32 Gbps
    width x4/x8/x16"] UNCORE --> MEM["memory controller
    Memory Target Speed
    3200-6400 MT/s"] DF -->|"省下的功耗回流"| CORE XGMI -->|"省下的功耗回流"| CORE MEM -->|"省下的功耗回流"| CORE style PPL fill:#ffe0b2 style CORE fill:#c8e6c9 style OPN fill:#ffcdd2

    这张图是理解整份指南的钥匙:所有 uncore 侧的"降级"动作(降 xGMI 速率、强制窄链路、降内存频率)在文档里都被同一句话解释——省下的功耗可以回流给 core boost。反过来,所有 latency-oriented 的配方(APBDIS=1 + DfPstate=0、DF C-States=Disabled、Force Link Width)都是主动放弃这份回流以消除状态切换抖动。红色节点是壁垒所在:预算的绝对值由未公开的 binning 决定。

    3.2 NUMA 划分的双轴解耦 #

    graph LR NPS["NPS 设置
    NPS0 / NPS1 / NPS2 / NPS4"] L3["L3 Cache as NUMA Domain
    Disabled / Enabled"] MI["Memory Interleaving
    Auto-Enable / Disable"] NPS -->|"永远决定"| GRAN["内存交织粒度
    (membind)"] NPS -->|"仅当 L3-as-NUMA=Disabled"| COUNT["NUMA 节点数
    (cpubind)"] L3 -->|"Enabled 时覆盖节点数
    每个 LLC = 1 节点"| COUNT L3 -.->|"不影响"| GRAN MI -->|"开关 NUMA 节点内部交织"| GRAN MI -.->|"不影响节点数
    也不改 channel→node 映射"| COUNT style COUNT fill:#bbdefb style GRAN fill:#c8e6c9

    这是全文档最容易配错的地方,也是 Chapter 2 唯一明确写出正交性的地方:"The NPS setting always determines the memory interleaving regardless of whether LLC as NUMA is Enabled or Disabled." 两个轴——节点计数(影响调度器/cpubind)与交织粒度(影响带宽/延迟)——由不同字段控制且只有一条单向覆盖边。工程含义:想给不做 L3-aware 调度的 hypervisor 更细的调度域,应开 L3-as-NUMA 而不是调 NPS,因为后者会连带改变交织粒度。

    3.3 设置生效的层级链(§2.6 + Chapter 5) #

    sequenceDiagram participant FW as System firmware / BIOS participant UEFI as UEFI shell participant OS as OS / hypervisor participant APP as Application FW->>UEFI: 硬件校验完成,BIOS 设置生效 UEFI->>OS: 可继续交互修改 OS->>OS: numad 迁移进程/内存 OS->>OS: numa_balancing 移动 task 靠近内存 OS->>OS: cpupower idle-set -d 2 关 CC6 OS->>APP: 交付"已被改写"的拓扑 APP->>APP: 应用自身仍可改底层硬件行为 Note over FW,APP: 每一层都可覆盖前一层;部分改动需 reboot

    Chapter 5 的四步排查法正对应这条链的后半段:先 numactl -H 确认拓扑,再查 daemon(numad),再查策略(numa_balancing),最后处理 BIOS 里根本没有的字段(CC6 / OS 侧 C2)。


    4. 作者证明 #

    无形式化作者证明 — 仅广告数字。 本文档不含任何方程、性能投影模型或基准数据(L1 完整性映射确认:"Equations: none in source")。全部量化断言为三处无支撑数字(3x non-posted requests、512 virtual CPUs、xGMI 16→8→x4)。

    以下是把散文约束重建为可检验形式后的结果——记号与不变量取自文档原文,但方程本身是重建物,不是作者给出的。

    4.1 记号表 #

    符号含义来源 / 单位
    $P_{\text{TDP}}$可配置 Thermal Design PowerTable 3-7,W,range 100–500
    $P_{\text{PPL}}$Package Power Limit(字段名 PPT)Table 3-7,W,range 100–500
    $P_{\text{core}}$所有核心消耗的功耗§3.2.3 隐含
    $P_{\text{unc}}$uncore 功耗 = DF + xGMI + memory controller§3.4.1 "CPU power not consumed by the cores"
    $f_{\max}$BoostFmax,用户指定的 boost 频率上限MHz,decimal
    $f_{\text{alg}}$"maximum algorithm-allowable frequency"§3.1.3,未公开
    $C$每 socket 物理核数§4.4.3 footnote
    $T$每核硬件线程数(SMT 开=2,关=1)Table 2-1
    $N$每 socket NUMA 节点数(NPS 值)∈ {1,2,4}
    $L_{\text{node}}$每 NUMA 节点逻辑处理器数Windows 约束对象
    $S$xGMI 链路速率∈ {20, 25, 32} Gbps
    $W$xGMI 链路宽度∈ {x4, x8, x16}
    $p$Infinity Fabric DfPstate 索引0–4,0 = 最高性能

    4.2 方程与物理意义 #

    (E1) 封闭功耗预算:$P_{\text{core}} + P_{\text{unc}} \le P_{\text{PPL}}$

    物理意义:这是整份指南所有 uncore 降级建议的唯一依据。$P_{\text{unc}}$ 的每一瓦节省都是 $P_{\text{core}}$ 的可用增量,因此"降 xGMI 速率提升核心频率"不是玄学而是预算重分配。

    (E2) 实际 boost 频率:$f = \min(f_{\max},\; f_{\text{alg}}(P_{\text{PPL}} - P_{\text{unc}},\, T_{\text{junction}},\, \text{bin}))$

    物理意义:§3.1.3 原话"The BoostFmax setting limits the maximum boost frequency but does not set a fixed frequency. The SoC will not exceed the maximum algorithm-allowable frequency if BoostFmax is set too high." 即 BoostFmax 只是一个 clamp,把它设高不会突破 $f_{\text{alg}}$;$f_{\text{alg}}$ 依赖 bin,这就是壁垒。

    (E3) Determinism 语义:Performance 模式取 $f = \min_{\text{parts}} f_{\text{alg}}$(跨数据中心一致);Power 模式取 $f = f_{\text{alg}}(\text{this part})$(逐片最大化,跨机器方差)。

    物理意义:Performance 是把性能钉在最差 bin 上换取可预测性;Power 是放弃可预测性换取每片硅的全部 headroom。这解释了为什么 §3.2.3 说 Power 模式下要把 $P_{\text{TDP}} = P_{\text{PPL}} = \text{OPN Max}$。

    (E4) Windows CPU group 约束:$L_{\text{node}} = \dfrac{T \cdot C}{N} \le 64$

    物理意义:Windows 的 kgroup 上限 64 个逻辑核。这是全文档唯一可以完全形式化并独立验算的约束,见 §4.3 check 6。

    (E5) uncore 互联功耗单调性:$P_{\text{xGMI}} \propto S \cdot W$,且 latency jitter $\propto$ P-state 切换频度

    物理意义:DLWM(Dynamic Link Width Management)把宽度从 x16 降到 x8/x4 省功耗,代价是"Latency may increase in some scenarios involving low-bandwidth, latency-sensitive traffic as the processor transitions from a low-power xGMI state to full-power xGMI state." Force 宽度即把切换频度归零。

    (E6) C-state 层级:Global C-State Control = Disabled $\Rightarrow$ core state $\in \{C0, C1\}$,因为 "the C1 state cannot be disabled"。

    物理意义:这个字段不是"关掉所有 C-state",而是把可达状态集截断到 C0/C1,同时连带关掉 IO-based C-state 与 DF C-states——这是文档强烈不建议动它的原因。

    4.3 最小检查(6 项) #

    #检查结果
    1量纲一致性:TDP 与 PPT 是否同量纲同区间?✅ 两者皆 W、皆 100–500。但约束缺失:$P_{\text{PPL}} \ge P_{\text{TDP}}$ 这一物理必然关系文档从未声明,用户可合法设出 PPT=100 / TDP=500 的无意义组合。Table 3-7 的 PPT 行还带一个重复项目符号("• • Values 100–500"),像是未完成的编辑。
    2边界情形:$P_{\text{TDP}} = P_{\text{PPL}} = \text{OPN Max}$ 与 Determinism=Power 组合✅ 自洽。§3.2.3 明确这是 Power 模式取最大性能的方法,且 Chapter 4 的 CPI/JAVA/POWER-EFF/RDBMS/AI-ML/HPC/EDA 七个配方确实全部落在这个组合上。
    3退化情形:APBDIS=1 但 DfPstate 取非 0 值⚠️ 未定义。§3.4.3 只把 APBDIS=1 与 $p=0$ 配对说明("forces the AMD Infinity Fabric and memory controllers into full-power mode"),而 Table 3-14 允许 $p \in [0,4]$。$p=4$ + APBDIS=1 会把 fabric 钉死在最低性能 P-state,是一个合法但灾难性的配置,文档无任何警告。更糟:DFPSTATE 字段只存在于 Chapter 3,Chapter 2 的默认值摘要完全没有它,而 §3.4.3 的核心建议依赖它。
    4计数守恒:NPS1/NPS2/NPS4 的通道数是否守恒?❌ 不守恒。§3.3.2 称 NPS1 交织"across all 24 memory channels",NPS2 每域"six memory channels",NPS4 每象限"three memory channels"。守恒要求 $6 \times 2 = 3 \times 4 = 12$,而非 24——"24" 是双路数字混入了单路描述。同段又追加"Every pair of memory channels is interleaved",与"three channels per quadrant"直接冲突(3 不能被 2 整除)。
    5单调性 / 内部一致性:EDA 配方是否与 (E5) 一致?⚠️ 部分不一致。Table 4-24 给 EDA 设 XGMI FORCE LINK WIDTH CONTROL = Force、APBDIS = 1、DF C-STATES = Disabled——前两项与"消除抖动"一致,但 XGMI FORCE LINK WIDTH 本身留在 Default,于是"强制某个宽度"却没说强制到哪个宽度。按 (E5),Force 的收益完全取决于这个未指定的值。
    6可独立验算的约束:(E4) 能否复现 §4.4.3 的 Windows kgroup 规则?❌ 规则写错了。代入 $T=2$:$C \le 32 \Rightarrow L=2C \le 64$,NPS1 成立 ✅;$32 < C \le 64 \Rightarrow L = C \le 64$,NPS2 成立 ✅;$C > 64 \Rightarrow L = C/2 \le 64$ 对 $C \le 128$ 成立,NPS4 应对应 $C > 64$。但 footnote 写的是 "IF (64 > Cores/Socket) then set NPS4"——不等号方向反了,如实执行会让高核数部件落不到任何规则上,而低核数部件同时命中三条。§3.3.2 的散文版本是对的("more than 64 cores because Windows limits the size of a CPU group to a maximum of 64 logical cores"),两处矛盾。

    六项检查里 2 项失败、2 项存疑、2 项通过。这个比例本身就是对这份文档质量的量化评价:可形式化的部分基本都错了,正确的部分是那些无法形式化的定性建议。


    5. 实验与数据 #

    源文档零基准、零图表、零性能曲线。因此本节把 Chapter 4 的 25 张表当作唯一的数据集,做一次偏离普查——这是从这份文档能榨出的最接近"实验结果"的东西。

    5.1 承重偏离普查 #

    方法:遍历 25 张表全部单元格,剔除"值等于默认值"的名义偏离(例如 POWER PROFILE SELECTION = High Performance 其实就是默认的 mode 0;MEMORY TARGET SPEED = Auto 就是默认;SMT CONTROL = Enabled 与默认 Auto 同义),只保留真正改变行为的格子。

    旋钮偏离的 workload方向依据(Chapter 3)
    SMT CONTROLNIC THROUGHPUT, NIC LATENCY, HPC, EDADisabled§3.1.1 "neutral to negative performance impacts on some workloads, especially HPC";另加 license 按线程计数的商业理由
    L3 CACHE AS NUMA DOMAINPOWER EFFICIENCY, MEMORY THROUGHPUT, BIG DATA ANALYTICS, LINUX KVMEnabled§3.3.1 "Some hypervisors and operating systems do not perform L3-aware scheduling"
    NUMA NODES PER SOCKETJAVA THROUGHPUT=4, JAVA LATENCY=2, POWER EFFICIENCY=4, HPC=4, EDA=2, RDBMS=NPS4(Windows)细化§3.3.2 局部延迟 vs 每核带宽的权衡;NPS4 "recommended for HPC and other highly-parallel workloads"
    TDP/PPT CONTROL + 值CPI, JAVA TP, JAVA LAT, POWER EFF, MEMORY TP, RDBMS, AI/ML, HPC, EDAManual + OPN Max§3.2.3 Power determinism 下取满 headroom
    DETERMINISM CONTROL/ENABLESTORAGE IO=Power, NIC TP=Perf, NIC LAT=Perf, KVM=Perf, RDBMS=Power, AI/ML=Power, TELCO×2=Perf, EDA=PowerManual + 显式§3.2.2 一致性 vs 单机峰值
    APBDISPOWER EFFICIENCY=1, STORAGE IO=1, RDBMS=1, EDA=1;NIC TP/LAT="Disabled"固定 fabric P-state§3.4.3 "significantly reduces latency jitters"
    DF C-STATESEDA(仅此一个)Disabled§3.4.4 低延迟/突发 I/O 场景"will increase both performance and power consumption"
    POWER PROFILE SELECTIONPOWER EFFICIENCY=Efficiency(1), RDBMS=Maximum IO(2)非 0 模式§3.2.1 只有标题,无正文
    xGMI 手动控制EDA(Manual + Manual + Force)消除 DLWM 抖动§3.4.2
    I/O 侧TELCO CORE: ARI+10-bit Enabled;HPC: IOMMU Enabled + iommu=pt;EDA: 条件性 IOMMUEnabled§3.5.2 / §3.5.3 / §3.5.4

    读法:承重偏离约 30 格,落在 10 个旋钮上;其余 34 个字段在全部 19 个 workload 列里恒为 Default——包括全部 7 个预取器(唯一例外是 RDBMS 的脚注"*Disable when workload is memory constrained")。换言之,指南实际主张的是:预取器、内存频率、内存交织、APIC 模式、TSME 这些别碰,只在 SMT / NUMA 划分 / 功耗上限 / fabric P-state 四个维度上按 workload 分化。

    5.2 按 workload 族看信息密度 #

    Workload 族列数承重偏离数(约)特征
    §4.1 General-purpose4~9只有 POWER EFFICIENCY 列真正独特(Efficiency mode + L3-as-NUMA + APBDIS=1)
    §4.2 Memory & I/O4~9NIC 两列关 SMT 是全表最强信号
    §4.3 Virtualization3~3信息量最低:三列几乎全 Default,KVM 仅多 Determinism=Performance + L3-as-NUMA
    §4.4 DB / Analytics / AI4~8AI/ML 列与 RDBMS 列除 Power Profile 外完全同构
    §4.5 HPC / Telco / EDA4~11信息量最高:EDA 是唯一动 xGMI 与 DF C-States 的配方

    这张表暴露了一个对读者最关键的事实:如果你的工作负载是 AI/ML 或虚拟化,这份指南几乎没有为你提供任何超出默认值的指导。AI/ML 列拿到的全部内容是 Determinism=Power + TDP/PPT=OPN Max(即"把功耗放开"),加上一格填错的 ACPI SRAT L3 CACHE AS NUMA DOMAIN = NPS1(该字段只接受 Enabled/Disabled)。

    5.3 Chapter 5 的 numactl 样本 —— 唯一的"实测数据" #

    全文档唯一带真实数字的输出是 Chapter 5 的 numactl -H 采样,但它自身不自洽:

    
    node 0 size: 32225 MB   node 1 size: 64448 MB
    node 2 size: 96407 MB   node 3 size: 32164 MB
    node distances:  0:10 12 12 12 / 1:12 10 12 12 / 2:12 12 10 12 / 3:12 12 12 10
    

    它被介绍为"single socket AMD EPYC OPN with 12CCDs per Socket where NPS=4 and L3 as NUMA=Disabled"。距离矩阵(本地 10、远端一律 12、无跨 socket 项)与单路 NPS4 一致 ✅;但四个节点容量比约 1:2:3:1,与 NPS4 的对称象限交织直接矛盾 ❌。合理推断是这台机器的 DIMM 插法不对称(这正是 §1.1 要求先读 Memory Population Recommendations Guidelines 的原因),但文档把它当作正常样例展示,没有一句提示。同页的 CC6 例子又把 0-191 这个索引区间同时用于"单路 96 核开 SMT"和"双路 96 核 192 个 core"两种不同机器。


    6. 论证链 #

    #步骤文档依据得到什么
    1确立前提:默认值对通用负载已是最优,调优的对象是"特定负载"Ch1:"Default BIOS options generally produce the best overall performance for generic workloads, but these defaults may not be optimal for a specific workload."把全文定位为偏离手册而非配置手册;也预先解释了为何 Chapter 4 绝大多数格子是 Default
    2枚举参数空间:44 个字段分 5 个子系统,给出类型、默认值、可选值Ch2 Tables 2-1…2-5读者获得完整旋钮清单;同时声明默认值仅为"recommendations for OEMs",把最终权威让给 OEM
    3为每个旋钮给出因果机制(而非数值收益)Ch3 §3.1.1–§3.5.7建立"改这个 → 发生什么"的定性映射,例如降 xGMI 速率 → 省 uncore 功耗 → core 频率上升
    4揭示旋钮间耦合,形成约束网络Ch3 各处 + 依赖关系(TDP↔TDP Control、APBDIS↔DfPstate、NPS↔L3-as-NUMA、x2APIC↔IOMMU)把 44 维独立选择压缩为若干条件分支;这是全文档最有价值的部分
    5把机制映射到 19 个具名 workload 的具体取值Ch4 25 张表从定性机制落到可执行配方;preamble 同时承认"not one size fits all",为偏差预留免责
    6承认 BIOS 不是最终仲裁者,给出 OS 层排查路径§2.6 四层覆盖模型 + Ch5 四步法(拓扑 → daemon → 策略 → BIOS 无此项的字段)闭环:即使 Chapter 4 照抄,仍需在 OS 层验证 numactl 输出、关 numad/numa_balancing、必要时用 cpupower 处理 BIOS 未暴露的 CC6
    7声明代际删除项,标记不可迁移的旧配置§3.6:EfficiencyModeEn / Root Complex LCLK Frequency / Preferred I/O / Preferred I/O Bus告知从 3rd Gen 迁移的用户哪些脚本会失效

    论证链的断点在第 5 步:从"定性机制"到"具体取值"缺少任何测量作为桥。文档承认使用了基准("Some cases list the benchmarks used to better describe the workloads"),但基准名与结果都没有出现在正文里。


    7. 实现 cross-reference #

    [实现未公开] — BIOS 侧的实现是 AGESA / OEM 固件,闭源;OPN Max、f_alg 的 binning 表不公开。文档本身也把最终权威推给 OEM:"End users must confirm their OEM BIOS setting availability and options."

    可对照的唯一可执行部分是 OS 侧,全部来自 Chapter 5:

    • numactl -H — 验证 NPS × L3-as-NUMA 的实际生效结果,检查节点数、CPU id 连续性、node distances 矩阵。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1120-1144

    • echo 0 > /proc/sys/kernel/numa_balancing — 关闭 Linux automatic NUMA balancing,防止它推翻 physcpubind / membind。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1173

    • cpupower idle-set -d 2 — 关闭 Core C6(OS 侧名为 C2),处理 BIOS 未暴露该字段的平台。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1188

    • cpupower -c 0-191 idle-set -d 2 — 按 CPU 索引选择性关闭。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1195

    • iommu=pt(内核命令行)— IOMMU 在 BIOS 保持 Enabled 而在 OS 侧走 passthrough;HPC 配方强制要求。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1084

    • numad — 需要检查是否启用的 daemon;启用时会迁移进程/内存,覆盖启动时的绑定。
    • knowledge/L1/spec/amd-epyc-9005-bios-tuning-guide.md:1156

    7.1 核心技术壁垒(详述) #

    壁垒是 per-part 功耗–频率曲线的不可见性。文档把功耗调优表述为三个用户可设参数(TDP、PPT、Determinism),但真正决定收益的是三个不可见量:该颗硅的 bin 质量、maximum algorithm-allowable frequency、以及 uncore 各子系统在给定负载下的实际功耗占比。§3.2.3 用一句话承认了这一点——"This headroom varies from part to part"——然后不再展开。

    后果是可操作的:Determinism=Performance 与 Determinism=Power 之间的差值,在数据中心里等于"最差 bin 与本机 bin 的差",这个值只能靠在自己的机群上跑分布测量得到,无法从任何 AMD 文档推算。这也解释了为什么 Chapter 4 里 Determinism 的推荐是分裂的:需要跨机一致性的(NIC、Telco、KVM)选 Performance,需要单机峰值的(RDBMS、AI/ML、EDA、Storage IO)选 Power——指南只能给出决策规则,给不出收益数值。任何试图复现这份指南的第三方,必须自己重建这条曲线;这是唯一一处"读文档不够,必须有硬件"的地方。

    7.2 关键实现细节(易漏) #

    1. TDP 与 PPT 必须成对翻 Manual。两者是独立字段、独立 Control 开关、相同的 100–500 W 区间,且文档从未声明 $P_{\text{PPL}} \ge P_{\text{TDP}}$。只把 TDP 设成 OPN Max 而漏掉 PPT,package power limit 仍停在 OPN 默认值,boost 被封顶——Chapter 4 所有相关配方都是四格同时改(TDP CONTROL=Manual / TDP=OPN Max / PPT CONTROL=Manual / PPT=OPN Max),漏一格就整体失效。注意 Table 4-22 把这两行改名成 PPL CONTROL / PPL,与其他四张表不同名,照表核对时极易漏掉。
      1. IOMMU 的正确关法是在 OS 层,不是在 BIOS 层。§3.5.4 明确:"If you believe the IOMMU is limiting performance, then leave it enabled in BIOS and disable it via OS options (e.g., iommu=pt)"。原因是同节的硬约束:"Enabling IOMMU is required when using x2APIC."——而 LOCAL APIC MODE 默认就是 Auto (0x02 x2APIC)。在 BIOS 里关 IOMMU 会与默认的 x2APIC 模式冲突。
        1. x2AVIC 默认开启但需要非主线内核。Table 2-5/3-21 原文:"This feature currently requires a custom AMD Linux kernel.",而 v2.1 修订把 AVIC 与 x2AVIC 从 Disabled 改成了 Enabled。同时 §3.5.7 自承"Enabling Advanced Virtual Interrupt Controller (AVIC) may not improve system performance compared to systems with AVIC disabled"。即:一个默认开启、可能无收益、且依赖大多数部署没有的内核的特性。

        2. 8. 代际变化 —— 增 / 删 / 改 / 增强 #

          变化类型子系统细节影响
          删PowerEfficiencyModeEn3rd Gen 的一键能效模式消失;对应能力被 Power Profile Selection mode 1(Efficiency Mode)吸收,但文档从未把两者联系起来
          删I/ORoot Complex LCLK Frequency无法再手动抬 root complex 时钟;归因于"architecture improvements",无替代
          删I/OPreferred I/O / Preferred I/O Bus失去按 bus 指定 I/O 优先级的能力。最接近的替代是 Power Profile Selection mode 2(Maximum IO Performance),但粒度从 per-bus 退化为 per-socket,且文档不承认这是替代
          增PowerPower Profile Selection 六档(0 High Perf / 1 Efficiency / 2 Max IO / 3 Balanced Memory / 4 Balanced Core / 5 Balanced Core+Memory)把多个旋钮打包成命名 profile,是本代最重要的新抽象;但 §3.2.1 只有标题没有正文,六档各自改了哪些底层参数完全未公开
          增Infinity FabricDfPstate (0–4) + DfPstate Range Support(MaxDfPstate ≤ MinDfPstate)提供固定 fabric P-state 的能力,是 APBDIS=1 配方的必要搭档
          增NUMA/MemoryPeriodic Directory Rinse (PDR) Tuning(Auto/Blended vs Periodic)暴露了目录探测策略;但孤立字段——只在 Table 2-3 出现一次,无 Chapter 3 详解,25 张 workload 表全部缺席,术语"Floss"从未定义
          增Virtualizationx2AVIC、SEV-SNP Supportx2AVIC 把 vAPIC 硬件虚拟化扩到 512 vCPU(AVIC 限 255);SEV-SNP 增加内存完整性保护,抵御 replay / re-mapping
          增CoreL1 Burst Prefetch Mode第 7 个预取器旋钮;Chapter 3 无任何描述性文字,只列 Enable/Disable
          改SecuritySEV Control 默认 Disable → Enable(v2.0)默认开启机密计算基础能力;注意副作用:关掉再开需要 power cycle,不是 reboot
          改VirtualizationAVIC / x2AVIC 默认 Disabled → Enabled(v2.1)与 §3.5.7 "may not improve system performance" 的自承相冲突
          改PowerDeterminism Control 在部分 profile 中从 Enable → Manual(v2.2)v2.2 的唯一改动,说明前几版的 Chapter 4 给了一个该字段不接受的值
          增强MemoryMemory Target Speed 区间 3200–6400 MT/s上限抬到 DDR5-6400
          增强Infinity FabricxGMI Link Max Speed 20/25/32 Gbps跨 socket 带宽上限提升;32 Gbps 即 Auto
          增强I/OPCIe Gen 5 + 10-bit extended tag,non-posted request 数 3x达到 Gen5 满带宽的前提;代价是不支持 10-bit tag 的适配器可能开不了机
          增强PowerTDP / PPT 可配置区间 100–500 W500 W 上限反映本代封装功耗天花板
          增强NUMANPS0/1/2/4 四档,NPS4 每象限 3 通道单路 12 通道的四象限划分
          注:增 / 增强 两类中,除 §3.6 明确列出的四个删除项与修订历史记录的三次默认值变更外,其余"相对 3rd Gen 的新增"是由本文档字段集与 §3.6 反推所得,文档本身未提供代际对照表。

          9. 完整字段清单(spec sheet) #

          44 个字段,按子系统分组。Auto 一律表示由平台/OPN 决定。

          9.1 Processor Core(11) #

          字段类型默认可选值关键语义
          SMT ControlenumAutoEnabled/Auto, DisabledAuto=2 线程/核;HPC/EDA/NIC 建议 Disabled;部分 license 按线程计数
          L1 Stream HW PrefetcherenumAutoEnable/Disable按 L1 访问历史升/降序取后续连续行
          L1 Stride PrefetcherenumAutoEnable/Disable按单条指令的定距访问历史取行
          L1 Region PrefetcherenumAutoEnable/Disable按局部区域内的伴随访问模式取行
          L1 Burst Prefetch ModeenumAutoEnable/Disable无描述
          L2 Stream HW PrefetcherenumAutoEnable/DisableL2 层的连续行预取
          L2 Up/Down PrefetcherenumAutoEnable/Disable按 L2 历史决定取前一行还是后一行
          Core Performance BoostenumAutoEnable/Auto, Disable依活跃核数、功耗、热余量机会性超基频
          BoostFmaxEnenumAutoAuto, ManualManual 时启用 BoostFmax
          BoostFmaxint MHzAuto十进制 MHz只是 clamp,不设定频率,且不能突破算法允许上限
          Global C-State ControlenumAutoEnabled/Auto, DisabledDisabled 时核心仅剩 C0/C1,并连带关闭 IO-based 与 DF C-states;强烈不建议关

          9.2 Power Management(8) #

          字段类型默认可选值关键语义
          Power Profile Selectionenum 0–5Auto(0)0 High Perf / 1 Efficiency / 2 Max IO / 3 Balanced Mem / 4 Balanced Core / 5 Balanced Core+Mem详解章节为空
          Determinism ControlenumAutoAuto, ManualManual 才能显式选 Power/Performance
          Determinism EnableenumAuto0 Power / 1 PerformanceAuto 的实际取向由 OEM 平台与 OPN 决定;文档三处对"默认是哪个"自相矛盾
          TDP ControlenumAutoAuto, ManualManual 才暴露 TDP 字段
          TDPint WOPN Max100–500需 TDP Control=Manual
          PPT ControlenumAutoAuto, ManualManual 才暴露 PPT 字段
          PPT (PPL)int WOPN Max100–500与 TDP 同区间,无 PPT≥TDP 约束声明
          CPPCenumAutoEnabled/Auto, DisabledACPI 5.0 特性,允许 OS 控制 turbo 施加时机与幅度;Windows Server 2016 起支持。Chapter 3 全篇拼作 "CPCC"

          9.3 NUMA & Memory(5) #

          字段类型默认可选值关键语义
          ACPI SRAT L3 Cache as NUMA DomainenumDisabledDisabled/Auto, EnabledEnabled 时每个 LLC 报为一个 NUMA 域,覆盖 NPS 的节点数但不改交织
          NUMA Nodes per Socket (NPS)enum1NPS0/1/2/4永远决定交织粒度。NPS1=全通道单域;NPS2=半 socket 6 通道;NPS4=象限 3 通道。NPS0 仅双路,不推荐
          Memory Target Speedenum/int MT/sAuto3200–6400 MT/s降频省内存控制器功耗,把预算让给 SoC 其余部分
          Memory InterleavingenumAutoAuto/Enable, Disable只影响 NUMA 域内部交织;NPS 仍被遵守;强烈不建议关
          Periodic Directory Rinse (PDR) TuningenumAutoAuto/Blended, PeriodicBlended=需求驱动,Periodic=速率驱动。无详解、无 workload 指导

          9.4 Infinity Fabric(10) #

          字段类型默认可选值关键语义
          xGMI Link Max Speedenum GbpsAuto20 / 25 / 32(=Auto)降速→跨 socket 带宽↓、延迟↑、uncore 功耗↓
          xGMI Link Width ControlenumAutoAuto, ManualManual 才显示 Max/Force Link Width 控件
          xGMI Force Link Width ControlenumAutoUnforce, ForceForce 消除 DLWM 切换抖动
          xGMI Force Link Widthenum idxAutoCh2: 0=x4,1=x8,2=x16 · Ch3: 0=x4,1=x8(无 2)索引语义两章冲突
          xGMI Max Link Width ControlenumAutoAuto, ManualManual 才显示 Max Link Width
          xGMI Max Link Widthenum idxAutoCh2: 0=x4,1=x8,2=x16 · Ch3: 0=max x8/min x8, 1=max x16/min x8索引语义两章冲突且含义不同类
          APBDISenum 0/1Auto0=动态 fabric P-state, 1=固定1 + DfPstate=0 → fabric 与内存控制器锁全功率,显著降抖动
          DfPstateint idxAuto(0)0–4,0 最高性能仅存在于 Chapter 3;被 APBDIS 覆盖
          DfPstate Range SupportenumAutoAuto, Enable, DisableEnable 时须满足 MaxDfPstate ≤ MinDfPstate,否则"will not work"
          DF C-StatesenumAutoEnabled/Auto, Disabled关闭可消除 fabric 唤醒抖动,代价是功耗上升

          9.5 PCIe / I/O / Security / Virtualization(10) #

          字段类型默认可选值关键语义
          Local APIC ModeenumAuto (0x02 x2APIC)xAPIC(0x01) / x2APIC(0x02) / Auto / Compatibilityx2APIC 中断投递更快,>255 核必需;即使 <256 逻辑核也推荐
          PCIe ARI Support (SR-IOV)enumAutoEnabled/Auto, DisabledSR-IOV 前提;function number 从 3 bit 扩到 8 bit,device number 隐含为 0
          PCIe Ten Bit Tag SupportenumAutoEnabled/Auto, DisabledGen5 满带宽前提,non-posted request 3x;不兼容适配器可能阻碍启动
          IOMMUenumAutoEnabled/Auto, Disabled每设备独立 IRQ + DMA 保护;x2APIC 要求 IOMMU 开启;性能问题走 OS 侧 iommu=pt
          AVICenumEnabledEnabled, DisabledvAPIC backing page 映射进内存,guest 直接发起 IPI 并按 doorbell 通知目标核
          x2AVICenumEnabledEnabled, DisabledAVIC 扩展至 512 vCPU;需要 custom AMD Linux kernel
          TSMEenumAuto(=Disabled)Auto/Disabled, Enabled全 DIMM 硬件加密、对 OS 透明、略增内存延迟
          SEV ControlenumEnabledEnabled, Disabled多租户 VM 相互及对 hypervisor 的隔离;关后再开需 power cycle
          SEV-ESenumDisabledEnabled, Disabled把保护扩展到 VM 停止运行时的 CPU 寄存器内容
          SEV-SNP SupportenumDisabledEnabled, Disabled增加内存完整性保护,防 data replay 与 memory re-mapping

          10. 硬件 → 软件的正向影响 #

          这份文档暴露的旋钮集合,对上层软件提出了几条可直接落地的要求:

          新可写的部署形态

          • L3-as-NUMA 作为调度域:把每个 LLC 报成 NUMA 节点后,不做 L3-aware 调度的 hypervisor 与运行时(文档点名"Some hypervisors and operating systems do not perform L3-aware scheduling")可以借 NUMA API 间接获得 LLC 亲和性。这让容器编排器(k8s CPU manager、KVM vCPU pinning)能在不改调度器的前提下拿到 cache 局部性——Chapter 4 正是给 LINUX KVM 与 MEMORY THROUGHPUT 两个 profile 开了这一项。
          • 抖动敏感型服务的确定性配方:APBDIS=1 + DfPstate=0 + DF C-States=Disabled + xGMI Force Link Width 四件套构成一个"关掉所有电源状态机"的模式。这使得软实时类工作负载(Telco 用户面、低延迟交易、EDA 交互式流程)可以把尾延迟从"取决于 fabric 唤醒时机"变成可预算量。代价是功耗与 core boost 一起下降。

          必须重写/适配的软件

          • NUMA 拓扑发现不能假设对称。Chapter 5 自己的样例就是 4 个不等容量节点(32/64/96/32 GB)。任何按"节点数 → 每节点容量 = 总容量/节点数"推算的分配器(包括不少 AI 框架的 host 内存池)在 NPS4 + 不对称 DIMM 插法下会算错。正确做法是逐节点读 numactl -H 的 size 字段。
          • 绑核脚本必须与 numad / numa_balancing 互斥。文档明确 numad 会"interfere with and override the initial launch commands of a deployment like physcpubind, membind"。任何依赖静态绑定的服务(DPDK、SPDK、推理 server 的 NUMA-local KV cache)都需要在启动脚本里显式 echo 0 > /proc/sys/kernel/numa_balancing 并确认 numad 未启用,否则 BIOS 侧的 NPS 规划会在运行时被悄悄推翻。
          • PCIe 驱动需处理 10-bit tag 的协商失败。10-bit tag 默认开启且是 Gen5 满带宽的前提,但"Not all PCIe Gen 5 devices support 10-bit extended tags, which can cause issues during boot"。设备驱动与固件升级流程需要提供"降级到 5-bit tag 仍能启动"的路径。
          • Windows 侧的 CPU group 逻辑。$T \cdot C / N \le 64$ 是硬约束,超过就必须提高 NPS。任何跨平台的 CPU 拓扑抽象层(线程池、affinity 库)在 Windows 上都要按 kgroup 而非全局 CPU id 建模,且 NPS 会随核数变化——不能把 NUMA 布局当编译期常量。

          给可观测性的要求

          • 由于 Power Profile Selection 六档的底层参数未公开,且 Determinism=Auto 的实际取向由 OEM 与 OPN 决定,机群管理软件不能从 BIOS 设置推断实际频率行为,必须直接采样运行时频率与功耗。跨机性能方差在 Determinism=Power 下是设计预期而非故障——告警阈值需要按 profile 区分,否则会把正常的 bin 差异报成异常。