香港服务器电源与功耗估算:高密 NVMe、顶配 CPU 的 N+1/N+N 冗余电源选配、实测方法与现场排故全流程
技术教程 2025-09-30 09:13 210

清晨 3:40,香港观塘机房热通道 38℃,我夹着记录板蹲在 18 号机柜前,监听 PDU 的断路器是不是还会“啵”一下跳闸。2U 机箱里 24 块 U.2 NVMe 正在跑 fio 压力,风扇转速拉满像一阵阵白噪。上一轮负载拉升时,A 路 PDU 的 10A 支路险些触顶。项目时间卡得死,业务上线窗口只有 6 小时,我必须在这一轮把功耗边界、冗余策略和 PSU(电源模块)的选型彻底敲定,不留悬念。

下面这篇,就是那晚的完整方法论与复盘:怎么估、电源怎么选、如何验证、遇到什么坑、我是怎么在热通道里把它们一个个填平的。

1)项目画像与约束

  • 应用负载:高并发 KV 存储 + 批量计算,读写尖峰明显
  • 机型:2U 24x NVMe(前面板 24 盘位,背部 2×PSU)
  • CPU:双路顶配(同级别旗舰,单颗 TDP 320–360W,短时 PL2 可到 1.3–1.5×TDP)
  • 内存:DDR5 RDIMM 16 条(后续扩到 24 条)
  • 网卡:双口 100G(支持 RoCEv2)
  • PDU:A/B 双路,230V,A 路 10A 分支,B 路 16A 分支
  • 机房:香港常见 230V/50Hz,上下送风,热通道约 35–40℃
  • 系统:CentOS 7(便于和现网一致,工具包成熟)

2)先算账:自顶向下的功耗预算(DC 侧)

要点按“峰值+冗余”做预算,按“典型+95 分位”做验收
名义 TDP 不是峰值,PL2/Boost、NVMe 写入尖峰、风扇拉满、VRM/背板损耗都要算进去。

2.1 组件级功耗估算(单台)

组件 规格/数量 典型功耗 (W) 峰值/预算 (W) 备注
CPU 2×旗舰(TDP 320–360) 2×300 2×450 = 900 PL2/Boost 1.3–1.5×TDP,按 450W/颗保守
内存 16×DDR5 RDIMM 16×5 ~120 满条 24 根时按 24×7=168W
NVMe 24×U.2 Gen4 24×12 ~24×22=528 顺序写+温度高时单盘 20–25W
网卡 2×100G 25 35–40 线速、PRBS 训练、RoCE 压力
主板/芯片组 50 80 含 BMC、背板控制
风扇/背板 高速 80×38 风扇组 60 100–120 热通道温度上来会拉满
PCIe 交换/转接 1–2 组 15 30 NVMe 背板/开关
其他 LED、USB、杂项 10 20 预留项
合计(DC) ≈ 1,100 ≈ 1,765 W 以 16 DIMM 计;24 DIMM 则 ≈ 1,813 W

结论(DC):这台机器峰值直流功耗约 1.75–1.85kW

2.2 换算到 AC 侧 + 冗余余量

PSU 效率(80Plus 白金在 230V):20%/50%/100% 负载效率约 92%/94%/91%钛金可到 94%/96%/94%

AC 侧输入功率 = DC / 效率。

以白金在满载附近按 0.94 估:1,765 / 0.94 ≈ 1,878W

瞬态/温升冗余:再乘 1.15(写入尖峰、风扇升速、NVMe 温度敏感):

1,878 × 1.15 ≈ 2,160W

选择建议:N+1(1+1)冗余时,单颗 PSU 必须能独撑最大 AC 负载,因此建议 2,200W(钛金/白金)×2,C19/C20 供电接口,避免 C14 的 10A 天花板。

3)冗余策略:N+1 还是 N+N?

  • 1+1(N+1):经济主流。要求任意一颗 PSU 能承载全负载;两路输入可接 A/B 两条 PDU。
  • 1+1(负载均衡):两颗 PSU 固件/料号一致且启用“均流”,否则会出现一侧抢负载单侧 PDU 先触顶
  • N+N:双套独立供电链路(双电源框架、双整流),成本高,常用于极高 SLA 场景。
  • 功率密度高的 NVMe 机型:建议 1+1 钛金 2.2kW,或 1+1 钛金 2.6kW(计划上 24 DIMM、200G 网卡、再加 2×GPU/FPGA 时)。

