1、功耗基础概念:Android系统功耗的物理基础、功耗单位与测量方法、功耗与性能的权衡关系

1.1 功耗的物理基础——能量不会凭空消失

做功耗优化,首先得明白电到底消耗在哪了。说白了,手机里的电流最终都转化成了热量。你想想看,手机打游戏发烫,那就是功耗在“现形”。

从物理层面讲,芯片功耗主要分两块:

  • 动态功耗:电路翻转时产生的功耗。频率越高、电压越高、翻转越频繁,功耗就越大。公式是 P = C × V² × f。C是负载电容,V是电压,f是频率。
  • 静态功耗:晶体管关断时漏掉的电流。工艺越先进(比如7nm、5nm),漏电越严重。手机待机时掉电快,很多时候就是静态功耗在作祟。

核心认知:动态功耗和电压的平方成正比。这意味着,降压比降频更划算。我在项目中遇到过,把CPU电压降50mV,功耗能降10%以上,而性能几乎没损失。

嗯,这里要注意。动态功耗和静态功耗不是孤立的。芯片温度升高,静态漏电会指数级增长。所以散热不好,功耗会越来越恶化。这就是所谓的“热 runaway”现象。

1.2 功耗单位与测量方法——你得知道怎么“称重”

功耗的单位很简单:瓦特(W)。但手机里常用的是毫瓦(mW)和微瓦(μW)。

单位 换算关系 典型场景
1 W 1000 mW 游戏场景、充电
1 mW 1000 μW 屏幕亮屏、WiFi连接
1 μW 0.001 mW 待机漏电、传感器

测量方法,我习惯分三种:

  1. 硬件级测量:用精密电源(如Agilent N6705B)直接给手机供电。精度高,能到μA级别。适合做整机功耗基线。
  2. 软件级测量:用adb命令读电池电流。比如 adb shell dumpsys battery。精度一般,但方便快捷。
  3. 芯片内部测量:高通、MTK平台都有内部的PMU(电源管理单元)寄存器。可以读到CPU、GPU、DDR等模块的实时功耗。

我的习惯:先用硬件测量定基线,再用软件测量做日常监控。遇到异常,再用芯片内部测量定位具体模块。三步走,效率最高。

我曾经踩过一个坑。用软件读电流时,发现待机功耗异常高。查了半天,原来是某个后台服务在轮询GPS。软件读数显示的是“平均电流”,但实际是脉冲式的。后来用示波器抓波形才真相大白。所以,软件读数只能做参考,不能全信

1.3 功耗与性能的权衡——鱼和熊掌怎么兼得?

功耗和性能,天生就是一对冤家。你想跑得快,就得给芯片多喂电。但电喂多了,发热、续航崩。怎么平衡?

我总结了一个“黄金三角”:

  • 性能:用户感知到的流畅度、响应速度
  • 功耗:电池续航、发热
  • 温度:芯片结温、外壳温度

这三者互相制约。性能高了,功耗涨,温度升。温度高了,芯片降频,性能反而掉。这就是典型的“热节流”。

避坑指南:我曾经优化一个游戏场景,把CPU频率拉满,帧率确实上去了。但玩了10分钟,手机烫到拿不住,系统强制降频,帧率直接腰斩。用户反馈更差了。后来我学乖了,先定温度阈值,再调频率。宁可帧率稳在55fps,也不要冲60fps然后掉到30fps。

具体怎么权衡?我建议用“能效比”来衡量。能效比 = 性能 / 功耗。比如:

频率 性能(帧率) 功耗(W) 能效比
1.8 GHz 55 fps 3.5 W 15.7
2.0 GHz 60 fps 4.8 W 12.5
2.2 GHz 62 fps 6.2 W 10.0

你看,1.8 GHz的能效比最高。虽然帧率不是最高,但每瓦特带来的性能提升最大。这就是“甜点频率”。

为什么会这样?因为频率越高,电压也得跟着涨。而功耗和电压是平方关系。所以高频段的功耗增长是指数级的,性能增长却是线性的。说白了,跑在甜点频率上,才是真正的“聪明”优化

总结一句话:功耗优化的本质,不是一味省电,而是找到性能和功耗的平衡点。让用户感觉“流畅又不烫”,这才是高手。

嗯,这一章先讲到这里。下一章我们聊聊Android系统的功耗架构,看看电到底是怎么从电池流到各个模块的。