3、环境准备:操作系统要求、硬件设备准备、驱动与依赖安装

好了,咱们正式开始动手之前,得先把“家伙事儿”备齐。做功耗测试最怕什么?最怕你折腾半天,最后发现是环境没搭对,数据全是废的。我早年就吃过这个亏,所以今天这部分,咱们一步到位。

3.1 操作系统要求

先说系统。我个人习惯用 Ubuntu 20.04 LTS22.04 LTS。为什么?因为大部分功耗分析工具(比如 PowerTop、perf、RAPL 相关的库)对 Ubuntu 的支持最好,驱动也最全。

如果你用 Windows,也不是不行,但会绕很多弯路。比如你要用 Intel PCM(Power Counter Monitor),Windows 下得装一堆额外的 SDK。说白了,Linux 是功耗测试的“主场”。

核心要求:

  • 内核版本 ≥ 5.4(建议 5.15+)—— 老内核不支持最新的 RAPL 接口
  • 必须开启 CONFIG_PMCONFIG_ACPICONFIG_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 抓取第一份功耗报告,到时候见。