4. 功耗测量与性能评估方法
在低功耗设备上做密码性能优化,第一步不是改代码,而是建立可信的测量与评估体系。如果测量口径不统一,优化就无从判断:同一段 AES-GCM 加密代码,用万用表读平均电流、用示波器抓瞬时脉冲、用软件计数器估算 CPU 周期,得到的“能耗”可能相差数倍。本节围绕四个相互衔接的环节展开:测量工具、基准测试、能耗模型与指标定义,目标是让读者能搭出一套可复现、可比较的评估链路。
一、测量工具:从宏观平均到微观瞬时
低功耗密码设备的功耗测量通常分三个层次。第一层是平均电流法,用高精度源表(如 Keithley 2400 类)或带电流档的万用表,在设备稳定运行一段密码运算时读取平均电流 I_avg,再乘以供电电压 V 和运行时间 t,得到能量 E = V·I_avg·t。它适合评估长时间批量加密的整体能效,但会掩盖瞬时峰值。
第二层是示波器 + 采样电阻法,这是分析密码运算瞬时功耗的主力手段。典型接法是在设备供电回路中串入一个 1 Ω~10 Ω 的精密采样电阻 R_s,用差分探头或普通探头测量 R_s 两端压降 V_s,则瞬时电流 i(t) = V_s(t)/R_s。示波器以 100 MSa/s~1 GSa/s 采样,可分辨 AES 单轮约几十到几百纳秒的功耗波动。需要注意探头带宽、采样电阻引入的压降(10 Ω × 20 mA = 0.2 V,可能影响设备工作)以及去耦电容对高频分量的滤除。
第三层是片上功耗传感器与软件计数器。部分 MCU/SoC 提供内部电流或电压监测通道,可直接读取;软件侧则常用 DWT 周期计数器、PMU 事件计数(如 Cortex-M 的 CYCCNT、指令数、Cache 缺失数)来估算运算开销。软件计数不直接给出焦耳,但能低成本地反映算法复杂度差异,适合快速迭代。
二、基准测试:让不同实现可比
基准测试的核心是固定输入、固定环境、固定统计口径。以 AES-128-GCM 加密 1 KB 数据为例,一个可复现的基准流程如下:
- 固定供电电压 V = 3.3 V,环境温度 25 ℃,关闭无关外设与无线模块。
- 预热设备 30 s,使电源和时钟进入稳定状态。
- 连续执行 1000 次“加密 1 KB + 认证”操作,用示波器记录整段电流波形,采样率 200 MSa/s。
- 对波形做时间对齐,截取每次运算的窗口,计算单次能量 E_i = V·∫i(t)dt。
- 统计 E 的中位数、均值、标准差,并记录最大瞬时电流 I_peak。
基准测试要避免三类常见偏差:一是缓存与预取偏差,第一次运行往往更慢,应丢弃前若干次;二是温度漂移,长时间连续测试会使芯片升温,漏电流上升;三是数据依赖偏差,AES 的 S 盒查表访问模式会随密钥和数据变化,应使用多组随机明文/密钥取平均,而不是只测一组。
三、能耗模型:把测量结果变成可预测的量
能耗模型的作用是把“测出来的数”转化为“能推算的公式”,从而在未上板时预估优化收益。低功耗密码运算常用分段线性模型:
E_total = E_cpu + E_mem + E_io + E_leak
E_cpu = P_cpu_active × t_compute
E_mem = N_access × E_per_access
E_io = N_transfer × E_per_byte
E_leak = V × I_leak × t_total
其中 P_cpu_active 是 CPU 活跃功耗,可由“活跃电流 × 电压”测得;N_access 是内存访问次数,E_per_access 是单次访问能量,可从数据手册或实测标定;E_leak 是静态漏电能量,在长时间待机场景中不可忽略。举例来说,若某 MCU 活跃电流 8 mA、电压 3.3 V,AES-128 加密 1 KB 耗时 2 ms,则 E_cpu ≈ 3.3 V × 8 mA × 2 ms = 52.8 μJ;若期间发生 4096 次 Flash 访问,每次约 0.5 nJ,则 E_mem ≈ 2.05 μJ。两者相加可初步判断计算与存储谁占主导。上述数值为教学示例,实际应以实测标定为准。
四、指标定义:统一口径才能比较
评估低功耗密码性能,至少需要四类指标:
| 指标 | 定义 | 典型单位 | 适用场景 |
|---|---|---|---|
| 单次运算能量 E_op | 完成一次加密/签名/验签的总能量 | μJ | 单包通信、事件触发 |
| 能效比 η | 每比特数据消耗的能量,η = E_op / 数据比特数 | nJ/bit | 批量数据传输 |
| 峰值电流 I_peak | 运算期间最大瞬时电流 | mA | 电池内阻、电源设计 |
| 平均功耗 P_avg | 长时间窗口内平均功率 | mW | 续航估算 |
指标之间会相互制约。例如提高时钟频率可缩短 t_compute,降低 E_cpu,但会抬高 I_peak 和 P_avg;降低频率则相反。因此优化目标必须明确:是延长电池寿命(看 P_avg 与 E_op),还是满足瞬时电流上限(看 I_peak),还是提高吞吐能效(看 η)。
把上述四步串起来,就形成一条完整的评估链路:用示波器与采样电阻获取 i(t),在固定条件下跑基准测试得到 E_op 与 I_peak,用能耗模型把 E_op 拆解到 CPU、存储、IO 和漏电各分项,最后用统一指标表达优化前后的差异。只有这条链路稳定,后续的算法裁剪、查表优化、硬件加速器替换才有可靠的比较基准。