Linux 的电源管理基础是内核,只要发行版不离谱,功能都是一样的。不过不是所有发行版都默认开启电源管理服务,也就是 TLP ,开启后的续航应该与 Windows 不相上下。
题主给出压缩到 3 瓦的例子需要合适的硬件,而且多数情况下 3 瓦的 x86 CPU 也没啥用户体验可言。以下教程来自于 openSUSE Wiki,对安装软件的命令稍作修改亦可用于其他发行版。实测在正常使用下可以把我笔记本(标压 CPU )整体功耗压缩到 9.94 瓦。
如果你是第一次在笔记本上安装 openSUSE ,它的表现可能偏离你的预期。不止一人表示 Linux 比 Windows 更加节省资源,但对于你来说,电池使用时间比起 Windows 大幅下降可不是节省资源的表现。在你决定回到 Windows 前,先冷静一下,你只是忘记告诉内核 “你该省电” 这个事实而已。
这确实算是个坏消息:本文的核心部分将在命令行下完成。不过别担心,配置完成后这些工具将会自动运行。然后你就可以忘掉这茬,享受与 Android 等嵌入式设备同源且智能的省电策略,直到你重新安装系统或者换新笔记本为止。
TLP 是一个功能丰富的 Linux 命令行工具,无需深入研究技术细节就能节省笔记本电池电量。
TLP 的默认设置已经针对电池寿命进行了优化,所以你可以直接安装并忘记它。然而,TLP 是高度可定制的,以满足你的具体要求。
TLP 的基本工作原理是调整影响功耗的内核设置(kernel settings)。
首先,内核设置(kernel settings)是不稳定的。它们的状态在运行时被保存在 RAM 中,内核没有为它们提供持久性。在启动时,内核创建了一个默认的状态,每次启动时都必须通过用户空间的工具重新应用这些改变。TLP 就是这样一个用户空间的工具。
如果你觉得正文“太长不看”,你可以直接执行以下命令启用 TLP,使用默认配置,然后忘掉TLP的存在。
sudo zypper in tlp powertop sudo systemctl disable powertop sudo systemctl disable tlp sudo systemctl stop powertop sudo systemctl stop tlp sudo systemctl enable tlp
我们需要两个工具:TLP 与 PowerTOP 。在大多数情况下,openSUSE 已经在你的设备上安装了他们,作为 laptop 软件包模组的一部分。如果的确没有安装,使用如下命令行可以简单地安装他们。
sudo zypper in tlp powertop
CPU 的耗电大体符合以下公式:
功率 = 电容率 × 电压的平方 × 频率
功率代表能耗(Power),而电容率(Capacitance),与 CPU 的制程和工艺等相关,在 CPU 出厂时就已经确定下来。那么我们能改变的只有电压与频率,而频率与电压成正相关。所以当 CPU 在很高的频率上运行时,效能很高但耗电量很大。如果我们能在 CPU 运算量不大时,让它降频运行,这样我们就可以减少功率,同时我们可以降低电压,节约能源,并减少发热与风扇噪音。
Linux 下调整 CPU 的模块叫 CPU 调速器(Governor),Android 等基于 Linux 的嵌入式平台都会使用 CPU 调速器达到省电的效果,同样,你也能。
如果你有 Android 平台的 CPU 调速器使用经验,请不要试着直接限制 CPU 的频率,那是在 ARM 平台上才有效的做法,在 X86 平台下对减轻能耗帮助甚微。
较新的 Intel CPU 使用 intel_pstate
驱动,只支持两种调速器:
建议使用 TLP 管理电源,PowerTOP 仅作为监测工具使用,所以以下配置均基于 TLP。
首先,禁用相关服务:
sudo systemctl disable powertop sudo systemctl disable tlp sudo systemctl stop powertop sudo systemctl stop tlp
TLP 的配置文件存在于两个位置:
你可以自由决定配置文件存放的方式,但建议使用配置文件夹,将属于不同部分的配置放入不同的文件。
创建一个自定义的配置文件(官方的配置介绍详见:TLP Settings):
cd /etc/tlp.d/ sudo touch 01-cpu.conf
编辑文件:
sudo nano /etc/tlp.d/01-cpu.conf
在直流电源与电池供电情况下都使用 powersave 调速器。X86 平台的 powersave 调速器不会限制你的最高频率,只是更加谨慎地增加频率,并在负载下降时更加积极的回到低频率。TLP 的开发者并不建议更改为其他调速器。
CPU_SCALING_GOVERNOR_ON_AC=powersave CPU_SCALING_GOVERNOR_ON_BAT=powersave
以下两项配置决定了 CPU 的能源策略,在电池模式下省电,而在外部电源供电模式下偏向性能:
CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance CPU_ENERGY_PERF_POLICY_ON_BAT=power
使用以下两项配置在电池供电时禁用自动超频,也就是关闭睿频:
CPU_BOOST_ON_AC=1 CPU_BOOST_ON_BAT=0
以下两项配置会在电池模式下根据负载自动缩减 CPU 核心数。
SCHED_POWERSAVE_ON_AC=0 SCHED_POWERSAVE_ON_BAT=1
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
TLP 利用内核设置,自动将不使用的 USB 设备挂起以节电。
/etc/tlp.d/02-usb.conf --------- USB_AUTOSUSPEND=1
基于内核的 natacpi 模块,部分笔记本(如部分 ThinkPad 系列与部分 Dell)电脑可以手动管理电池充电百分比。无需安装额外的 ACPI 模块。
/etc/tlp.d/03-battery.conf --------- START_CHARGE_THRESH_BAT0=80 # 开始充电阈值 STOP_CHARGE_THRESH_BAT0=85 # 停止充电阈值
按 CRTL + O 写入配置文件,然后 CRTL + X 关闭编辑面板
启动服务:
sudo systemctl start tlp
检查服务状态:
sudo systemctl status tlp
让 TLP 开机自启动:
sudo systemctl enable tlp
检查是否成功:
sudo systemctl is-enabled tlp
然后你就可以像我说的,忘掉这件事了。
powertop 是个很好的实时监测工具,你只需要运行 sudo powertop
就可以获得相对友好的输出。
它可以显示特定进程与设备的耗电量。用 tab 在不同的标签页中切换。你看,我的电脑此刻的耗电速率为 9.94 瓦,甚至不及一个树梅派 4(5 伏 3 安即 15 瓦)。不过 不要 听从 PowerTOP 关于省电的建议,也不要在 systemd 上启用他—— TLP 做的比他更好。同时 tlp-stat 命令也会输出有用的信息。