[心得] 淺談手機的電源管理

作者: 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