3、环境准备:操作系统要求、硬件设备准备、驱动与依赖安装
好了,咱们正式开始动手之前,得先把“家伙事儿”备齐。做功耗测试最怕什么?最怕你折腾半天,最后发现是环境没搭对,数据全是废的。我早年就吃过这个亏,所以今天这部分,咱们一步到位。
3.1 操作系统要求
先说系统。我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为大部分功耗分析工具(比如 PowerTop、perf、RAPL 相关的库)对 Ubuntu 的支持最好,驱动也最全。
如果你用 Windows,也不是不行,但会绕很多弯路。比如你要用 Intel PCM(Power Counter Monitor),Windows 下得装一堆额外的 SDK。说白了,Linux 是功耗测试的“主场”。
核心要求:
- 内核版本 ≥ 5.4(建议 5.15+)—— 老内核不支持最新的 RAPL 接口
- 必须开启
CONFIG_PM、CONFIG_ACPI、CONFIG_INTEL_RAPL等内核选项 - 建议使用 Server 版或 Desktop 版均可,但 Desktop 版记得关掉图形界面的自动休眠
嗯,这里要注意:如果你用的是虚拟机,那功耗数据基本没法看。虚拟化层会把真实的功耗信息屏蔽掉。我建议直接用物理机,或者至少是带透传功能的专用测试机。
3.2 硬件设备准备
硬件这块,我把它分成“必须的”和“推荐的”两类。
3.2.1 必须的硬件
- 被测设备(DUT):比如一台笔记本、一块开发板、或者一台服务器。确保它的 BIOS 里开启了所有 C-State 和 P-State 相关的选项。
- 稳定的电源:别用电池供电做测试,电压波动会影响结果。我遇到过用电池测出来的数据忽高忽低,查了半天才发现是电池电量在变化。
- 串口或 SSH 连接:方便远程监控,避免显示器本身带来的额外功耗。
3.2.2 推荐的硬件
| 设备 | 用途 | 备注 |
|---|---|---|
| 功率计(如 WT310、Yokogawa) | 测量整机功耗 | 精度 0.1W 以上,采样率 10Hz 以上 |
| 电流探头 + 示波器 | 测量单板或芯片级功耗 | 适合嵌入式场景 |
| USB 转 I2C/SPI 工具 | 读取 PMIC 寄存器 | 比如 Total Phase Aardvark |
你想想看,如果没有功率计,只靠软件读 RAPL,数据其实是个估算值。但如果你有硬件功率计,那就能做交叉验证。我个人习惯是:先用软件跑一轮,再用硬件抓一轮,两者偏差在 5% 以内才算可信。
3.3 驱动与依赖安装
这部分最容易出问题。我按步骤来,你跟着走就行。
3.3.1 更新系统与内核
sudo apt update && sudo apt upgrade -y
sudo apt install linux-generic-hwe-20.04 # 如果内核太老
sudo reboot
为什么要更新内核?因为 RAPL 接口在 5.4 之后才稳定。我之前在一台老服务器上装工具,死活读不到功耗数据,最后发现是内核版本 4.15,根本不支持。
3.3.2 安装基础依赖
sudo apt install -y build-essential git curl wget
sudo apt install -y python3 python3-pip python3-dev
sudo apt install -y libpci-dev libncurses-dev libelf-dev
这些是编译工具链的基础。说白了,后面很多工具都需要从源码编译,缺了这些库会报各种奇怪的错。
3.3.3 安装功耗相关工具
这里我列一个清单,你直接复制粘贴跑就行:
# PowerTop —— 最常用的功耗分析工具
sudo apt install -y powertop
# turbostat —— 查看 CPU 频率、C-State、功耗
sudo apt install -y linux-tools-common linux-tools-$(uname -r)
# perf —— 性能计数器,也能读功耗
sudo apt install -y linux-tools-$(uname -r) linux-cloud-tools-$(uname -r)
# RAPL 命令行工具
sudo apt install -y rapl-read # 或者从源码编译
# Intel PCM(Power Counter Manager)
git clone https://github.com/opcm/pcm.git
cd pcm
make
sudo make install
小技巧:安装完 PowerTop 后,先跑一次 sudo powertop --calibrate。这个校准过程大概需要 20 分钟,它会帮你识别出所有设备的功耗模型。我每次换测试机都会跑一遍,别偷懒。
3.3.4 配置权限与内核模块
很多功耗工具需要 root 权限,或者需要加载特定内核模块。我建议这样配置:
# 加载 msr 模块(很多工具依赖它)
sudo modprobe msr
# 让模块开机自动加载
echo "msr" | sudo tee -a /etc/modules
# 给当前用户添加权限(避免每次 sudo)
sudo usermod -aG power $USER
我曾经遇到过一个问题:明明装了 PowerTop,但运行时报错说无法访问 MSR 寄存器。查了半天,发现是内核模块没加载。嗯,这种坑踩过一次就记住了。
3.3.5 验证安装是否成功
跑一个简单的命令,看看能不能读到数据:
sudo powertop --dump | head -20
sudo turbostat --quiet --show PkgWatt,CorWatt,GFXWatt sleep 5
如果能看到类似这样的输出,说明环境基本就绪了:
PkgWatt CorWatt GFXWatt
15.23 12.10 0.85
15.10 11.98 0.82
警告:如果输出全是 0 或者报错 No RAPL support,说明你的 CPU 太老(比如 Intel 2代以前),或者 BIOS 里没开启 RAPL。这时候别硬撑,换个设备吧。
3.4 避坑指南
最后,我总结几个常见的坑,你遇到了可以少走弯路:
- 不要用 Docker 容器做功耗测试 —— 容器共享宿主机内核,但很多功耗接口被隔离了。我试过在容器里跑 PowerTop,结果全是 0。
- 关闭所有省电策略 —— 比如笔记本的合盖休眠、屏幕自动关闭。这些会影响测试的一致性。
- 固定 CPU 频率 —— 测试前用
cpupower frequency-set -g performance锁定频率,否则频率波动会让数据很难看。 - 记录环境温度 —— 温度会影响漏电流,进而影响功耗。我一般会在测试报告里加上一句“室温 25°C ± 1°C”。
好了,环境准备就到这里。你把这些搞定,后面咱们就能直接上手跑测试了。下一章我会讲怎么用 PowerTop 抓取第一份功耗报告,到时候见。