家用住宅主机低功耗内核调优降低电费
很多朋友家里都有一台常年开机的迷你主机,做软路由、NAS 或者家庭服务器。
电费虽然单个不高,但跑一年下来也是一笔开销。
其实通过调整 Linux 内核的电源管理参数,就能在不影响日常使用的前提下降低功耗。
这篇教程会从零开始讲清楚怎么操作。
调优前的准备
先确认你的系统环境。
本文基于 Debian/Ubuntu 系统,其他发行版命令大同小异。
需要 root 权限,建议先备份 grub 配置和 /etc/default/grub 文件。
另外检查一下 CPU 型号:Intel 的 C-state 和省电特性一般比旧款更完善,AMD 的部分处理器也能用类似思路。
推荐在调优前用功率插座记录当前整机功耗,或者在系统里执行 powertop 看估算值(先 apt install powertop)。
有了对比才能确认效果。
调整 CPU 频率调控器
CPU 频率调控器(governor)决定了系统如何根据负载调节频率。
默认可能是 performance(最高性能)或 ondemand(按需)。
省电首选 powersave 或 schedutil。
安装工具并查看当前调控器:
sudo apt install cpufrequtils
cpufreq-info | grep governor
如果想全核都改成 powersave:
sudo cpufreq-set -g powersave
想开机自动生效,可以编辑 /etc/default/cpufrequtils,写入:
GOVERNOR="powersave"
之后重启生效。
如果你用的是较新内核,推荐用 schedutil,它让调度器直接参与调频,兼顾响应和省电:
echo 'schedutil' | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
但注意,schedutil 需要内核编译时打开 CONFIG_CPU_FREQ_GOV_SCHEDUTIL,一般 Ubuntu 22.04+ 默认支持。
优化 CPU 空闲状态(C-states)
现代 CPU 在空闲时可以进入更深度的睡眠状态(C3、C6、C7 等),但有时内核或固件会限制深度。
在终端查看当前支持的状态:
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
如果看到 C1、C1E、C2 但缺少更深的,可能是 BIOS 里禁用了。
进 BIOS 找到“C-States”或“Package C State Limit”设为启用或最深级别(如 C10)。
内核参数也能控制,打开 /etc/default/grub,找到 GRUB_CMDLINE_LINUX_DEFAULT,添加:
intel_idle.max_cstate=9 processor.max_cstate=9
(数字表示允许的最深状态,一般设为 9 或 10)
然后更新 grub:
sudo update-grub
sudo reboot
重启后再次查看 cat /sys/devices/system/cpu/cpu0/cpuidle/state*/latency,如果数值增加了,说明更深的 C-state 已启用。
关闭不必要的硬件模块
家用主机很多硬件功能用不上,关掉能省几瓦电。
常见的如蓝牙、红外、无线网卡、未使用的 SATA 控制器等。
查看当前加载的模块:
lsmod
找到不需要的,创建黑名单文件,比如屏蔽蓝牙:
echo 'blacklist btusb' | sudo tee /etc/modprobe.d/disable-bt.conf
更新 initramfs:
sudo update-initramfs -u
同理可以屏蔽 iwlwifi、r8169(如果用有线网卡且不用无线)。
操作前先确认你确实不需要它们,否则可能影响基本网络或外设。
验证省电效果
复测功耗是最直接的方法。
如果手头没有功率插座,用 powertop 估算也能参考:
sudo powertop --csv=/tmp/power.csv
大约运行 30 秒后按 Ctrl+C,查看生成的 csv 文件,里面会有一行“The system baseline estimated power is X Watts”。
也可以对比 /sys/class/powercap/intel-rapl:0/energy_uj 两次读取的差值来算瞬时功耗,但新手建议直接用插座。
调优后建议观察几天,确保系统稳定,特别是软路由或 NAS 这类 24 小时服务的设备。
常见问题与避坑
问:改为 powersave 后感觉机器变卡了?
答:如果运行的是轻量服务(文件共享、路由器)基本无感。如果跑 Docker 或编译任务,建议改用 schedutil 或 ondemand,在省电和性能之间折中。
问:我的是 AMD 处理器,上面的参数也适用吗?
答:大部分 Linux 内核电源管理接口通用。AMD 的 acpi-cpufreq 驱动同样支持上述调优,只是 C-state 名称不同。可以查看 /sys/devices/system/cpu/cpu0/cpuidle/ 确认。
问:改了 C-state 后主机唤醒变慢或死机怎么办?
答:某些主板或旧 CPU 在深度 C-state 下可能不稳定。开机时在 grub 菜单按 e 临时去掉 intel_idle.max_cstate 参数,正常启动后再逐步调低数字(比如从 9 降到 5 或 3),找到稳定值。
问:这些调整会影响硬盘寿命吗?
答:不会直接影响硬盘。若对硬盘电源管理做过调整(比如 hdparm -S),频繁休眠唤醒反而有磨损。本文未涉及硬盘空闲策略,可单独查阅相关教程。
最后提醒一句:每台主机的硬件细节不同,建议先在小规模环境验证,再应用到主力机。
如果遇到调优后反而功耗升高的情况,回退修改并逐步排查即可。