【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程

Ubuntu 26.04 笔记本功耗排查记录

设备:ThinkPad X1 Extreme Gen 5(i7-12700H + RTX 3060)

系统:Ubuntu 26.04

日期:2026-05-31

耗电情况:1小时电量告罄。

文章目录


一、起因

想看看系统里什么东西在耗电,方便优化。

之前跑了 Powertop,它给了一个报告,里面有占比(%),比如:

进程 占比
intel_atomic_commit_work 40.2%
Firefox 10.0%
i915_gem_free_work 8.0%

但问题是:占比不等于功耗。40% 是什么意思?是 4W 还是 40W?看不出来。

所以决定用其他方法获取真实瓦数。


二、测量过程

第一步:尝试 Powertop

bash 复制代码
sudo powertop --time=5

结果:只给占比,不给瓦数。放弃。

第二步:尝试 NVIDIA 驱动

bash 复制代码
nvidia-smi --query-gpu=power.draw --format=csv

结果:9.43 W,独显基本空闲。这个能用。

第三步:尝试 RAPL(Intel 内置功耗测量)

bash 复制代码
sudo cat /sys/class/powercap/intel-rapl:0/energy_uj   # CPU 整包

结果:只能读到累计能量(微焦耳),不是直接的瓦数。

需要自己算:两次读数相减 ÷ 时间间隔 = 功耗(W)

第四步:写采样脚本

bash 复制代码
#!/bin/bash
E0=$(sudo cat /sys/class/powercap/intel-rapl:0/energy_uj)
E0c=$(sudo cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
E0u=$(sudo cat /sys/class/powercap/intel-rapl:0:1/energy_uj)
E0g=$(sudo cat /sys/class/powercap/intel-rapl:1/energy_uj)
T0=$(date +%s%N)
sleep 3
E1=$(sudo cat /sys/class/powercap/intel-rapl:0/energy_uj)
E1c=$(sudo cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
E1u=$(sudo cat /sys/class/powercap/intel-rapl:0:1/energy_uj)
E1g=$(sudo cat /sys/class/powercap/intel-rapl:1/energy_uj)
T1=$(date +%s%N)
DT=$(( (T1-T0)/1000000 ))

calc() {
    local d=$(($2 - $1))
    [ $d -lt 0 ] && 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 集显

bash 复制代码
sudo prime-select intel

第二步:停止并禁用 nvidia 持久化守护进程

bash 复制代码
sudo systemctl stop nvidia-persistenced
sudo systemctl disable nvidia-persistenced

第三步:重启生效

bash 复制代码
sudo reboot

验证:

bash 复制代码
prime-select query
# 应该输出: intel

nvidia-smi
# 应该报错:找不到 GPU = 关成功了

解决方法二:Runtime PM 自动休眠(不重启)

如果不想重启,可以让系统自动管理独显电源:

查看独显状态:

bash 复制代码
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 模式:

bash 复制代码
echo "auto" | sudo tee /sys/bus/pci/devices/0000:01:00.0/power/control

TLP 已配置自动管理:

bash 复制代码
grep RUNTIME_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 才能知道真实数字。


六、以后怎么快速查看功耗

bash 复制代码
# 方法一:看累计能量(微焦耳),自己算
sudo cat /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 驱动没加载

bash 复制代码
nvidia-smi
# 报错:couldn't communicate with the NVIDIA driver

原因: 刚重启时驱动还没加载完,或者系统用了 nouveau 驱动。

解决: 等一会儿,或者检查驱动:

bash 复制代码
lsmod | grep nvidia
cat /proc/driver/nvidia/version

问题 3:RAPL 能量值溢出

energy_uj 最大约 268435456000(268kJ),超过会归零。

解决: 脚本里加了溢出处理:

bash 复制代码
local d=$(($2 - $1))
[ $d -lt 0 ] && d=$(( d + 268435456000 ))

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/161573293。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

相关推荐
一叶星殇1 小时前
日志成海,何以检索:Serilog 解锁 .NET 日志可查询新范式
运维·服务器
企服AI产品测评局1 小时前
AI Agent实测:Agent Store现成应用如何重塑企业自动化?
运维·人工智能·ai·chatgpt·自动化
上海云盾安全满满1 小时前
服务器不稳定,丢包有哪些原因?
运维·服务器
陳10301 小时前
Linux:信号
linux·运维·服务器
tongluowan0071 小时前
负载均衡之硬件与软件层面的异同
运维·nginx·负载均衡·f5
承渊政道1 小时前
【MySQL数据库学习】(MySQL数据类型)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统
小此方1 小时前
Re:Linux系统篇(二十五)进程篇·十:深度硬核!Linux 进程等待,从 task_struct 源码到位图状态解构
linux·运维·驱动开发
会Tk矩阵群控的小木2 小时前
企业级iMessage群发系统实战:单主机管控多iPhone设备完整实现
运维·ios·开源软件·个人开发
z202305082 小时前
RDMA之DCQCN (14)
linux·服务器·网络·人工智能·ai