4. Jetson功耗测量方法与工具

在Jetson平台上做低功耗与热管理,第一步不是改配置,而是把“功耗到底是多少、花在哪里”测准。Jetson的功耗来源分散在多个电源轨上:CPU/GPU核心轨(VDD_CPU_GPU_CV)、SoC辅助轨(VDD_SOC)、内存轨(VDDQ_VDD2_1V8AO)、以及各类I/O与外围轨。整机输入功率(如5V DC-IN或电池)与各轨功率之和并不相等,因为存在DC-DC转换损耗。因此,工程上通常同时关注两类数据:板级输入功率(用于评估续航与散热总负荷)和分轨功率(用于定位是哪一部分在耗电)。

测量手段分为硬件与软件两条路径。硬件路径依赖电流/功率监测芯片,典型代表是TI的INA3221与INA226;软件路径依赖SoC内部或板载PMIC的功率估算寄存器,通过tegrastats、jetson-stats等工具读取。两者各有适用场景,理解其原理与误差来源,才能判断数据是否可信。

INA3221与INA226:硬件电流/功率监测芯片

INA3221是三通道双向电流/电压监测芯片,每通道可测一路分流电阻上的压差(Vsense)与总线电压(Vbus),内部16位ADC,通过I²C输出。它常被用在Jetson载板上监测多路电源轨。INA226是单通道版本,精度更高(16位ΔΣ ADC),支持可编程转换时间与平均次数,适合对单路关键轨做精细测量。

两者的核心计算关系一致:

I = Vsense / Rshunt
P = Vbus × I
Vsense = (ShuntVoltageRegister × LSB)   // INA226 LSB = 2.5 µV
Vbus   = (BusVoltageRegister   × LSB)   // INA226 LSB = 1.25 mV

分流电阻Rshunt的取值是精度与损耗的折中。以INA226监测一路3.3V、最大2A的轨为例:若取Rshunt=10 mΩ,满量程Vsense=20 mV,对应INA226的±81.92 mV量程有充足余量,满量程功耗损耗仅I²R=0.04 W,可接受;若取100 mΩ,损耗升至0.4 W,且压降0.2V可能影响负载工作。因此工程上常取5~20 mΩ,并用INA226的校准寄存器把电流LSB设为合适值:

CAL = 0.00512 / (Current_LSB × Rshunt)
例:Current_LSB = 1 mA,Rshunt = 10 mΩ
CAL = 0.00512 / (0.001 × 0.01) = 512

读取时需注意:Vsense有符号,充电/放电方向由符号区分;Vbus量程要覆盖被测轨电压;转换时间与平均次数影响噪声与响应速度,测瞬态功耗时不宜设过长的平均。

tegrastats与jetson-stats:软件功耗采集

tegrastats是Jetson自带的实时监控工具,直接读取SoC内部功率估算与各模块状态。典型用法:

sudo tegrastats --interval 1000
# 输出示例(节选):
# RAM 1456/7854MB ... CPU [12%@1900,8%@1900] ... 
# VDD_IN 4520mW/4520mW VDD_CPU_GPU_CV 1200mW/1200mW VDD_SOC 980mW/980mW

其中VDD_IN是整机输入功率估算,VDD_CPU_GPU_CV、VDD_SOC等是分轨功率。注意这些数值来自PMIC的电流/电压采样与固件估算,并非高精度仪表读数,适合趋势观察与相对比较,不适合作为绝对功耗的最终依据。间隔参数决定采样频率,测峰值功耗时可用--interval 100,但会增加CPU开销。

jetson-stats(jtop)在tegrastats基础上提供更友好的交互界面与历史曲线,可查看各轨功率、温度、频率、风扇转速,并支持日志导出。安装与使用:

sudo pip install -U jetson-stats
sudo systemctl restart jetson_stats.service
jtop

jtop的功率页面会显示VDD_IN、VDD_CPU_GPU_CV、VDD_SOC等轨的实时值与曲线,适合在跑负载时观察功耗随频率、温度的变化。它同样基于板载传感器,精度受限于硬件采样链路。

测量链路与数据判读

下图给出从电源轨到数据读出的完整测量链路,以及硬件与软件两条路径的关系。理解这条链路,有助于判断“读到的功率”究竟经过了哪些环节、误差可能来自哪里。

DC-IN / 电池 5V 或 12V 输入 Rshunt 分流电阻 5~20 mΩ INA3221 / INA226 16位 ADC · I²C Vsense / Vbus 寄存器 PMIC / SoC 内部采样 功率估算寄存器 VDD_IN / 分轨功率 硬件读取 i2cget / 自研脚本 计算 I、P 软件工具 tegrastats / jtop 实时曲线与日志 数据判读要点 • 硬件路径:精度高,需校准 Rshunt 与 CAL,注意 Vsense 符号与量程 • 软件路径:趋势可靠,绝对值受 PMIC 估算误差影响,适合相对比较 • 整机功率 ≠ 各轨功率之和,差值来自 DC-DC 转换损耗 • 测峰值用短间隔,测均值用长间隔;同步记录温度与频率

实操建议与常见误差

若目标是评估整机续航或散热设计,优先用INA226/INA3221在DC-IN处做硬件测量,配合高精度分流电阻与校准;若目标是快速定位“哪个模块在耗电”,用jtop观察分轨功率曲线即可。两者结合最有效:硬件测总输入,软件看分轨分布。

常见误差来源包括:分流电阻温漂(选低温漂型号,如50 ppm/℃)、I²C读取时序错误导致寄存器值错位、Vbus量程设置不当造成溢出、以及软件工具采样间隔与负载变化不同步。建议在正式测量前,用已知负载(如功率电阻)做一次比对校验,确认读数偏差在可接受范围内。

提示:tegrastats与jtop的功率值来自板载PMIC估算,不同JetPack版本、不同载板可能差异较大。做跨设备对比时,应固定软件版本与采样间隔,并记录环境温度。
注意:直接修改INA3221/INA226的校准寄存器前,务必确认分流电阻实际阻值与电路连接,错误的CAL值会导致电流读数成比例偏差,且不易察觉。