3. 计算节点功耗构成与测量方法

要对一台 AMD EPYC 计算节点做功耗与散热优化,第一步不是调风扇曲线,也不是改 BIOS 电源策略,而是把“整机功耗”拆开,弄清楚每一瓦电究竟花在哪里。只有建立了清晰的功耗构成模型,后续的优化才有可量化的靶子:是 CPU 的 Package Power 偏高,还是内存条数量过多带来的静态功耗,抑或是 VRM 转换损耗和风扇功耗吃掉了本应留给计算的功率预算。

一、节点级功耗的构成分解

从机柜 PDU 到芯片内部,功耗可以按“供电链路”和“部件归属”两个维度同时理解。按供电链路看,市电经 PSU 整流后输出 12V/54V 母线,再经主板 VRM(电压调节模块)降压为 CPU 的 VDDCR_CPU、VDDCR_SOC、内存的 VDDIO/VDD,以及各类外设电压。按部件归属看,一台双路 EPYC 节点的整机功耗大致由以下几部分构成:

  • CPU 功耗:双路 EPYC 的 Package Power 通常是整机最大项,满载时可占整机功耗的 50%~70%。它又细分为核心计算功耗(Core Power)、Infinity Fabric 与 IOD 功耗、内存控制器功耗等。
  • 内存功耗:每条 DDR5 RDIMM 的功耗随容量、速率、访问频率变化,单条典型在 5~15W 区间。32 条内存插满时,内存总功耗可达 200W 以上,是不可忽视的静态与动态负载。
  • 硬盘功耗:NVMe SSD 单盘工作功耗约 8~25W,SATA/SAS 盘约 5~10W。多盘位节点中,硬盘功耗与 IO 负载强相关。
  • 网卡功耗:25G/100G/200G 网卡单卡功耗从 10W 到 30W 不等,高速率网卡在满线速时功耗显著上升。
  • 风扇功耗:高密度节点常配 6~10 个 40mm 或 60mm 高转速风扇,单风扇 10~30W,整组风扇功耗可达 100~200W,且随转速呈近似三次方增长。
  • VRM 损耗:VRM 将 12V 转换为约 0.8~1.1V 的 CPU 核心电压,转换效率通常在 85%~92%。这意味着 CPU 实际消耗 400W 时,VRM 自身可能额外发热 35~70W,这部分损耗最终也由整机功耗和散热系统承担。

把这些部分相加,就得到节点级功耗的近似模型:整机功耗 ≈ CPU Package + 内存 + 硬盘 + 网卡 + 风扇 + VRM 损耗 + 主板其他。需要注意的是,PSU 自身的转换效率(80 PLUS 钛金约 96%)也会在机柜级计量中体现,但在节点内部测量时通常以 PSU 输出侧为准。

AMD EPYC 双路节点功耗构成与测量点 机柜 PDU AC 220V 输入 PSU 电源 效率 ≈ 96% 12V 母线 节点内配电 VRM 降压 效率 85%~92% VRM 损耗 发热 35~70W CPU Package 双路 50%~70% 内存 DDR5 单条 5~15W 硬盘 NVMe 单盘 8~25W 网卡 100G/200G 单卡 10~30W 风扇组 整组 100~200W 测量工具与采集点 功率计:PDU/PSU 输入侧,整机 AC 功耗 IPMI:BMC 读取 PSU 输出、风扇转速 RAPL:CPU Package/DRAM 能耗计数器 APM:AMD 平台管理,SoC/IO 功耗细分 整机功耗 ≈ CPU + 内存 + 硬盘 + 网卡 + 风扇 + VRM 损耗 + 其他 测量原则:分层采集、交叉校验、负载对齐

二、四类测量工具的分工与适用场景

功耗测量不是“拿一个工具读一个数”,而是分层采集、交叉校验。不同工具覆盖不同的物理位置和精度范围,理解它们的边界才能避免误读。

功率计是最外层、最可信的整机功耗来源。把机柜 PDU 的每一路或节点 PSU 输入接入带计量功能的 PDU 或外置功率计,可以直接读到 AC 侧有功功率。它的优点是覆盖全部部件、不受 BMC 采样误差影响;缺点是粒度粗,无法区分 CPU 与内存,且包含 PSU 转换损耗。做整机 PUE 和机柜功率预算时,功率计是基准。

