泰晓科技 -- 聚焦嵌入式 Linux - 追本溯源,见微知著!
网站地址:http://tinylab.org
微信公众号关注我们新浪微博


扫一扫

关注 @泰晓科技
赞助泰晓原创 ○ 在线实验Linux ○ 下载开源书籍
请稍侯

智能手机功耗问题初探

Wu Zhangjin 创作于 2014/05/14

by falcon of TinyLab.org 2014/05/14

啥是功耗问题

从用户的角度来说,功耗问题可以表述为:智能手机用着用着就没电了,没电以后手机就没法用了,电话都没法打,很蛋疼,而且基本都得一天一充,充的时候还得等,如果边充边用,还会发热。

功耗问题严重影响用户体验,它的后果跟死机一样糟糕,甚至更糟:死机了几十秒就可以重启,但是没电了,要几分钟乃至几个小时才能恢复。从RAS理论来看,它影响了Availability,即持续可用时长变短,甚至在没充电器和移动电源的情况下,完全没法使用,这对用户来说是很痛苦的事情。

如何改善功耗问题

  • 增加电池容量

    电池容量除了受限于当前电池技术外,还受制于手机外观、厚度以及重量,目前业界最新大容量智能手机里头电池容量有2300mAH~5000mAH不等。厂家为了控制手机厚度,越来越倾向于不可更换电池设计,导致早期的备用电池方案没法使用,逐步被移动电源取代,不过一直插着移动电源用也不是啥好的体验,实际是变相加大了手机重量和厚度(或长度)。

    从M9时代的1370mAH到现在MX3的2400mAH,以及荣耀X1 4G的5000mAH,电池容量翻倍增加了,但是日常使用还是只能用个一两天,原因是越来越多的新功能被内置到手机中,而且屏幕尺寸在不断变大,像素不断增加,CPU/GPU性能也需要更加强劲,这些东西把新增的电池容量都吃掉了。所以,这几年,实际应用中的电池技术并没有大的突破,只是勉强跟上了其他技术的发展。

  • 充电技术革新:快充与无线充电

    在充电技术方面,无线充电没有太大进展而且没有任何普及的迹象,不过快充已经有了一些突破,目前Oppo Find7宣称1个小时多一点就充满,在30分钟可以冲到75%,充5分钟可用2小时电话。不过从0%到充满还是未能突破一小时。另外,无线充电技术即使普及,如果没有可移动而且足够的无线充电源,也是白搭,就像电动汽车没有足够的充电桩一样。

  • 减少耗电,即省电

    如果充电技术和电池容量都没有大的突破,那就得想办法省电,也就是说兜里没钱和不好攒钱,那么只能省着点用。

省电本身是个矛盾体:

  • 市场为了迎合用户的需求,不停地要求采用最新的硬件,叠加更多的功能
  • UI为了表现自己的设计有多牛逼,喜欢搞出各种炫酷的界面与交互
  • 硬件为了保障系统的可靠性,会给各个设备预留足够的电压供应,以满足各种品质的芯片
  • 采购为了降低成本,会权衡是否要买ASV值较低的芯片
  • 应用工程师说这个应用优化效果不佳,而且要费很多时间,得把CPU/GPU频率调高一些
  • Camera工程师说这个总线频率控制得太紧,这个画面不顺畅
  • 云应用说它要让数据及时同步,得让云服务线程工作心跳频率比较高
  • 第三方IM说,它得保持用户实时通信,不能对齐它的ALARM
  • 某些”免费“应用说,它得自启动、推送垃圾信息、得弹广告,不然活不下去了
  • 某些”危险“应用说,它要这个权限,要那个权限

可见,功耗不是一个简单的问题,它跟系统可靠性/稳定性一样,是一个系统工程,需要team work,需要预研,而不是仅仅debug。

最后,苦逼的功耗工程师只能硬着头皮去协调,去做衰退分析,去量各个管脚的电压/电流,去定位驱动、应用引入的耗电……当然,这样是远远不够地,还需要做全面系统地预研,从系统层面考量能量的流向,就像会计要清楚这个钱进了多少,出了多少,要清清楚楚。功耗工程师得明白,这个电流从哪里来,到哪里去,谁花掉了,也得明明白白,谁多花了,还得查得出来,谁该怎么花,还得有预算。

省电谈何容易

就像公司的财务部门一样,功耗也需要有一个专门的部门来管理,否则不可能有大的改善。可惜地是,相比财务制度的健全,功耗管理目前并没有形成专门的研究和应用体系,整个行业都处在一个摸索的阶段。咱们可以分几个方面来讨论。

  • 功耗的测量

    程控电源已经普及,整机功耗很容易测量,但是目前手机设备繁多,市场上能够同时测量多路测试点的设备较少,而且目前使用起来都不是非常方便。

  • 功耗的分析

    相比性能分析,功耗的分析困难得多。性能分析有很多profiling的工具,比如说gprof,perf等,但是功耗的分析,虽然有诸如powertop,systrace之类工具的协助,但是至今还没有一套完整的开放或者商用的系统能够进行源码级别的分析,也就是说,没有办法把功耗的问题直接映射到源码级别,还需要工程师根据经验去做人肉分析,这个是很耗费时间和体力的工作。

  • 功耗的优化

    虽然业界已经有大量零散的功耗优化思路,但是并没有形成完整的体系或者指南,相应的应用范例或者书籍更是少之又少。如果上升到整个Android系统层面,相应的策略也是零散的,并没有一套完备的思路,或者是大家都还在路上摸索。缺少优化的指南,设计师在设计交互时就不知道如何考量功耗,应用工程师就不知道如何平衡性能与功耗,网络工程师就不知道需要做网络对齐,如此等等。

Read More: