跳转至

功耗节能

基础知识

cpufreq 是一个动态调整 cpu 频率的模块,系统启动时生成一个文件夹 /sys/devices/system/cpu/cpu0/cpufreq/ 里面有几个文件,其中 scaling_min_freq 代表最低频率,scaling_max_freq 代表最高频率,scaling_governor 代表 cpu 频率调整模式,用它来控制 CPU 频率。

那么我们看看 PVE 默认情况下使用的 CPU 电源策略为:performance 性能模式:

Bash
# 查看支持的 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:

Bash
apt install linux-cpupower

下面是 cpupower 的一些常用命令:

Bash
# 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 模式:

Bash
cpupower -c all frequency-set -g 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 的参数配置如下:

INI
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 的功耗也没有传说中的那么夸张啦。


最后更新: 2023-03-06