[心得] 浅谈手机的电源管理

楼主: mogmogmog (经营之神...默哀)   2015-05-04 01:56:33
小弟才疏学浅,有鉴于对手机相关的资讯有些兴趣
故写了此编文章与大家分享。
在此我们先不讨论Battery capacity, 而是单纯评估整体手机的耗电量.
耗电跟效能彼此之间就是trade off,如何取得平衡就是一门很深的学问(跟婆媳一样?)
以下分类四个topic 来做讨论
要是前两篇让你看到一个头两个大,请直接跳三XD
一 HW 规格
1.手机CPU规格与其元件
要知道巧妇难为无米之炊,假设手机先天使用的元件是不好的。那么再强的SW tuning
可以降低功耗的效果就有限。
其中最重要的几个元件不外乎如下
1.1 CPU/GPU
目前知名被管泛使用的手机CPU 大厂 有1.QCOM 2.MTK 3.Samsung exynos.4.Intel
5.海思.各家CPU 大厂大多都有高中低三阶对应的产品线。
QCOM目前在市场上领先的主要原因是其Modem 与CPU的整合性以及许多手机相关的专
利.但是八核CPU功耗的控制依旧有很多加强的空间(S615 and S810 就是个范例)
MTK可以在大陆吃得开凭借著是total solution 以及价格/效能的高cp值,可以让手
机厂快速利用公版生产手机。但是关于认证、相关的专利以及GPU还是跟qcom有一段的
差距,欧美市场就是一个努力的目标。
Samsung 虽在modem 的整合度以及专利劣于高通,但是倾全国之力的公司产业。在
CPU性能上一直有着强大的竞争力(这次的4x-A57,4x-A53 的功耗就击溃了S810)光生产
Samsung手机就是个大补丸
手机厂的HW and SW architecture 都会根据CPU厂商提供的SPEC还有test report 来
评估使用效能与功耗。给予Project team的人,面对现在手机的市场该选用那颗cpu来
做评估。当然这只是survey报告。通常会不会选用可能有很多因素,举凡是市场趋向
、价格带、跟厂商的关系以及战略上的考量等原因。
举个简单的范例如下
1.在大陆出手机低阶产品会优先考量mtk 而欧美低价手机也不会考虑mtk.
2.大部分厂商不会使用Samsung exynos
就像大部分公司不会选择exynos 一样。
1.2 Display
对其没有研究. 但display 在正常screen on 的情况底下。绝对是除了cpu之外耗电
的大客户之一.有无RAM buffer 也是影响的关键之一.好坏的panel 的差距可能是
100mA 以上的gap.
1.3 周边相关的原件
举凡是camera module , BT and WIFI and GPS solution. Audio/Video and
Sensor 等
二 SW Tuning
软件针对已经规划好规格的手机产品,就会对基本的HW SPEC 做tuning 来完成该有的
target.
***要省电唯一重点:不该用的时候,就要把相关的元件关掉或是进入省电模式。
该用的时候,就要用到刚好的力度就可以完成一样的工作来达到省电。
常见的几个测试.
1.Display idle case
在萤幕开启的时候,当frame没有更新的时候,有些panel可以进idle mode 让Display
耗电量大幅降低
2.Display off
萤幕关辟的时候,此时display相关的module 应该让panel 进入low power mode 达到
省电功能。
3.CPU idle
CPU可能有所谓的idle mode(要看HW chip 是否支援),即使在screen on 的情况下,要
是没有频率很高的task 在运作,有机会进入idle 达到省电。
4.CPU suspend
Userspace and kernel space 没有任何wake lock 或是task 在运作,cpu 能够进入
suspend mode 达到低功耗的标准。此时,各相关元件应该也要进入low power mode 达
到省电效果,除非有必要的功能必须等待cpu interrupt 唤醒(即使在这个mode,该元件
耗电量也不能太高)这时候应该就只剩下sub-system alive
举个范例,假设现在打开touch panel 能够接收到使用者滑动或是点击的event 需要让
touch panel 切换到active mode. 那这个耗电量假设是20mA.在CPU suspend 状况下,
不需要接收touch event. touch driver 就该通知到touch 这个chip 让他到low power
mode 来达到省电(可能就只有10uA甚至更低)。更进阶的来说,假设touch在screen off
就不该有接受touch event 的功能,就该让display off 这个条件成立的时候,马上就
关掉touch event 达到省电(因为关萤幕不等同cpu suspend)
5.Fight mode on
关掉Modem , WIFI etc. 此时也收不电话。进入更省电的模式
6.Camera related
拍照,录影针对不同的resolution跟模式,有对应的耗电量跟spec.通常跟camera
moduel and CPU 有关
7.Audio/Video
针对不同的分辨率跟状况,有对应的SPEC.通常都跟CPU 和solution有关.
8.Phone call
跟modem , system overall tuning 有关
9.WIFI,BT,GPS
跟solution and system overall tuning 有关
10.Browse
跟Browse Application and system overall tuning 有关
11.Game
跟Application , CPU and System overall tuning 有关
12.Daily use
跟System overall and user 下载的app 有关
SW 要做到的事,就是一开始的大原则
1.要省电唯一重点:不该用的时候,就要把相关的元件关掉或是进入省电模式。
这个是各Driver and feautre owner 的责任,必须各Developer 了解其负责的部分来
达到省电的工作。这个不管是Application/Service , framework and Driver 都必须
要互相配合才能做到好。
举凡例子如下
1.1 一个APP 的开发者为了某些功能的应用使用系统的API 让CPU 在某个条件下不能
suspend 让他的功能可以正常运作。就以APP 角度就必须考虑得当,必须想好各种use
case. 有没有可能在某些条件下,根本在没用到这个功能的时候也让CPU 睡不下去达
到耗电的结果。
1.2 Driver 就该评估其component 必须在各种情况底下切换到对应的模式来到功能和省
电的效果。必且考虑各种case 甚至是error handling. 不会在特殊条件下,让Chip
处于耗电的状况。
2.该用的时候,就要用到刚好的力度,就可以完成一样的工作来达到省电。
说似简单,其实超难。各家cpu厂and手机厂 都为了调整出最好的结果大伤脑筋
大部分peformance team 就是针对各种use case 调整Policy 去plug/unplug cpu/gpu
and adjust cpu frequqnece/gpu 以高通来讲,原厂就有mpdecision 在针对useage 来
做cpu 的调整。 当然各家手机厂会再针对各种case fine tune 参数。
手机温度/耗电/效能之间的平衡永远都是很难处理的问题。因为牵涉的东西太广,手机
的各个元件可能都有其特性必须针对各种case 调整。看看现在最热门的S810. CPU/GPU
spec很强,但是A57高频率一开,很快就过热,thermal table 就马上做反应unplug cpu
and lower frequency 导致出来的结果在some case比S801还烂,要是不针对thermal
table 做调整可能手机温度会过高让使用者感觉不适。一调整performance drop 又被
抱怨不顺的窘境。遇到这种Case. 除非找到问题的root cause 必且解决(应该在CHIP
layer),即使是SW改动cpu scheduler 都不见得可以完全解决问题。
三 User Q&A
Q1:常常遇到很多人说,不要乱安装一些大陆app或是系统优化的程式。或是当你遇到突然
耗电的时候就先回复原厂设定,就能够解决问题。Why?
A1:最主要原因如下。
通常耗电有两种Case,
1. 萤幕打开的时候再做一些事情感到特别耗电.
2. 萤幕关掉的时候,手机什么都没做但是就特别耗电.
针对1. *就是有特殊的application or service 在使用其功能的需要复杂的运算跟大
量资料处理,导致必须要挂起多个cpu 并且调高频率才能应付该功能使用。
例如大型的网络线上游戏,他需要wifi/4g 做资料与sever 的sync. 以及高解
析度画面的处理以及运算(挂起多个cpu and gpu).
*那个application 写的滥,烂的code 可能让程式在busy waiting 或是卡在
某个地方,而不是在处理必要的task.还记得以前的candy crash (好久没玩不
知道改正没)。立意良好写了好几个thread 在run. 但是自己造成deadlock 导
致只有两颗cpu 的手机hang 住(当时他开了三个thread XD)
*刀塔传奇,在Android L 下,不良使用API 导致开启audio 的时候,超级
lag.
针对2. 就是Application 针对特殊的功能让系统无法休眠(cpu can't suspend) 给大
家一个大概的数字概念(假设cpu suspend 状况,大概是4mA~6mA)
而假设application 咬住让系统不能休眠,那都是xxmA 以上的消耗量。这样
user 就会感受到怎么我手机摆着睡觉,一叫醒来电池%大幅缩减.这种几乎都是
case2.
Q2:要怎么使用相关的设定来达到省电的功能
A2:这取决于你要怎样的手机功能,以下举出几个例子让大家体会一下。
现在很多手机厂商都有所谓Power saving mode. 那这些mode 不外乎最主要就是调整
cpu 最高频率跟开启的个数,Display brigtness. or no vibration for some case.
系统厂商针对许多user 不会影响user experience 的东西,做一些power mode 的设
定。你可以针对个人的需求来启动这些设定达到节能的效果。例如你可以手动调整
display 的亮度在setting,你可以disable auto rotation 在你不需要这个feature. 你可以关掉3g/wifi 在你不使用网络的时候。
你可以在睡觉会或是会议的时候开启飞安模式。你不需要使用GPS定位,把设定的位置
关掉。当然关辟这些功能,前提是你不需要这些东西。 重点还是,不要用就不要开,
这才能省电.
Q3:有啥方法可以察觉是否这个APP 是耗电的
A3:最简单的是使用经验,突然安装了某个APP 之后耗电增加,或是某次APP 改版后耗电
增加.
举个简单例子
1.有些明显的APP 就是让user 可以在萤幕关掉的时候还有一些功能上的运作,而这些
运作APP 写不好可能会让CPU 不能睡。常见的就是fitness 相关的APP, 像是纪录走
路步数。判断使用者姿态,睡眠习惯、光驱锁等。一些用到sensor 的APP 假设没有
正确的使用都可能导致严重耗电(Sensor 开启本身就会额外耗电,要是还影响cpu不
能睡,那耗电量会大大增加)
2.某次Google 的GMS 升版,当location enable. 就额外开启一些sensor 来判断一些
activity 导致额外的耗电。
3.想想看一些APP 的notification. 像是Line 的提醒,你要enable 这些功能就必须
定期的query data. 一定比没打开这些功能来的耗电。
四 Benchmark
最后我想跟大家说一声。
不要再迷信安兔兔或是各种benchmark.
因为它代表的涵义只有一个- 这颗chip 最操可以几分。除非你在意的是这个远大于你使
用上真正的感受。那就下载他吧@@
而且现在普遍大厂都会针对benchmark 做white list.
调整thermal table 跟cpu 调频的机制。 跟正常use case 已经偏离。
有件事情很好玩,大家可以思考一下。
1. 这个手机针对benchmark 有作弊且跑分高-> 那你跑出来都是假的。跑也是跑爽的跟正
常user case 没关
2. 这个手机针对benchmark 有作弊但是分数不一定 -> 就都作弊不可信,跑很多次最终
还是要屈服cpu 温度而妥协。
3. 这个手机没作弊,但是为了跑分高,让cpu 处于高效能。 -> 并不是最佳的使用方式
,反而有可能是最糟的结果。正常user case 也是高频反而耗电。
4. 这个手机没作弊,但是跑分低。 -> 不一定代表一般use case 不好。单纯是跟有作弊
或是常常high performance 的policy 比分数低而已。
所以大家要注意的评测反而是各种use case 的测试报告 而不是benchmark.
如果有手机厂商为了讨好消费者选择上述3的option 那反而是对消费者最糟糕的结果。
有时间再写其他篇幅.

Links booklink

Contact Us: admin [ a t ] ucptt.com