IPMI 通过 BMC 提供节点内部的传感器读数,包括 PSU 输入/输出功率、各风扇转速、进风口与出风口温度。不同厂商的传感器命名和精度差异较大,例如某些平台只提供 PSU 输入功率,某些平台提供 12V 母线电流。IPMI 的价值在于可以远程、批量、长时间采集,适合做趋势监控和风扇功耗关联分析。使用 ipmitool sensor list 或 ipmitool dcmi power reading 可以快速获取当前功率。

RAPL(Running Average Power Limit)是 CPU 内部提供的能耗计数器,通过 MSR 或 sysfs 暴露。在 Linux 下,/sys/class/powercap/intel-rapl/ 或 AMD 平台的对应接口可以读取 Package 和 DRAM 域的累计能量(微焦耳),两次采样求差再除以时间即得平均功率。RAPL 的优点是粒度细、无需外接硬件、可脚本化;缺点是它统计的是 CPU 内部估算值,不包含 VRM 损耗,且不同微架构的域划分和精度不同。对 EPYC 平台,RAPL 的 Package 域通常覆盖 CCD 与 IOD,DRAM 域覆盖内存控制器侧。

APM(AMD Platform Management)是 AMD 平台提供的功耗管理接口,配合 amd_energy 驱动或 ryzen_smu 类工具,可以读取更细的 SoC、Core、IO 域能耗。在 EPYC 服务器上,APM 与 RAPL 往往互为补充:RAPL 给出 Package 总量,APM 帮助判断是计算核心还是 IO Die 在消耗功率。这对散热优化尤其关键——如果 IO Die 功耗偏高而核心功耗正常,问题可能出在内存访问模式或 Infinity Fabric 频率,而不是 CPU 计算负载。

三、数据采集方法与实操要点

实际采集时,建议按“同一时间窗口、同一负载状态、多工具并行”的原则组织。一个可复用的采集流程如下:

  1. 固定负载:用 stress-ng --cpu 128 --vm 8 --vm-bytes 4G 或类似工具制造稳定负载,避免空载与满载混采。
  2. 预热 5~10 分钟,让风扇转速、VRM 温度和 CPU 频率进入稳态,否则前几分钟的数据会因 boost 和风扇爬升而偏高或偏低。
  3. 并行采集:功率计每 1 秒记录一次 AC 功率;IPMI 每 5 秒读取 PSU 输出与风扇转速;RAPL 每 1 秒读取 Package 与 DRAM 能量计数器。
  4. 对齐时间戳,计算各层功率的平均值与波动范围。若功率计读数明显大于 IPMI PSU 输出除以 PSU 效率的推算值,需要检查 PSU 效率曲线或传感器校准。

一个典型的教学示例(以下为合理假设的示例数据,非实测结果):某双路 EPYC 节点在 128 线程满载下,功率计读数为 1050W AC;IPMI 显示 PSU 输出 980W;RAPL Package 合计 620W,DRAM 域合计 140W;风扇组 IPMI 读数合计 150W;剩余约 70W 可归入硬盘、网卡、主板与 VRM 损耗。此时若想降低整机功耗,优先看 Package 与 DRAM 的比值:若 DRAM 占比超过 20%,说明内存子系统功耗偏高,可考虑降低内存速率、减少插槽数量或优化 NUMA 访问局部性。

RAPL 和 APM 的读数会随采样间隔和负载波动而变化。做对比实验时,务必保持相同的采样窗口、相同的负载脚本和相同的环境温度,否则数据不可比。建议每次采集至少持续 10 分钟,取稳态段的均值。
不要用单次瞬时读数判断功耗水平。CPU 的 boost 行为、风扇的 PID 调节和 PSU 的负载瞬态都会造成短时波动。若发现 RAPL Package 与功率计推算值差异超过 15%,应检查是否遗漏了 VRM 损耗、PSU 效率或 BMC 采样偏差。

把功耗构成和测量工具对应起来,就形成了一张“功耗地图”:功率计回答“整机花了多少”,IPMI 回答“电源和风扇花了多少”,RAPL 回答“CPU 和内存花了多少”,APM 回答“CPU 内部谁花得多”。四者交叉,才能定位真正的功耗热点,为后续的散热优化提供可靠依据。