Linux TLP 电源管理教程

Linux 的电源管理基础是内核,只要发行版不离谱,功能都是一样的。不过不是所有发行版都默认开启电源管理服务,也就是 TLP ,开启后的续航应该与 Windows 不相上下。

以下教程起初是我贴在 openSUSE 中文社区论坛上,后来寒晶雪把他搬到 openSUSE Wiki 作了拓展与修正,我又从 Wiki 复制到知乎,现在又从知乎转到我的博客。对安装软件的命令稍作修改亦可用于其他发行版。实测在正常使用下可以把我笔记本(标压 CPU )整体功耗压缩到 9.94 瓦。

引言

如果你是第一次在笔记本上安装 openSUSE ,它的表现可能偏离你的预期。不止一人表示 Linux 比 Windows 更加节省资源,但对于你来说,电池使用时间比起 Windows 大幅下降可不是节省资源的表现。在你决定回到 Windows 前,先冷静一下,你只是忘记告诉内核 “你该省电” 这个事实而已。

这确实算是个坏消息:本文的核心部分将在命令行下完成。不过别担心,配置完成后这些工具将会自动运行。然后你就可以忘掉这茬,享受与 Android 等嵌入式设备同源且智能的省电策略,直到你重新安装系统或者换新笔记本为止。

TLP 是什么

TLP 是一个功能丰富的 Linux 命令行工具,无需深入研究技术细节就能节省笔记本电池电量。

TLP 的默认设置已经针对电池寿命进行了优化,所以你可以直接安装并忘记它。然而,TLP 是高度可定制的,以满足你的具体要求。

TLP 是如何工作的

TLP 的基本工作原理是调整影响功耗的内核设置(kernel settings)。

什么是 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 功耗

CPU 的耗电大体符合以下公式:

功率 = 电容率 × 电压的平方 × 频率

功率代表能耗(Power),而电容率(Capacitance),与 CPU 的制程和工艺等相关,在 CPU 出厂时就已经确定下来。那么我们能改变的只有电压与频率,而频率与电压成正相关。所以当 CPU 在很高的频率上运行时,效能很高但耗电量很大。如果我们能在 CPU 运算量不大时,让它降频运行,这样我们就可以减少功率,同时我们可以降低电压,节约能源,并减少发热与风扇噪音。

Linux 下调整 CPU 的模块叫 CPU 调速器(Governor),Android 等基于 Linux 的嵌入式平台都会使用 CPU 调速器达到省电的效果,同样,你也能。

如果你有 Android 平台的 CPU 调速器使用经验,请不要试着直接限制 CPU 的频率,那是在 ARM 平台上才有效的做法,在 X86 平台下对减轻能耗帮助甚微。

较新的 Intel CPU 使用 intel_pstate 驱动,只支持两种调速器:

  • powersave : 省电模式——内核理应默认运行在此模式下
  • performance : 性能模式

配置

建议使用 TLP 管理电源,PowerTOP 仅作为监测工具使用,所以以下配置均基于 TLP。

首先,禁用相关服务:

sudo systemctl disable powertop
sudo systemctl disable tlp
sudo systemctl stop powertop
sudo systemctl stop tlp

TLP 的配置文件存在于两个位置:

  • /etc/tlp.d/*.conf :插入的自定义配置,在 /etc/tlp.d/ 文件夹下的配置文件将按字母顺序读取并应用
  • /etc/tlp.conf :单文件用户配置

你可以自由决定配置文件存放的方式,但建议使用配置文件夹,将属于不同部分的配置放入不同的文件。

创建一个自定义的配置文件(官方的配置介绍详见: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

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

ACPI 高级电池管理

基于内核的 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

powertop 是个很好的实时监测工具,你只需要运行 sudo powertop 就可以获得相对友好的输出。

它可以显示特定进程与设备的耗电量。用 tab 在不同的标签页中切换。你看,我的电脑此刻的耗电速率为 9.94 瓦,甚至不及一个树梅派 4(5 伏 3 安即 15 瓦)。不过 不要 听从 PowerTOP 关于省电的建议,也不要在 systemd 上启用他—— TLP 做的比他更好。同时 tlp-stat 命令也会输出有用的信息。

参考&外链

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注