在 openEuler 上把“省电”当成常规操作:低功耗优化策略探索【华为根技术】
在 openEuler 上把“省电”当成常规操作:低功耗优化策略探索
—— Echo_Wish 的欧拉随想
咱们先撂一句接地气的话:服务器不是越热越好,能把功耗降下来、还能稳住服务,那才是真本事。
openEuler 作为企业级 Linux 发行版,常见于边缘计算、物联网网关、工业控制等需要长期稳定运行但又对功耗敏感的场景。本文不讲空泛口号,给你一套可操作的低功耗优化思路:从“测量——策略——落地——验证”四步走,配上能直接跑的命令和 systemd 示例,把省电变成日常运维能力。
一、先测量:没有数据就都是瞎优化
在下手改任何设置之前,先拿数据说话。常用工具:
powertop:交互式找 guilty 做法并能 auto-tune。turbostat/perf:看 CPU C-states、频率与温度(需要 Intel 平台工具)。ipmitool/ BMC:拿整机功耗(如果支持)。top/htop/iotop:找 CPU、IO、内存热点进程。
示例:
# 安装
sudo dnf install -y powertop
# 先采样 10s,查看当前能耗建议
sudo powertop --time=10
# 交互界面试一下并自动应用建议(谨慎使用)
sudo powertop --auto-tune
测量目标是明确:识别“空转/空闲不睡、频繁 wakeup、网络/USB 高频访问、IO 低效”等几个高耗点。
二、策略一:CPU 级 — 让 CPU “聪明睡觉”
CPU 是最主要的功耗来源之一。思路是让 CPU 进入更深的 C-state(空闲态)并用频率调度在负载与功耗中权衡。
常用做法:
- 选择合适的调度器(governor)
ondemand/conservative/schedutil/powersave等,现代内核推荐schedutil(与 CFS 调度器配合更平滑),边缘设备在低负载场景可选powersave。
# 将所有 CPU 切到 powersave
for cpu in /sys/devices/system/cpu/cpu[0-9]*; do
echo powersave | sudo tee $cpu/cpufreq/scaling_governor
done
-
允许深度 C-state(通过内核参数或 BIOS/固件设置)
深度 C-state 需要固件和内核配合,必要时在 BIOS 打开 C-states。用turbostat看 C-state 分布。 -
减少不必要的定时器中断(tickless)
内核的 nohz/tickless 特性能减少周期性时钟唤醒,提升空闲效率。可以在内核启动参数里调整nohz=on、nohz_full(有复杂性,慎用)或使用内核默认的动态 tick 功能。
三、策略二:设备与外设 — 别让外设常亮
网卡、USB、Wi-Fi、蓝牙等外设经常被忽视但耗电可观。
- 网卡:启用节能以太网特性(EEE)、关闭不必要的中断(结合
ethtool),对无线设备启用 power save 模式。
# 例:对某些网卡启用节能(视网卡支持)
sudo ethtool --set-eee eth0 eee on
# 无线省电
sudo iw dev wlan0 set power_save on
- USB:对闲置 USB 设备做 autosuspend(通过 udev 或 powertop 建议)。
四、策略三:系统服务与进程级 — 精简、限流、按需启动
很多服务在不需要时仍然占用资源。把不必要服务关闭或按需启动,给系统“减负”。
- 用
systemctl检查并禁用不必要服务:
sudo systemctl disable bluetooth.service
sudo systemctl mask cups.service # 如果不需要打印
- 对高耗进程使用 cgroups 或 systemd 的
CPUQuota/MemoryMax做限制:
# /etc/systemd/system/example.service.d/limits.conf
[Service]
CPUQuota=50% # 限制为 50% CPU
然后 systemctl daemon-reload && systemctl restart example.service。
五、策略四:动态策略 — 根据场景切换 Profile
单一配置难以适配“峰值负载”和“长待机”两种需求。推荐使用 tuned 或自定义 systemd target 做 profile 切换,例如 performance 与 powersave。
# 安装并切换到 powersave(openEuler 可能自带 tuned)
sudo dnf install -y tuned
sudo tuned-adm profile powersave
# 自定义脚本:AC 插入/拔出切换
cat >/usr/local/bin/power-profile.sh <<'EOF'
#!/bin/bash
if on_ac_power; then
tuned-adm profile throughput-performance
else
tuned-adm profile powersave
fi
EOF
chmod +x /usr/local/bin/power-profile.sh
可以把这脚本绑到 UDEV 或 systemd-logind 的 AC 事件钩子上,实现自动切换。
六、策略五:休眠与唤醒设计
对真正需要长时间待机的 edge 设备,合理选择 suspend 模式(mem)或休眠到磁盘(disk)。同时,规划 RTC/网络/IO 唤醒策略,避免频繁唤醒杀死省电效果。
# 进入 suspend
sudo systemctl suspend
# 列出唤醒源
cat /proc/acpi/wakeup
七、验证与回归测试
每次改动后都要回测功耗与延迟:先 baseline,再调优,再回测(至少 3 次取均值)。别只看瞬时功耗,还要看服务可用性、响应时延和抖动。用 powertop 的 --html 生成报告,长期监控可用 Prometheus + grafana 拉取 IPMI 或 BMC 数据。
八、Echo_Wish 的一点感受(温度 + 观点)
做低功耗优化,别把它想成“折腾参数”的竞赛,而是一套工程化能力:
- 先保障服务可用性,再去追求每一瓦的节省;
- 把策略标准化为 profile 和运维 playbook,把“谁知道改什么”的隐性知识转成代码;
- 可度量、可回滚、可审计是最重要的三条原则。
多年前我在一个边缘节点项目里把系统默认 governor 从 performance 调回 schedutil、关掉若干不必要服务,再配合网卡低功耗策略,单台设备月均功耗下降约 15%(具体数字视硬件平台)。更重要的不是数字,而是团队意识:把省电当成版本管理的一部分,把配置写进 Git,而不是只有某个人的脑子里。
最后的小结
openEuler 提供了稳定的平台和成熟的工具链,低功耗优化不是单点调整,而是测量—策略—自动化—验证的闭环。把这些流程落成规范,并用代码维护它们,才是真正让“省电”成为日常运维能力的路子。
- 点赞
- 收藏
- 关注作者
评论(0)