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 的文档对 guided
和 passive
简单进行一下说明:
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-epp
。guided
或 passive
模式下,这个命令输出的可能是 amd-pstate
或其他结果(例如文件不存在等)。
CPU SCALING GOVERNOR
这个配置项目用于选择自动频率调节的 CPU 调速器,TLP 的默认设置的插电和离电的调速器都是 powersave
。可以通过下面的命令,确认当前驱动模式下可用的调速器:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
当 amd-pstate
为 active
模式时,可用的选项有 performance
和 powersave
,当 amd-pstate
处于 guided
或 passive
模式时,全部的选项有 conservative
、ondemand
、userspace
、powersave
、 performance
和 schedutil
这六个。对这些调速器的更具体说明,可以参考相关的文档。
因为我已经激活了 amd-pstate-epp
驱动,所以我只有 performance
和 powersave
这两个选项,并且这两个选项在当前模式下,实际上并不是像真正的调速器那样工作,而是会被转换为 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 个:performance
,balance_performance
,default
、balance_power
和 power
。这 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 小时左右的续航了。
> 关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