3.1 选型公式(给出一个“能落地”的口径)

记:

PDC,peakP_{DC,peak}:直流侧峰值

η\eta:PSU 效率(取 0.94 或 0.96)

α\alpha:瞬态冗余系数(1.15 建议)

PAC,oneP_{AC,one}:单 PSU 需要承载的 AC 负载(N+1 时要能全扛)

PAC,one=PDC,peakη×αP_{AC,one} = \frac{P_{DC,peak}}{\eta} \times \alpha

  • 用上面的表:
    PAC,one≈1765/0.94×1.15≈2160WP_{AC,one} \approx 1765 / 0.94 \times 1.15 \approx \mathbf{2160W}
  • 因此**选 2200W(C19/C20)**正好卡在安全侧;考虑 24 DIMM 与 200G NIC,上 2600W 更稳

4)配电侧:PDU、线缆与环境

  • 接口:>2kW 建议 C19/C20;C14 10A 在 230V 仅 ~2.3kW,几乎没冗余。
  • 分支容量:230V×10A=2.3kVA;考虑功率因数与瞬态,单分支最好只挂一台此类“高密 NVMe”机器。
  • 温度/降额:热通道 38–40℃ 时,PSU 内部温升+风扇策略会改变效率曲线,尽量让单 PSU 工作在 50–70% 负载带(效率高、噪声低、寿命长)。
  • 线缆:短、粗、压接到位;避免绕折堆叠在热通道里“晒”。
  • A/B 路均流校验:上电后观察 两颗 PSU 输出功率差是否<10%,偏差大要查固件/料号均流线

5)实测验证:用压力把“纸上功耗”拽到地上

我在 CentOS 7 上做了三组压测:CPU 峰值NVMe 峰值全链路混合;每组都记录 BMC 电源读数 + 节点内部传感

5.1 工具准备(CentOS 7)

# 基础工具 yum install -y epel-release yum install -y ipmitool nvme-cli fio kernel-tools numactl jq # turbostat 在 kernel-tools 里 turbostat --version

5.2 采样脚本:电源/温度/频率一把梭

#!/bin/bash # power_probe.sh - 每秒采一次功耗/温度/频率,输出 JSONL # 用法:./power_probe.sh > power.jsonl host=$(hostname) while true; do ts=$(date +%s) # BMC/PSU 侧功耗(尽量用 DCMI;不同厂商可能差异) pwr=$(ipmitool dcmi power reading 2>/dev/null | \ awk '/Instantaneous power reading/ {print $4}' ) if [ -z "$pwr" ]; then pwr=$(ipmitool sdr type "Power Supply" 2>/dev/null | \ awk '{sum+=$NF} END {print sum}') fi # CPU 频率/占用(简化版) cpu_freq=$(turbostat --quiet --Summary --interval 1 2>/dev/null | \ awk '/Turbostat/ {next} /Avg_MHz/ {print $2; exit}') cpu_usage=$(top -b -n1 | awk -F',' '/Cpu\(s\)/{gsub("%",""); print 100-$4}') # NVMe 温度(统计均值) nvme_t=$(for d in /dev/nvme*n1; do nvme smart-log $d 2>/dev/null | \ awk '/^temperature/ {print $3}'; done | awk '{sum+=$1; n+=1} END{if(n>0) print sum/n; else print 0}') echo "{\"ts\":$ts,\"host\":\"$host\",\"pwr_w\":$pwr,\"cpu_mhz\":$cpu_freq,\"cpu_usage\":$cpu_usage,\"nvme_temp_c\":$nvme_t}" sleep 1 done

5.3 压力模型

CPU 峰值(含内存子系统)

stress-ng --cpu 128 --vm 32 --vm-bytes 80% -t 300s # 或:numactl -C 0-127 sha1sum /dev/zero # 简化占核

NVMe 峰值(注意别在生产盘上玩)

