简明 openSUSE 笔记本电池管理教程
- 本文基于 openSUSE Tumbleweed 20201014,因 TLP 版本不同,不适用于 Leap 15.2*
引言
如果你是第一次在笔记本上安装 openSUSE ,它的表现可能偏离你的预期。不止一人表示 Linux 比 Windows 更加节省资源,但对于你来说,电池使用时间比起 Windows 大幅下降可不是节省资源的表现。在你决定回到 Windows 前,先冷静一下,你只是忘记告诉内核 “你该省电” 这个事实而已。
这确实算是个坏消息:本文的核心部分将在命令行下完成。不过别担心,配置完成后这些工具将会自动运行。然后你就可以忘掉这茬,享受与 Android 等嵌入式设备同源且智能的省电策略,直到你重新安装系统或者换新笔记本为止。
准备
我们需要两个工具:TLP 与 PowerTOP。在大多数情况下,openSUSE 已经在你的设备上安装了他们,作为 laptop
软件包模组的一部分。如果的确没有安装,使用如下命令行可以简单地安装他们。
sudo zypper in powertop tlp
配置
让我们先禁用电源管理程序:
sudo systemctl disable powertop
sudo systemctl disable tlp
sudo systemctl stop powertop
sudo systemctl stop tlp
我个人建议使用 TLP 管理电源,PowerTOP 仅作为监测工具使用,所以以下配置均基于 TLP。TLP 的配置文件存在于两个位置:
-
/etc/tlp.d/*.conf
:插入的自定义配置,在/etc/tlp.d/
文件夹下的配置文件将按字母顺序读取并应用 -
/etc/tlp.conf
:单文件用户配置
你可以自由决定配置文件存放的方式,但我建议使用配置文件夹,将属于不同部分的配置放入不同的文件。
CPU
CPU 的耗电大体符合以下公式:
功率 = 电容率 × 电压的平方 × 频率
功率代表能耗(Power),而电容率(Capacitance),与 CPU 的制程和工艺等相关,在 CPU 出厂时就已经确定下来。那么我们能改变的只有电压与频率,而频率与电压成正相关。所以当 CPU 在很高的频率上运行时,效能很高但耗电量很大。如果我们能在 CPU 运算量不大时,让它降频运行,这样我们就可以减少功率,同时我们可以降低电压,节约能源,并减少发热与风扇噪音。
Linux 下调整 CPU 的模块叫 CPU 调速器(Governor),Android 等基于 Linux 的嵌入式平台都会使用 CPU 调速器达到省电的效果,同样,你也能。
- 如果你有 Android 平台的 CPU 调速器使用经验,请不要试着直接限制 CPU 的频率,那是在 ARM 平台上才有效的做法,在 X86 平台下对减轻能耗帮助甚微。*
Intel
较新的 Intel CPU 使用 intel_pstate
驱动,只支持两种调速器:
-
powersave
:省电模式——内核理应默认运行在此模式下 -
performance
:性能模式
具体配置文件如下:
/etc/tlp.d/01-cpu.conf
---------
CPU_SCALING_GOVERNOR_ON_AC=powersave
CPU_SCALING_GOVERNOR_ON_BAT=powersave
在直流电源与电池供电情况下都使用 powersave
调速器。X86 平台的 powersave
调速器不会限制你的最高频率,只是更加谨慎地增加频率,并在负载下降时更加积极的回到低频率。TLP 的开发者并不建议更改为其他调速器。
CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
CPU_ENERGY_PERF_POLICY_ON_BAT=power
以上两项配置决定了 CPU 的能源策略,在电池模式下省电,而在外部电源供电模式下偏向性能。
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
使用以上两项配置在电池供电时禁用自动超频,也就是关闭睿频。
SCHED_POWERSAVE_ON_AC=0
SCHED_POWERSAVE_ON_BAT=1
以上两项配置会在电池模式下根据负载自动缩减 CPU 核心数。
AMD 与旧款 Intel
AMD 与旧款 Intel 使用 acpi-cpufreq
驱动,故部分设置与 Intel 不同。这里仅仅贴出配置文件内容,建议阅读 TLP 官方文档以了解配置内容含义。
/etc/tlp.d/01-cpu.conf
---------
CPU_SCALING_GOVERNOR_ON_AC=ondemand
CPU_SCALING_GOVERNOR_ON_BAT=ondemand
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
SCHED_POWERSAVE_ON_AC=0
SCHED_POWERSAVE_ON_BAT=1
USB 自动挂起设备
TLP 利用内核设置,自动将不使用的 USB 设备挂起以节电。
/etc/tlp.d/02-usb.conf
---------
USB_AUTOSUSPEND=1
ThinkPad 高级电池管理
ThinkPad 可以手动管理电池充电百分比。你需要提前安装 acpi_call 模块。
/etc/tlp.d/03-battery.conf
---------
START_CHARGE_THRESH_BAT0=80
# 开始充电阈值
STOP_CHARGE_THRESH_BAT0=85
# 停止充电阈值
应用
启动 TLP 服务:
sudo systemctl enable tlp
然后你就可以像我说的,忘掉这件事了。
实时监测
powertop
是个很好的实时监测工具,你只需要运行 sudo powertop
就可以获得相对友好的输出。
它可以显示特定进程与设备的耗电量。用
tab
在不同的标签页中切换。你看,我的电脑此刻的耗电速率为 9.94 瓦,甚至不及一个树梅派 4(5 伏 3 安即 15 瓦)。不过 ** 不要 ** 听从 PowerTOP 关于省电的建议,也不要在 systemd 上启用他——TLP 做的比他更好。同时 tlp-stat
命令也会输出有用的信息。