【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
Ubuntu 26.04 笔记本功耗排查记录
设备:ThinkPad X1 Extreme Gen 5(i7-12700H + RTX 3060)
系统:Ubuntu 26.04
日期:2026-05-31
耗电情况:1小时电量告罄。
文章目录
- Ubuntu 26.04 笔记本功耗排查记录
- 一、起因
- 二、测量过程
- 第一步:尝试 Powertop
- 第二步:尝试 NVIDIA 驱动
- 第三步:尝试 RAPL(Intel 内置功耗测量)
- 第四步:写采样脚本
- 三、关闭 NVIDIA 独显(关键步骤)
- 问题:独显一直在耗电
- 解决方法一:切换到纯集显模式(推荐)
- 解决方法二:Runtime PM 自动休眠(不重启)
- 实际效果
- 四、测量结果
- 重启前(系统运行一段时间,空闲状态)
- 重启后(刚开机,系统服务启动中)
- 为什么重启后反而更高?
- 五、结论
- 34W 正常吗?
- Powertop 的占比有什么用?
- 六、以后怎么快速查看功耗
- 七、过程中遇到的问题
- 问题 1:Powertop 只给占比不给瓦数
- 问题 2:重启后 NVIDIA 驱动没加载
- 问题 3:RAPL 能量值溢出
一、起因
想看看系统里什么东西在耗电,方便优化。
之前跑了 Powertop,它给了一个报告,里面有占比(%),比如:
| 进程 | 占比 |
|---|---|
| intel_atomic_commit_work | 40.2% |
| Firefox | 10.0% |
| i915_gem_free_work | 8.0% |
但问题是:占比不等于功耗。40% 是什么意思?是 4W 还是 40W?看不出来。
所以决定用其他方法获取真实瓦数。
二、测量过程
第一步:尝试 Powertop
sudopowertop--time=5结果:只给占比,不给瓦数。放弃。
第二步:尝试 NVIDIA 驱动
nvidia-smi --query-gpu=power.draw--format=csv结果:9.43 W,独显基本空闲。这个能用。
第三步:尝试 RAPL(Intel 内置功耗测量)
sudocat/sys/class/powercap/intel-rapl:0/energy_uj# CPU 整包结果:只能读到累计能量(微焦耳),不是直接的瓦数。
需要自己算:两次读数相减 ÷ 时间间隔 = 功耗(W)
第四步:写采样脚本
#!/bin/bashE0=$(sudocat/sys/class/powercap/intel-rapl:0/energy_uj)E0c=$(sudocat/sys/class/powercap/intel-rapl:0:0/energy_uj)E0u=$(sudocat/sys/class/powercap/intel-rapl:0:1/energy_uj)E0g=$(sudocat/sys/class/powercap/intel-rapl:1/energy_uj)T0=$(date+%s%N)sleep3E1=$(sudocat/sys/class/powercap/intel-rapl:0/energy_uj)E1c=$(sudocat/sys/class/powercap/intel-rapl:0:0/energy_uj)E1u=$(sudocat/sys/class/powercap/intel-rapl:0:1/energy_uj)E1g=$(sudocat/sys/class/powercap/intel-rapl:1/energy_uj)T1=$(date+%s%N)DT=$(((T1-T0)/1000000))calc(){locald=$(($2-$1))[$d-lt0]&&d=$((d+268435456000))echo"scale=1;$d/$DT/ 1000"|bc}echo"CPU 总包:$(calc $E0 $E1)W"echo"CPU 核心:$(calc $E0c $E1c)W"echo"CPU 集显:$(calc $E0u $E1u)W"echo"独显/其他:$(calc $E0g $E1g)W"三、关闭 NVIDIA 独显(关键步骤)
问题:独显一直在耗电
重启前测量发现,即使没有运行 3D 程序,NVIDIA RTX 3060 也在耗电(~9W)。
解决方法一:切换到纯集显模式(推荐)
第一步:切换到 Intel 集显
sudoprime-select intel第二步:停止并禁用 nvidia 持久化守护进程
sudosystemctl stop nvidia-persistencedsudosystemctl disable nvidia-persistenced第三步:重启生效
sudoreboot验证:
prime-select query# 应该输出: intelnvidia-smi# 应该报错:找不到 GPU = 关成功了解决方法二:Runtime PM 自动休眠(不重启)
如果不想重启,可以让系统自动管理独显电源:
查看独显状态:
cat/sys/bus/pci/devices/0000:01:00.0/power/runtime_status# suspended = 已休眠 ✓# active = 没休眠,要处理cat/sys/bus/pci/devices/0000:01:00.0/power/control# auto = 自动管理 ✓# on = 一直开着,要改成 auto手动切换为 auto 模式:
echo"auto"|sudotee/sys/bus/pci/devices/0000:01:00.0/power/controlTLP 已配置自动管理:
grepRUNTIME_PM /etc/tlp.conf# RUNTIME_PM_ON_AC=auto# RUNTIME_PM_ON_BAT=auto实际效果
- 方法一(prime-select):重启后独显完全关闭,节省约 9W 功耗
- 方法二(Runtime PM):独显空闲时自动休眠,节省约 9W 功耗
四、测量结果
重启前(系统运行一段时间,空闲状态)
| 组件 | 功耗 |
|---|---|
| CPU 整包 | ~10 W |
| NVIDIA RTX 3060 | ~9 W |
| 合计 | ~20 W |
重启后(刚开机,系统服务启动中)
| 组件 | 功耗 |
|---|---|
| CPU 核心 | 8.7 W |
| Intel 集显 | 25.4 W |
| NVIDIA RTX 3060 | 已休眠(不耗电) |
| 合计 | ~34 W |
为什么重启后反而更高?
刚重启时,系统服务还在启动(load average: 1.63),CPU 和集显都在干活。等几分钟系统稳定后,功耗会降下来。
五、结论
34W 正常吗?
正常。对比一下:
| 设备 | CPU+GPU 功耗 |
|---|---|
| MacBook Air M2 待机 | 2-3W |
| Intel N100 小主机 | 5-8W |
| 你的 i7-12700H | ~34W |
| 游戏本满载 | 80-150W |
i7-12700H 有 14 核 20 线程,光集显驱动屏幕就要 ~25W。这个配置天生比低功耗设备高,不是坏了。
Powertop 的占比有什么用?
占比能告诉你哪个组件相对最耗电,但不能告诉你绝对功耗是多少。
比如 Powertop 说 GPU 占 40%,你不知道是 4W 还是 40W。用 RAPL 才能知道真实数字。
六、以后怎么快速查看功耗
# 方法一:看累计能量(微焦耳),自己算sudocat/sys/class/powercap/intel-rapl:0/energy_uj# 方法二:看温度(间接判断)sensors# 方法三:看 NVIDIA 独显功耗(如果有)nvidia-smi --query-gpu=power.draw--format=csv# 方法四:看系统负载(判断是否在忙)uptime如果想知道具体瓦数,用上面的 RAPL 脚本跑一下就行。
七、过程中遇到的问题
问题 1:Powertop 只给占比不给瓦数
解决:用 RAPL 接口读取累计能量,自己算功耗。
问题 2:重启后 NVIDIA 驱动没加载
nvidia-smi# 报错:couldn't communicate with the NVIDIA driver原因:刚重启时驱动还没加载完,或者系统用了 nouveau 驱动。
解决:等一会儿,或者检查驱动:
lsmod|grepnvidiacat/proc/driver/nvidia/version问题 3:RAPL 能量值溢出
energy_uj 最大约 268435456000(268kJ),超过会归零。
解决:脚本里加了溢出处理:
locald=$(($2-$1))[$d-lt0]&&d=$((d+268435456000))本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/161573293。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