fio --name=nvme24 \ --ioengine=libaio --iodepth=128 --rw=write --bs=128k \ --numjobs=24 --runtime=300 --time_based \ --filename=/dev/nvme{0..23}n1 --direct=1 --group_reporting

全链路混合(CPU+NVMe+网络)

另一台流量发生器 iperf3 -s;本机:

iperf3 -c <peer_ip> -P 8 -t 300

同时跑上面 fiostress-ng,观察 功耗峰值与稳态平台

验收口径:取 95 分位功率做“稳态峰值”,再对比 单 PSU 额定功率是否>平台功率的 1.05–1.1×

6)NVMe 的“看不见的手”:电源状态与温度的双变量

很多企业级 NVMe 支持 电源管理特性(Feature ID 0x02),可以限制到指定的 Power State

# 查看控制器支持的电源状态 nvme id-ctrl /dev/nvme0 | sed -n '75,120p' # 设置到较低功耗级别(示例值,视盘而定) nvme set-feature /dev/nvme0 -f 2 -v 3

温度与功耗正相关:盘温越高,控制器越容易拉高电流保持性能。

前置风墙密封、风扇曲线放宽、热通道有序抽风,是 NVMe 群体功耗“上不封顶”的关键制动器。

队列深度写入比例对功耗影响极大:评测时务必模拟真实业务的 QD/IO pattern,别只看顺序读。

7)CPU 的“屋顶”:PL1/PL2/cTDP 与 BIOS 电源帽

  • Intel:PL1(长期限制)、PL2(短期冲顶)与 tau(维持时间)共同定义了功耗曲线;可用 BIOS 电源 CapRAPL 做软帽。
  • AMD:cTDP、PPT、EDC/TDC 可设定平台功率上限;供应商 BIOS 一般提供 Platform Power Limit
  • 落地建议:在 2.2kW PSU 方案下,将全平台功率帽收在 1.9kW AC 左右(给瞬态和环境留边)。

8)两种典型配置与选型建议

8.1 “满血”24 盘双路旗舰

数值
DC 峰值 ~1.75–1.85kW
AC 峰值(含 15% 冗余) ~2.16–2.2kW
PSU 方案 2×2200W 钛金,C19/C20,1+1 冗余
PDU 策略 A/B 双路,各自分支独挂本机
BIOS/平台电帽 1.9kW AC 附近,均流校验 <10% 偏差

8.2 “性价比”12 盘单路高频

数值
DC 峰值 ~650–800W
AC 峰值(含冗余) ~800–950W
PSU 方案 2×1200W 白金,1+1 冗余
建议 负载平台控制在 50–60%,效率最佳

9)我遇到的三个坑(也是多数人会踩的)

PSU 混插(料号/固件不同)导致“单侧抢负载”

  • 表现:A 路 PSU 1.95kW,B 路 0.3kW,A 路 PDU 先叫。
  • 处理:统一 PSU FRU/PN 与固件;开启/校验均流;对调线缆验证 PDU 支路是否松动/接触不良。

C14 线组侥幸过载

  • 24 盘写入峰值拉起后,线头发热、PDU 端温感报警。
  • 处理:全部切 C19/C20;线径升级;缩短线缆并理线,避免热通道堆叠“晒线”。

NVMe 温控没做好导致“功耗爬坡效应”

  • 开始 1.6kW,10 分钟后 1.85kW,最后撞到电帽。
  • 处理:补风挡、封堵孔位、风扇策略从“静音偏好”切到“热优先”,盘温均值从 67℃ 降到 55℃,功耗平台回落 8–10%。

10)上线前的“功耗一页纸”Checklist

组件功耗表更新到最新配置(DIMM/网卡/背板)

PSU 额定 ≥ 单 PSU 需要承载的 AC 峰值(按公式)

PSU 料号/固件一致,均流开启,偏差 <10%

C19/C20 接口与线缆,分支容量核对无误

PDU 侧 A/B 路电流实测均衡,支路不共用

BIOS 平台电帽生效,RAPL/cTDP 验证

NVMe 电源状态/风道已调优,盘温 <60℃

三套压力(CPU/NVMe/混合)95 分位功率记录、留档

&