Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 

文章代表作者个人观点,少数派仅对标题和排版略作修改。


背景

我一直很羡慕 Mac 笔记本,尤其是 MacBook Air,轻薄便携的机身与惊人的续航几乎就是它的标志。通过 MacOS 系统和 M 系列芯片的软硬件深度整合,苹果给 MacBook Air 带来的省电体验实在是让人印象深刻。

相比之下,Windows 笔记本虽然难以完全复刻这种表现,但随着 AMD 和 Intel 在芯片架构与制程工艺上的进步,加上各大 OEM 厂商的省电模式与大容量电池的配合,现在的 Windows 笔记本也能做到办公场景下 8~10 小时的续航。其中的佼佼者,如 Lunar Lake 系列的笔记本,已经达到甚至超越了 Mac。

然而,我的笔记本上运行的则是 Archlinux。由于几乎没有进行过任何电源优化,即使这台笔记本拥有 85 Wh 的电池,离电续航却往往只有 3~5 小时。于是为了提示笔记本的离电使用时间,我决定探索一下 Linux 上的省电方案。

核心工具

Linux 下有两款工具可以用来协助用户进行功耗控制:PowerTOP 和 TLP。

  • PowerTOP:顾名思义,类似 top,用于监控系统中各个软件与硬件组件的功耗情况,并能生成详情报告与优化建议。即使不使用它来直接进行具体的配置,它本身依然是一个非常优秀的功耗分析工具,可以帮助定位设备上主要的耗电来源。
  • TLP:这是一款功能丰富的命令行工具,能够在无需深入研究技术细节的情况下,轻松延长笔记本电脑的续航时间。TLP 默认针对电池寿命进行了优化,并且开箱即用地实现了 PowerTOP 的推荐配置。因此大部分情况下,只需要安装并启用 TLP 服务,就可以得到不错的省电效果。

基础措施

在启用 TLP 之前,先调整一些离电状态下的基础配置(如屏幕亮度与键盘背光)。这些设置通常已集成在桌面环境的电源管理中,可以立即减少功耗。以 KDE 为例,可在“系统设置 → 电源管理”中,对电池供电时的屏幕亮度与键盘背光进行调节。我自己的设置是将屏幕亮度降低到了 20%,并完全关闭键盘背光。因为我离电场景多是在室内光照环境下,不需要更高的屏幕亮度和键盘背光。

 

另一个容易被忽略的功耗来源是桌面环境的动态组件,例如天气挂件、系统监控以及动态壁纸等。这些组件在离电状态下仍然可能会占用不少的系统资源,从而拖累整体的续航时间。可以根据自身的需求,调整这些组件的运行策略,例如:天气类挂件可以延长数据的刷新间隔,动态壁纸组件也可以设置为电池模式时停止动态特效。这样减少动态组件的活动频率,也可以进一步延长使用电池时的续航。

接下来,就是安装并启用 PowerTOP 和 TLP:

# 安装 PowerTOP(功耗分析工具)
sudo pacman -S powertop

# 安装 TLP(实际的电源管理服务)
sudo pacman -S tlp

# 安装 tlp-rdw(提供根据特定事件启用或禁用蓝牙/Wi-Fi和WWAN设备的功能,需要NetworkManager)
sudo pacman -S tlp-rdw 

# 启用 TLP 服务(可以使用 --now 参数立即启动服务)
sudo systemctl enable tlp.service

# 启用 tlp-rdw 需要的 NetworkManager-dispatcher.service 
sudo systemctl enable NetworkManager-dispatcher.service

# 屏蔽 systemd-rfkill 相关服务避免冲突,确保 TLP 的无线电设备切换选项正常工作
sudo systemctl mask systemd-rfkill.service 
sudo systemctl mask systemd-rfkill.socket

启动 TLP 服务后,可以通过以下命令检查其运行状态:

sudo tlp-stat -s

若一切正常,应该可以看到 TLP 输出的系统信息和 TLP 服务状态。

以上就是一个基本的电源管理配置了。大部分情况下,TLP 提供的默认配置已经足够了。但因为 TLP 本身也是可以进行高度定制化的,所以还可以针对自己设备的情况,进行更深入的设置。

进阶配置

TLP 本身是一个纯命令行的工具,其配置文件路径位于 /etc/tlp.conf,可以通过修改配置文件来修改它的配置。或者也可以使用 TLPUI 之类的图形界面来进行可视化的配置操作,这也是我主要使用的配置方式。

# TLPUI 位于 AUR 仓库中
yay -S tlpui

安装完成后,打开 TLPUI,就可以使用它来更改 TLP 的配置了。

CPU DRIVER OPMODE

TLPUI 的 CPU 选项中的第一个项目是 CPU DRIVER OPMODE,这个项目中配置的是 CPU 的调频驱动。在较新的 AMD CPU(Zen 2 或更新版本)和内核版本中(内核 6.3 或更新),推荐的 CPU 调频驱动是 amd-pstate/amd-pstate-epp,可以通过下面的命令来检查当前 CPU 调频驱动的模式:

cat /sys/devices/system/cpu/amd_pstate/status

如果输出的信息是 active,说明 amd-pstate 驱动已经启用并被设置为了 active,也称 amd-pstate-epp,这是推荐的现代模式。该驱动模式下,低级别控制权会被交给 CPU 硬件本身,硬件可以根据能源性能偏好(Energy Performance Preference,EPP)来优先考虑性能或能效。

如果上面的命令输出了其他结果或者文件并不存在,那么在 6.3 或更新的内核上,可以将 amd_pstate=active 加入到内核启动参数中使其永久生效:

sudo vim /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在引导参数中加入 amd_pstate=active

- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_pstate=active"

保存后,重新生成 GRUB 配置文件并重启:

sudo grub-mkconfig -o /boot/grub/grub.cfg    
sudo reboot

再次执行下面的命令:

cat /sys/devices/system/cpu/amd_pstate/status

此时应该可以看到输出为 active

在 TLP 配置中,也可以手动更改 CPU_DRIVER_OPMODE_ON_AC/BAT 的选项,如需区分插电和离电时的调频驱动模式,那么就可以在这里进行配置,否则只需要在启动参数中统一设置就足够了。

 

这里也结合 TLP 的文档对 guidedpassive 简单进行一下说明:

  • guided:需要 6.4 或更高的内核版本,可以配置最大和最小频率,处理器将在指定范围内自动选择工作频率。基本上可以将 guided 视为强制限定了频率范围的 active 模式。
  • passive:可以结合 Linux 的 CPU 调速器(Governor)使用,也就是 TLP 中的 CPU SCALING GOVERNOR 选项。CPU 将按照调速器的配置决定频率。

还可以通过下面的命令来验证当前 CPU 的调频驱动:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver

如果是 active 模式,那么结果应该是 amd-pstate-eppguidedpassive 模式下,这个命令输出的可能是 amd-pstate 或其他结果(例如文件不存在等)。

CPU SCALING GOVERNOR

这个配置项目用于选择自动频率调节的 CPU 调速器,TLP 的默认设置的插电和离电的调速器都是 powersave。可以通过下面的命令,确认当前驱动模式下可用的调速器:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

amd-pstateactive 模式时,可用的选项有 performancepowersave,当 amd-pstate 处于 guidedpassive 模式时,全部的选项有 conservativeondemanduserspacepowersaveperformanceschedutil 这六个。对这些调速器的更具体说明,可以参考相关的文档

因为我已经激活了 amd-pstate-epp驱动,所以我只有 performancepowersave 这两个选项,并且这两个选项在当前模式下,实际上并不是像真正的调速器那样工作,而是会被转换为 CPU 内部的能源性能偏好提示去进行工作。因此我这里保持了默认的状态,并没有进行设置。

另外需要说明的是,TLP 配置项中明确提到了,如果要配置此项,必须禁用发行版的调速器设置,否则会发生冲突。在 KDE 和 GNOME 桌面环境中,这个发行版的调速器设置通常可能是 power-profiles-daemon 管理的。

可以通过验证服务状态来确认:

# 检查 power-profiles-daemon 服务是否在运行
systemctl status power-profiles-daemon.service

# 如果服务在运行中,可以选择停止并禁用该服务
sudo systemctl stop power-profiles-daemon.service
sudo systemctl disable power-profiles-daemon.service

# 或者屏蔽该服务
sudo systemctl mask power-profiles-daemon.service

CPU ENERGY PERF POLICY

这个配置项目在 amd-pstate-epp 驱动下才是主要控制 CPU 能源消耗的配置项。在大多数情况下,它的可选值有 5 个:performancebalance_performancedefaultbalance_powerpower。这 5 个节能的程度依次加深。

同样的,可以通过命令来确认自己 CPU 可用的 EPP 选项:

cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_available_preferences

我将插电时的 EPP 设置为了 performance,离电时则改为了最节能的 power

TLP 的其他设置

使用电池时关闭睿频:

CPU_BOOST_ON_BAT=0

设置平台(Platform)的整体电源级别:

当前可用的配置值可以使用下面的命令查看:

$ cat /sys/firmware/acpi/platform_profile_choices
low-power balanced performance

我的配置如下:

PLATFORM_PROFILE_ON_AC=performance
PLATFORM_PROFILE_ON_BAT=low-power

还有一些别的配置项目,如硬盘、WIFI 以及 USB 的省电,也可以通过 TLPUI 进行检查。这时候就会发现,TLP 在默认情况下的确已经进行了不少的配置了。所以这些配置项目我也就没有再进行进一步的更改了。

电池

最后的部分是电池本身的护理。电池护理并不会直接降低功耗,但能够减少容量的衰减,延长使用寿命。在 TLPUI 中,这部分的配置位于「ThinkPad 电池」标签,但这个配置并不只适用于 ThinkPad 机型。实际可用的参数取决于笔记本厂商与驱动的支持情况,具体的配置可以参考 TLP 的相关文档

以我的 ThinkBook 为例,属于联想的非 ThinkPad 系列,使用的是 ideapad_laptop 驱动。可以通过 lsmod | grep ideapad_laptop 命令来确认,如果看到该模块已加载,就可以进行对应的电池阈值配置:

START_CHARGE_THRESH_BAT0=0  # dummy value
STOP_CHARGE_THRESH_BAT0=1

这样电池的最大充电量就会被限制在 80%,减少高电量长期保持带来的电池老化。

但是,如果让电脑始终保持在 80% 的电量,难道不就是平白无故地损失了 20% 的容量吗?这里其实可以区分不同的使用场景:

  • 日常插电为主时:保持 80% 的上限,延长电池寿命。
  • 临时需要外出时:可以通过命令 tlp fullcharge 临时将电源充满,达到最长的续航效果。

另一个配置项,RESTORE_THRESHOLDS_ON_BAT 就是结合这种情况使用的。当使用 tlp fullcharge 将电池充满后,TLP 的阈值限制会在下一次开机后才恢复。启用这个配置项,可以在电脑切换回插电状态后,自动恢复用来的充电阈值。这样就能兼顾长期的电池寿命和临时的续航需求。

最终结果

完成以上的配置后,我再次在离电状况下启动了 PowerTOP 观察自己笔记本的功耗表现,发现设备的整体功耗已经被限制在了 8~10 w 左右(网页浏览和笔记记录等轻度工作)。这个功耗结合 85 Wh 的电池,已经足够给我带来 8 小时左右的续航了。

> 关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