简介:腾讯、英特尔与中国电信联合发布的数据中心算力-电力灵活性协同研究白皮书,面向数据中心运维、能源管理及电力系统从业者,聚焦如何在不影响业务运行的前提下,通过智能管控计算负载实现电力负荷调节与节能降耗。资源为单个PDF文件,压缩包大小2.22MB,完整收录白皮书正文、执行概要、策略设计及测试结果。内容涵盖空载服务器功耗状态切换、服务器子部件资源消耗不均衡性利用、实时性不敏感任务平移伸缩、跨数据中心任务转移等多种灵活性策略,并给出硬盘、内存、CPU密集型任务及子任务独立/耦合型并行计算的实测数据。读者可据此了解数据中心参与需求侧秒级/分钟级响应、电力现货市场与辅助服务市场的可行性依据,以及构建算力-电力协同方案的系统化思路。已有250人学习下载,适合作为相关研究与工程实施的参考。
1. 数据中心算力-电力灵活性协同在调什么:一份试验型白皮书的拆解
数据中心算力与电力灵活性协同,这个词听着像架构师画的蓝图,实际是这份白皮书最核心的试验记录:不给服务器加任何额外硬件,只靠切换空载服务器的功耗状态、压缩非瓶颈部件的供电冗余、把实时性不敏感的并行任务平移或伸缩,就能让服务器功率在秒级跟随外部指令变化。我读完之后最大的感受是,它不是讲概念,而是把三种策略的实测数据全部贴了出来——空载策略功率降比4%到27%,资源不均衡策略能压2%到26%,任务平移对总耗电量几乎无影响。这份PDF对两类人最有用:一类是机房运维和能效团队,想在不触碰业务的情况下找到可调负荷;另一类是参与需求响应或电力辅助服务结算的团队,需要给数据中心的算力侧找到一个可量化、可复现的调节依据。
2. 白皮书里的三种灵活策略:功耗切换、资源不均衡与任务平移的实测数据
这一章把白皮书里的三种策略逐一拆开。前两种是“业务无感知”的调节,第三种是“业务可等待”的调节,两类策略的适用条件完全不同,别混用。
2.1 空载服务器功耗状态切换:Freeze、PowerCap与软关机怎么选
先看一个容易被忽略的事实:数据中心里总有一部分服务器空载备用,它们不跑业务,但电源一直开着。白皮书里的实验服务器空载功率是215W,其中CPU占53%、内存占21%,其余部件占26%。也就是说,一台空载服务器一年光是“什么都不干”就耗掉接近1900度电。这个基数决定了空载状态切换是一块最容易挖的调节空间。
测试对比了三种切换方式:Linux系统级Freeze、带外管理平台的PowerCap、系统软关机。三者的功率降比和响应速度差异很大,我整理成了表格:
| 切换方式 | 功率降低 | 降比 | 响应速度 | 备注 |
|---|---|---|---|---|
| Freeze | 9W | 4% | 小于1秒 | 需要HMI通道唤醒,依赖OS状态 |
| PowerCap | 57W | 27% | 小于1秒 | 带外下发,解限后立即恢复 |
| 软关机 | 215W | 100% | 约3分钟 | 开机额外耗电约0.0083kWh |
从需求响应角度看,PowerCap是最实用的选项:响应快、可逆、不需要业务系统配合。Freeze降得太少,关机虽然降得彻底但开关机周期太长,适合“避峰”但做不了分钟级以内的调节。
判断自己机房适合哪种方式,我一般先做一次摸底:
# 查看系统支持的电源状态,确认是否支持 freeze 或 suspend cat /sys/power/state # 在空闲节点上观察空载功率与 CPU 占用,确认基线 mpstat -P ALL 1 5 ipmitool sdr list | grep -i "pwr"上面第一行是确认操作系统睡眠能力,第二行的mpstat看CPU空载率,ipmitool读带外功率。参数说明:mpstat -P ALL 1 5表示每1秒采样一次、共5次,看所有核的占用;ipmitool sdr list | grep pwr是从BMC传感器读取整机功率,带外方式不会干扰业务负载。
2.2 资源消耗不均衡性:硬盘与内存密集型任务的“长板”压缩空间
任何业务跑在服务器上,总有某个子部件是短板,其余部件存在冗余。白皮书的核心思路是:把冗余部件的供电压下来,只要不碰瓶颈部件,业务表现就不受影响。这个逻辑听着简单,但实测数据很能说明问题。
硬盘密集型任务用dd模拟,持续写512MB文件三次。把CPU功率从215W压到160W,降比26%,写入速度完全没变。原因是写入瓶颈在硬盘侧,CPU本来就有余量。内存密集型任务用memtester模拟,效果和内存带宽占用率强相关:
| 内存带宽占用 | 初始服务器功率 | 可压缩功率 | 压缩比例 |
|---|---|---|---|
| 约74% | 313W | 57W | 18% |
| 约47% | 278W | 23W | 8% |
| 约28% | 255W | 6W | 2% |
结论很直观:内存I/O越密集,CPU侧的冗余越大,可压缩空间越大。反过来,CPU密集型任务(用Linpack基准程序模拟)没有这种平台区域,功率从363W降到232W,计算耗时从1377秒涨到2303秒,几乎线性变慢。所以CPU密集型任务不适合用压功率这条路,应该换任务平移策略。
选型判断标准就一句话:任务瓶颈在哪个子部件,就动其他部件的功率。我在实际项目里怎么快速判断瓶颈?先看一眼负载特征:
# 观察 CPU / 内存 / 磁盘 / 网络 占用,找短板 mpstat -P ALL 1 3 free -g iostat -x 1 3 nicstat 1 3mpstat看CPU是否打满,free -g看内存余量,iostat -x看磁盘利用率,nicstat看网卡带宽。参数说明:iostat -x是显示扩展统计,重点看%util这一列,超过80%说明磁盘接近瓶颈;nicstat需要单独安装,不带参数时默认每秒输出一次网卡吞吐。哪个部件占用最高,哪个就是短板,其余部件理论上都存在可压缩冗余。
2.3 实时性不敏感任务的平移与伸缩:独立型与耦合型并行任务的差异
科学计算、视频渲染、基因测序这类任务的特点是:计算成本敏感、实时性不敏感、并行规模可调。它们天然适合做电力负荷的时间平移和规模伸缩。白皮书分别测了子任务独立型和子任务耦合型两类并行任务。
子任务独立型用的是白车身轻量化优化计算,在2节点跑完耗时10分27秒、总功耗118Wh;缩容到1节点续算耗时13分49秒、总功耗123Wh;扩容到3节点续算耗时9分54秒、总功耗125Wh。三组数据的总功耗几乎一致,说明独立型任务随便扩缩容,电耗不受影响。
子任务耦合型用的是材料计算模拟程序VASP。2节点并行52分41秒、总功耗511Wh;4节点并行41分42秒、总功耗753Wh;4节点运行时中断并等待续算,总计算耗时37分7秒、总功耗623Wh;4节点中断后缩容到2节点续算,耗时45分35秒、总功耗661Wh。耦合型任务的扩缩容关系是非线性的,因为节点间有通信和同步开销,扩容不总能线性加速。
实际操作中,判断一个任务能不能做平移伸缩,我一般先问三件事:任务是否支持断点续算、并行节点数是否能动态调整、中断后的续算成本有多高。支持这三点的任务才值得接进电力调节系统,否则硬切会丢计算进度,反而更耗电。
3. 从PDF到现场试验:搭环境、标基线、压功率的三步复现流程
上一章是数据和原理,这一章是完整落地路径。我按照白皮书的测试逻辑,整理了一套可以在自己的服务器上复现的流程,不需要采购额外硬件,只需要一台可做带外管理的服务器和Linux基础工具。
3.1 测试环境搭建:带外管理、功率采样与负载工具
复现前需要确认三件事:服务器支持带外功率读取、系统里装有性能监测工具、负载生成工具可用。白皮书用的是某芯片厂商的数据中心管理平台做PowerCap,外加Linux自带的mpstat、free、iostat、nicstat做状态监测。我的建议是,带外管理平台按自己机房现有的来,关键是能读出整机功率、能对CPU功率做上限控制。
负载工具安装:
# Debian / Ubuntu 系 apt install sysstat memtester linux-tools-common -y # CentOS / RHEL 系 yum install sysstat memtester -ysysstat提供mpstat和iostat,memtester是内存压力工具,linux-tools-common是为了拿到turbostat等功率相关工具。参数说明:memtester默认不带参数会跑不完,测试时务必指定内存大小和轮次,比如memtester 4G 1表示只跑4GB内存、1轮。装完先确认工具可用,再进下一步。
3.2 第一步:标定空载功耗基线
基线不标准,后面所有压缩比例都是错的。我一般在业务低峰期找一台空闲服务器,连续采集30分钟以上功率,取平均值作为空载基线。采集脚本可以这样写:
#!/bin/bash # 空载功率基线采集:每 5 秒采样一次,共 30 分钟 for i in $(seq 1 360); do ipmitool sdr list | grep -i "pwr" | awk '{print $NF}' >> power_baseline.log sleep 5 done # 输出平均功率与波动范围 awk '{sum+=$1} END {printf "avg: %.2f W\n", sum/NR}' power_baseline.log这段脚本的逻辑是:通过BMC的SDR传感器读功率,写入日志文件,最后用awk求平均值。参数说明:seq 1 360配合sleep 5,正好30分钟;awk '{print $NF}'取的是每行最后一个字段,也就是功率读数;如果你的BMC输出格式不同,先手动执行一次ipmitool sdr list | grep -i pwr看字段位置再调整。
基线采集期间不要跑任何业务,也不要开远程桌面之类的交互任务。实测经验是,空载功率也有几瓦的漂移,所以至少采30分钟,别拿一分钟的数据当基线。
3.3 第二步:用PowerCap压CPU功率,复现硬盘与内存策略
基线有了,就可以复现策略二的测试流程。白皮书里硬盘密集型任务的操作是:跑dd写512MB文件三次,同时逐步压低CPU功率,观察写入速度是否变化。命令序列如下:
#!/bin/bash # 复现硬盘密集型任务的功率压缩测试 CAP=160 # 期望压到的 CPU 功率上限,单位 W # 下发 PowerCap 限制,不同平台命令不同,这里用通用 CLI 示意 dcmcli setpowercap --target $(hostname) --value $CAP # 跑三次 dd,每次写 512MB,绕过 page cache 避免假写入 for i in 1 2 3; do dd if=/dev/zero of=/tmp/testfile bs=1M count=512 oflag=direct conv=fdatasync /bin/rm -f /tmp/testfile done # 解除限制 dcmcli setpowercap --target $(hostname) --value 0逻辑说明:of=/tmp/testfile指定输出文件,写完后立即删除,保证三次写入条件一致。oflag=direct跳过操作系统的page cache,让数据直接落盘,否则dd可能只是写进了内存缓存,测出来的时间会虚低。conv=fdatasync在写入结束时强制刷盘,保证计时覆盖真实的写盘过程。
跑完对比三次耗时,如果压缩前后写入速度基本不变,说明这台机器用的磁盘瓶颈不在CPU侧,策略二对它有效。跑内存密集型任务时,把dd换成memtester:
# 压内存带宽:指定 4GB 内存、跑 1 轮 memtester 4G 1 & # 记录运行前的功率基线 ipmitool sdr list | grep -i "pwr" # 下发 PowerCap 逐步压低 CPU 功率 dcmcli setpowercap --target $(hostname) --value 220 sleep 30 dcmcli setpowercap --target $(hostname) --value 200参数说明:memtester 4G 1后面的数字是运行轮数,轮数越大跑得越久;&让它后台运行,方便我们同时操作PowerCap;两次PowerCap之间sleep 30是为了等系统功率稳定下来再读下一个点。内存带宽占用率用free或perf监控确认,不要盲调。
3.4 第三步:给实时性不敏感任务接上断点续算钩子
策略三的复现比前两步复杂,因为要动任务调度。常见做法是给计算任务套一个wrapper脚本,把checkpoint触发挂在信号上。我一般这样写:
#!/bin/bash # 计算任务 wrapper:收到 SIGUSR1 时触发 checkpoint 并暂停 CKPT_DIR=/data/ckpt APP_RUN=/opt/hpc/bin/calc APP_SAVE=/opt/hpc/bin/calc_ckpt # 信号处理函数:先保存断点,再暂停进程 save_and_stop() { echo "[$(date)] trigger checkpoint, saving to $CKPT_DIR" >> task_control.log $APP_SAVE --ckptdir "$CKPT_DIR" sleep 2 kill -STOP $$ } trap 'save_and_stop' SIGUSR1 # 从已有 checkpoint 续算,或全新启动 if [ -d "$CKPT_DIR/latest" ]; then $APP_RUN --resume-from "$CKPT_DIR/latest" else $APP_RUN --ckptdir "$CKPT_DIR" fi逻辑说明:trap把SIGUSR1信号绑定到save_and_stop函数,外部收到需求响应指令时向任务进程发SIGUSR1,任务先保存断点再自我暂停。续算时从latest目录恢复。参数说明:--ckptdir指定断点保存目录,--resume-from指定恢复目录,这两个参数名因应用而异,我这里是示意,实际用你的计算软件支持的checkpoint参数替换。
这套wrapper的意义是让任务具备可控中断能力,真正的电力调度还需要上一层队列管理去决定什么时候发信号。白皮书里的VASP测试就是这么做的:任务中断等待、再续算,总耗电量反而比一口气跑完低,因为中断时段正好避开了用电高峰。
4. 复现中的五个坑:功率基线、带外读数与秒级响应为何会翻车
以下五条都来自实际复现中的血泪经验。每条都按“现象→原因→解决”写清楚,如果你也在做类似试验,大概率会踩中其中一两条。
4.1 带外功率读数和电表对不上,偏差超过10%
现象:PowerCap显示服务器功率已经降到指定值,但机柜级电表读数纹丝不动,或者两者始终差一个固定比例。
原因:带外读数来自BMC传感器,采样粒度是毫秒级快照;电表是分钟级平均,两者统计口径不一致。还有一个常见原因是BMC固件里的功率校准系数和实际电源效率不匹配。
解决:先做24小时基线校准,把带外读数和电表读数放在同一时间段内对比,算出修正系数。后续所有测试都只用同一种读数来源,要么全用带外、要么全用电表,不要混着用。
4.2 压了CPU功率,整机功耗却纹丝不动
现象:PowerCap设置为160W,结果整机功率还是210W,压了个寂寞。
原因:大概率当前服务器本来就没跑满CPU,CPU处于低功耗空闲态,PowerCap限制的是瞬时功耗上限,并没有真正压低供电。或者任务瓶颈根本不在CPU,CPU这边压了也无关痛痒。
解决:动手之前先用mpstat确认CPU利用率。如果CPU利用率已经超过80%,再压CPU功率才有意义;如果CPU本来就闲,直接测内存密集型或硬盘密集型任务,别在CPU功率上较劲。另外PowerCap下发生效有延迟,设置后至少等一个采样周期再记录。
4.3 dd压测结果飘忽不定,三次写入速度差异很大
现象:同样的测试跑三遍,耗时一次比一次短,最后一遍甚至比第一遍快一倍。
原因:dd默认写文件时会经过page cache,第一次写入触发真实落盘,后两次可能只写进了内存缓存就返回了,测出来的“写入速度”是内存速度,不是硬盘速度。
解决:把页面缓存绕开,加上oflag=direct,再用conv=fdatasync强制落盘。每轮测完删掉临时文件,让三次测试都在同一起跑线上。
4.4 对CPU密集型任务压功率,任务耗时直接翻倍
现象:功率降到232W后,计算耗时从1377秒涨到2303秒,性能损失接近一倍。
原因:CPU密集型任务的瓶颈正好是CPU本身,压CPU功率就是压任务性能,不存在白皮书里说的“平台区域”——可压缩冗余在这个场景下几乎为零。
解决:CPU密集型任务不要硬压CPU功率,改用策略三,把任务整体平移到低价电时段,或者先断点暂停、等响应邀约结束后再续算。如果你一定要压功率,可以试试限制内存或网络部件的功率,但白皮书也指出这部分还需要更多实验数据。
4.5 说好的秒级响应,一接业务调度链路就变成十几秒
现象:单独测PowerCap响应是秒级,但接到需求响应平台后,从收到指令到功率真正变化花了十几秒。
原因:指令链路比想象中长。需求响应平台先把指令发给业务调度系统,调度系统再决定哪些任务可停、哪些服务器可压,最后才轮到PowerCap执行,中间任何一环做轮询都会拖慢整体。
解决:提前把服务器分组,同一组内的服务器按任务类型预配置好几档PowerCap值。收到指令后直接切换组配置,而不是临时算临时设。我一般会给每组预留三档功率:浅调、深调、紧急关停,响应时就只做档位切换,把链路时间控制在三秒以内。
5. 把这套方法变成自己的工具:先标定负载画像,再谈参与需求响应
把白皮书的数据变成自己机房能用的东西,第一步不是买设备,而是给每类业务做一张电力特性标定表。标定方法不难:挑一台有代表性的服务器,按业务类型分别跑一次空载、硬盘密集、内存密集、CPU密集、并行计算五类负载,记录各子部件利用率、整机功率、可压缩功率和响应速度。我一般会用下面这张表当模板:
| 机型 | 业务类型 | 瓶颈部件 | 初始功率(W) | 可压缩功率(W) | 压缩比例 | 推荐策略 |
|---|---|---|---|---|---|---|
| 机型A | 大数据分析 | 内存 | 313 | 57 | 18% | 策略二 |
| 机型A | 关系型数据库 | 硬盘 | 215 | 55 | 26% | 策略二 |
| 机型B | AI训练 | CPU | 363 | 约0 | 不建议 | 策略三 |
| 机型B | 视频渲染 | 无固定瓶颈 | 多重分布 | 任务级可调 | 视断点能力 | 策略三 |
标定表做出来之后有两层用途。第一层是摸底:统计每类业务的可压缩总功率,乘以对应服务器数量,就能估算出整个数据中心理论上能提供的调节容量。第二层是参与需求响应:收到电网削峰指令时,先查表看哪些业务落在策略二,直接切PowerCap档位;哪些业务落在策略三,先给wrapper发SIGUSR1断点暂停。这个流程要在非响应时段演练至少两次,第一次确认压降深度符合预期,第二次确认恢复时业务无感。
我个人的习惯是,每次做新机型标定时,先空载跑足一小时确认基线不漂移,再做三遍负载测试取中位数,最后把标定表挂到运维文档里和监控系统关联起来。从那以后我每次拿到新白皮书或新机型,都会强制自己走一遍“标基线→压功率→记录特征→归档”这套流程,不再直接看摘要就拍脑袋上线。这份PDF的附录里有完整的测试参数和软硬件配置说明,下载后对着标定表照做一轮,比自己从零摸索省太多时间。希望帮到你。
本文还有配套的精品资源,点击获取