功耗节能
基础知识¶
cpufreq 是一个动态调整 cpu 频率的模块,系统启动时生成一个文件夹 /sys/devices/system/cpu/cpu0/cpufreq/ 里面有几个文件,其中 scaling_min_freq 代表最低频率,scaling_max_freq 代表最高频率,scaling_governor 代表 cpu 频率调整模式,用它来控制 CPU 频率。
那么我们看看 PVE 默认情况下使用的 CPU 电源策略为:performance 性能模式:
# 查看支持的 CPU 电源模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# 查看当前的 CPU 电源模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
可以看到 PVE 下默认支持 conservative、ondemand、userspace、powersave、performance、schedutil 这 6 种 CPU 电源模式:
这就导致了功耗注定不会很低。
几种电源模式的解释说明:
电源模式 | 解释说明 |
---|---|
performance | 性能模式,将 CPU 频率固定工作在其支持的较高运行频率上,而不动态调节。 |
userspace | 系统将变频策略的决策权交给了用户态应用程序,较为灵活。 |
powersave | 省电模式,CPU 会固定工作在其支持的最低运行频率上。 |
ondemand | 按需快速动态调整 CPU 频率,没有负载的时候就运行在低频,有负载就高频运行。 |
conservative | 与 ondemand 不同,平滑地调整 CPU 频率,频率的升降是渐变式的,稍微缓和一点。 |
schedutil | 负载变化回调机制,后面新引入的机制,通过触发 schedutil sugov_update 进行调频动作。 |
优化之前¶
下图中默认开启 3 个 VM 的情况下:
使用 lscpu 查看一下 CPU 的频率,可以看到 CPU 还是比较活跃的,一直处于较高的频率:
这就导致了功耗降不下来, 此时功耗为 306W:
省电优化¶
调整 CPU 模式¶
首先得安装 cpupower:
下面是 cpupower 的一些常用命令:
# CPU实时频率查看
watch -n 1 cpupower monitor
# 查看当前所有CPU的信息
cpupower -c all frequency-info
# 设置所有CPU为节能模式
cpupower -c all frequency-set -g powersave
# 设置所有CPU为性能模式
cpupower -c all frequency-set -g performance
因为 PVE 下默认的 CPU 电源策略就是 performance 性能模式了,所以我们这里将其设置为保守一点的 conservative 模式:
此时检测频率发现所有的 CPU 频率都已经下来了:
不过我们这样操作后,重启后又变成性能模式了。不过方法总比困难多,我们可以手动将限制功耗的命令设置为服务,然后开机自启即可。时间有限,国光这里就不展开说了,大家可以自己研究看看。
优化显卡待机¶
我们的 PVE 宿主机对显卡的待机很不友好,我的 RX 580 如果默认被 PVE 加载的话,日常待机都得 75W 左右着实蛋疼,所以需要我们在 grub 下面添加如下 4 个关闭显卡的参数:
参数 | 解释说明 |
---|---|
video=vesafb:off | 禁用 vesa 启动显示设备 |
video=efifb:off | 禁用 efi 启动显示设备 |
video=simplefb:off | 5.15 内核开始直通可能需要这个参数 |
initcall_blacklist=sysfb_init | 部分 A 卡如 RX580 直通异常可能需要这个参数 |
最终我的 GRUB 的参数配置如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt textonly nomodeset nofb pci=noaer pcie_acs_override=downstream,multifunction video=vesafb:off video=efifb:off video=simplefb:off initcall_blacklist=sysfb_init"
改完记得使用 update-grub
更新一下 grub 配置文件再重启
优化之后¶
通过上述的优化,我们的日常待机功耗从 306W 降低到了 221W,一下降低了 85W,降低了 27.78% 优化效果还是很明显的:
经国光的多次厕所,发现主要的耗电大户还是显卡,日常待机的情况下其实 CPU 的工作模式对功耗的影响并不大,只有满载的时候才会不同 CPU 的工作模式的功耗差距才会提现出来。
谁更耗电¶
本次测试在 CPU 的 performance 性能模式下进行测试,默认开 2 个 VM(2个 OpenWrt),硬件插满的情况下整机功耗为:221W,通过差值计算很容易算出指定 PCIe 设备的功耗情况(个人测试缺乏各种对比,数据可能存在些许误差)。
拔掉顺序 | 硬件 | 整机功耗 | 推算的功耗 |
---|---|---|---|
1 | 蓝宝石 超白金 RX 580 2304SP 8GB 满血版 | 209W | 12W |
2 | 浪潮 X540-T2 双网口 万兆电口网卡 | 189W | 20W |
3 | NVIDIA Tesla P4 8GB 计算卡 | 179W | 10W |
4 | 西数 WD AN1500 Raid0卡 + 2 张 NVME 1TB 西数 SN570 | 173W | 6W |
5 | 2 张 博通 BCM 94360CD 无线网卡 + PCIe NVME 扩展卡 | 162W | 11W |
6 | 3 个涡轮风扇 + 1 个 5cm 台达小风扇 | 158W | 4W |
7 | 电竞判客 NVIDIA RTX 3060 12GB | 133W | 25W |
最终拔掉上述设备的情况下,我们的 X99 双路 E5-2696 V4 的日常待机功耗为:133W
所以如果大家不喜欢花里胡哨的插一堆设备的话,双路 E5 的功耗也没有传说中的那么夸张啦。