作者mogmogmog (经营之神...默哀)
看板MobileComm
标题[心得] 浅谈手机的电源管理
时间Mon May 4 01:56:33 2015
小弟才疏学浅,有监於对手机相关的资讯有些兴趣
故写了此编文章与大家分享。
在此我们先不讨论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.Flight 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 那反而是对消费者最糟糕的结果。
有时间再写其他篇幅.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.161.33.231
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MobileComm/M.1430675796.A.1A6.html
1F:推 Lumia625 : 对於一般用手机的人真的只有(三)看得懂XD 前面牵涉 05/04 02:04
2F:→ Lumia625 : 到太多术语像是OS的... 05/04 02:04
3F:→ frank543 : 好文 05/04 02:12
※ 编辑: mogmogmog (118.161.33.231), 05/04/2015 02:25:54
4F:→ mogmogmog : 写作功力太弱...我以为只要懂单字应该都会懂Q_Q 05/04 02:26
5F:→ kutkin : 你要先假设USER完全不懂 05/04 02:35
6F:推 thinboyslim : 简单来说,先天体质优良加上软体调教得当可以得到一 05/04 02:41
7F:→ thinboyslim : 台效能优良且省电的手机(如m8) 05/04 02:41
8F:→ thinboyslim : 反之就像(m9) 05/04 02:42
9F:推 as111531 : 说了很多 但决多数莫名其妙背景唤醒才是真正恼人的 05/04 03:15
10F:→ as111531 : 问题 05/04 03:15
11F:推 as111531 : 原生 精简化 偶尔也还是会遇到某个程序背景唤醒 偏 05/04 03:19
12F:→ as111531 : 偏又查不出是那个 05/04 03:19
13F:推 abysszzz : 建议教学文少用缩写(不然就先交待一下) 05/04 04:14
14F:推 travelman : 5.是战斗模式吗? 05/04 04:16
15F:→ abysszzz : 翻成中文不影响理解,不会混淆的名词建议多用中文 05/04 04:16
16F:推 f50903 : 要防止app乱唤醒就装绿色守护就好啦 05/04 06:19
17F:推 tom282f3 : Google GMS升级→当年Z表示心有戚戚焉 05/04 06:59
18F:推 agamonnon : 感谢 05/04 07:11
19F:推 natsugo : 绿色守护要root才比较好用,没root的话没什麽用 05/04 07:30
20F:推 a92allen : 5应该是 flight? 05/04 08:00
21F:→ Walkon : 中英夹杂太多影响阅读 不如纯中文加标示或者纯英文 05/04 08:10
22F:推 zozo5566 : 绿色守护没root一样好用 有root加付费是全解放 05/04 08:11
23F:推 tingjun : 专业.. 05/04 08:38
24F:推 silverair : cp值写反了 05/04 08:55
25F:推 as111531 : 绿色守护之类的用过 无解 wakelock detector查出的 05/04 08:57
26F:→ as111531 : 唤醒系统程序丢google也是无解 05/04 08:57
27F:推 as111531 : 并非是某个应用app本身在唤醒 而是某个app触发了系 05/04 08:59
28F:→ as111531 : 统程序 所以前面我才会说是莫名奇妙的唤醒 05/04 08:59
29F:→ as111531 : 如果是应用app本身唤醒 那很好解 05/04 09:00
30F:推 andy108tw : 推 用心好文 这反而会让我想了解 05/04 09:02
31F:推 Luos : 看得懂 以前修过OS的课 05/04 09:56
32F:→ wolf9420 : 作者使用大量专业语言,就没有想让一般人看懂的意 05/04 10:04
33F:→ wolf9420 : 思吧 05/04 10:04
34F:→ irvingyeh85 : 我宁愿看全英文也不要这种中英夹杂的文章 05/04 10:19
36F:推 jimei2 : 推 05/04 11:46
37F:→ chunyulai : irvingyeh85:我宁愿看全英文也不要这种中英夹杂的文 05/04 12:00
38F:→ chunyulai : 这不是专不专业的问题 而是大量中英混杂造成阅读 05/04 12:01
39F:→ chunyulai : 理解有障碍 05/04 12:01
40F:→ chunyulai : 其实英文都很简单 但是看起来就是超不顺 05/04 12:01
41F:→ chunyulai : XDA一堆全英文专业文章看起来就是很顺 05/04 12:01
42F:→ yufengz : 我以为要讲充电 直接end 05/04 12:04
43F:推 silverair : 看推文才发现还蛮多英文的,不过我阅读起来蛮顺的 05/04 12:10
44F:推 nadoka : 我是看得懂 但我赌9成的人end 05/04 12:38
45F:推 wagwag : 看得出原PO很用心写 不过太多英文夹杂 大概是习惯 05/04 12:41
46F:推 ke5566 : 电源管理(Power Management)是很重要(important)的 05/04 12:57
47F:推 helwl : 一堆非terminology的english夹杂 故意秀english ? 05/04 12:57
48F:推 a3556959 : 要不要收精华阿 05/04 13:06
49F:推 web946719 : 感觉很厉害XD 可是好难懂 05/04 13:12
50F:嘘 unicorn0106 : 写中文好吗 05/04 13:15
51F:推 sa074463 : 推 05/04 13:17
52F:→ Djuda : 这是我此生在ptt看过最中英夹杂又不顺的一篇 05/04 13:27
53F:→ Djuda : 不是说台湾人赌烂英文好的人 05/04 13:30
54F:→ Djuda : 你在欧美讲两句法文夹几个英文单字 绝对被臭脸 05/04 13:31
55F:→ march55237 : 不爱大量中英文章 05/04 14:26
56F:推 Luos : 我看的很顺说 05/04 14:28
57F:推 rith22411 : 不错就是这种介绍文才不浪费时间看 05/04 15:23
58F:推 kira925 : 应该是平常都用英文习惯了... 05/04 16:01
59F:推 kira925 : 希望原PO多写点 以正视听阿 05/04 16:03
60F:推 kblover : 这篇要收 谢谢原po 05/04 16:05
61F:推 kblover : excellent work 05/04 16:05
62F:推 PTTOnline : 已收录 05/04 16:19
63F:推 hsinggg : 这篇感觉很HTC= =... 05/04 16:21
64F:→ hsinggg : btw, 你没写PA 05/04 16:21
65F:推 bearland : 文章写得很好,软硬体层面都有提到。感谢分享 推~ 05/04 16:41
66F:推 hsinggg : 然後,这些英文改成中文不会比较好懂,我是认真的= = 05/04 16:53
67F:推 kira925 : 有些地方还是可以改中文拉 不过大体上不改没差 05/04 16:54
68F:推 aoegame1 : 工程写法中英夹杂很正常阿,推内容,不过用电源管理 05/04 16:56
69F:→ aoegame1 : 当成标题有点不搭 05/04 16:56
70F:推 kira925 : 不过这种时候其实需要的是干你教育部... 05/04 16:58
71F:→ mogmogmog : 感谢各位大大批评指教~英文单纯是辞意上个人比较好 05/04 17:08
72F:→ mogmogmog : 表达,针对文字描述的确是一门艺术。会再次修正^^ 05/04 17:09
73F:推 shan2420EE : you的英文look起来very不错 05/04 22:43
74F:推 waloloo : 换成日文应该就ok了 05/05 02:00
75F:推 memo000 : 推原PO用心,看得很顺~ 有空把fight改回flight吧 05/05 03:57
76F:推 ferrinatice : 用心文,推 05/05 14:37
※ 编辑: mogmogmog (118.163.58.205), 05/05/2015 22:12:10
77F:→ mogmogmog : 感谢楼上提醒,已修正typo 05/05 22:15