※ 本文轉寄自 ptt.cc 更新時間: 2015-05-04 21:15:19
看板 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報告。通常會不會選用可能有很多因素,舉凡是市場趨向
、價格帶、跟廠商的關係以及戰略上的考量等原因。
評估使用效能與功耗。給予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
到省電效果,除非有必要的功能必須等待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)
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 都必須
要互相配合才能做到好。
達到省電的工作。這個不管是Application/Service , framework and Driver 都必須
要互相配合才能做到好。
舉凡例子如下
1.1 一個APP 的開發者為了某些功能的應用使用系統的API 讓CPU 在某個條件下不能
suspend 讓他的功能可以正常運作。就以APP 角度就必須考慮得當,必須想好各種use
case. 有沒有可能在某些條件下,根本在沒用到這個功能的時候也讓CPU 睡不下去達
到耗電的結果。
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
的各個元件可能都有其特性必須針對各種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 都不見得可以完全解決問題。
抱怨不順的窘境。遇到這種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)
某個地方,而不是在處理必要的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不
能睡,那耗電量會大大增加)
運作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
※ 文章代碼(AID): #1LHc5K6c (MobileComm)
※ 文章網址: https://www.ptt.cc/bbs/MobileComm/M.1430675796.A.1A6.html
推 : 對於一般用手機的人真的只有(三)看得懂XD 前面牽涉1F 05/04 02:04
→ : 到太多術語像是OS的...
→ : 到太多術語像是OS的...
→ : 好文3F 05/04 02:12
※ 編輯: mogmogmog (118.161.33.231), 05/04/2015 02:25:54→ : 寫作功力太弱...我以為只要懂單字應該都會懂Q_Q4F 05/04 02:26
→ : 你要先假設USER完全不懂5F 05/04 02:35
推 : 簡單來說,先天體質優良加上軟體調教得當可以得到一6F 05/04 02:41
→ : 台效能優良且省電的手機(如m8)
→ : 反之就像(m9)
→ : 台效能優良且省電的手機(如m8)
→ : 反之就像(m9)
推 : 說了很多 但決多數莫名其妙背景喚醒才是真正惱人的9F 05/04 03:15
→ : 問題
推 : 原生 精簡化 偶爾也還是會遇到某個程序背景喚醒 偏
→ : 偏又查不出是那個
→ : 問題
推 : 原生 精簡化 偶爾也還是會遇到某個程序背景喚醒 偏
→ : 偏又查不出是那個
推 : 建議教學文少用縮寫(不然就先交待一下)13F 05/04 04:14
推 : 5.是戰鬥模式嗎?14F 05/04 04:16
→ : 翻成中文不影響理解,不會混淆的名詞建議多用中文15F 05/04 04:16
推 : 要防止app亂喚醒就裝綠色守護就好啦16F 05/04 06:19
推 : Google GMS升級→當年Z表示心有戚戚焉17F 05/04 06:59
推 : 感謝18F 05/04 07:11
推 : 綠色守護要root才比較好用,沒root的話沒什麼用19F 05/04 07:30
推 : 5應該是 flight?20F 05/04 08:00
→ : 中英夾雜太多影響閱讀 不如純中文加標示或者純英文21F 05/04 08:10
推 : 綠色守護沒root一樣好用 有root加付費是全解放22F 05/04 08:11
推 : 專業..23F 05/04 08:38
推 : cp值寫反了24F 05/04 08:55
推 : 綠色守護之類的用過 無解 wakelock detector查出的25F 05/04 08:57
→ : 喚醒系統程序丟google也是無解
推 : 並非是某個應用app本身在喚醒 而是某個app觸發了系
→ : 統程序 所以前面我才會說是莫名奇妙的喚醒
→ : 如果是應用app本身喚醒 那很好解
→ : 喚醒系統程序丟google也是無解
推 : 並非是某個應用app本身在喚醒 而是某個app觸發了系
→ : 統程序 所以前面我才會說是莫名奇妙的喚醒
→ : 如果是應用app本身喚醒 那很好解
推 : 推 用心好文 這反而會讓我想了解30F 05/04 09:02
推 : 看得懂 以前修過OS的課31F 05/04 09:56
→ : 作者使用大量專業語言,就沒有想讓一般人看懂的意32F 05/04 10:04
→ : 思吧
→ : 思吧
→ : 我寧願看全英文也不要這種中英夾雜的文章34F 05/04 10:19
Android Power Management - ott板 - Disp BBS
[自動轉寄] [心得] 淺談手機的電源管理 小弟才疏學淺,有鑑於對手機相關的資訊有些興趣 故寫了此編文章與大家分享。 圖1:功耗值(資料來源: Planet Analog) 在此我們先不討論Battery capacity, 而是單純評估整體手機的耗電量. 耗電跟效能彼此 ...
[自動轉寄] [心得] 淺談手機的電源管理 小弟才疏學淺,有鑑於對手機相關的資訊有些興趣 故寫了此編文章與大家分享。 圖1:功耗值(資料來源: Planet Analog) 在此我們先不討論Battery capacity, 而是單純評估整體手機的耗電量. 耗電跟效能彼此 ...
推 : 推36F 05/04 11:46
→ : irvingyeh85:我寧願看全英文也不要這種中英夾雜的文37F 05/04 12:00
→ : 這不是專不專業的問題 而是大量中英混雜造成閱讀
→ : 理解有障礙
→ : 其實英文都很簡單 但是看起來就是超不順
→ : XDA一堆全英文專業文章看起來就是很順
→ : 這不是專不專業的問題 而是大量中英混雜造成閱讀
→ : 理解有障礙
→ : 其實英文都很簡單 但是看起來就是超不順
→ : XDA一堆全英文專業文章看起來就是很順
→ : 我以為要講充電 直接end42F 05/04 12:04
推 : 看推文才發現還蠻多英文的,不過我閱讀起來蠻順的43F 05/04 12:10
推 : 我是看得懂 但我賭9成的人end44F 05/04 12:38
推 : 看得出原PO很用心寫 不過太多英文夾雜 大概是習慣45F 05/04 12:41
推 : 電源管理(Power Management)是很重要(important)的46F 05/04 12:57
推 : 一堆非terminology的english夾雜 故意秀english ?47F 05/04 12:57
推 : 要不要收精華阿48F 05/04 13:06
推 : 感覺很厲害XD 可是好難懂49F 05/04 13:12
噓 : 寫中文好嗎50F 05/04 13:15
推 : 推51F 05/04 13:17
→ : 這是我此生在ptt看過最中英夾雜又不順的一篇52F 05/04 13:27
→ : 不是說台灣人賭爛英文好的人
→ : 你在歐美講兩句法文夾幾個英文單字 絕對被臭臉
→ : 不是說台灣人賭爛英文好的人
→ : 你在歐美講兩句法文夾幾個英文單字 絕對被臭臉
→ : 不愛大量中英文章55F 05/04 14:26
推 : 我看的很順說56F 05/04 14:28
推 : 不錯就是這種介紹文才不浪費時間看57F 05/04 15:23
推 : 應該是平常都用英文習慣了...58F 05/04 16:01
推 : 希望原PO多寫點 以正視聽阿
推 : 希望原PO多寫點 以正視聽阿
推 : 這篇要收精華區 謝謝原po60F 05/04 16:05
推 : excellent work
推 : excellent work
推 : 已收錄精華區62F 05/04 16:19
推 : 這篇感覺很HTC= =...63F 05/04 16:21
→ : btw, 你沒寫PA
→ : btw, 你沒寫PA
推 : 文章寫得很好,軟硬體層面都有提到。感謝分享 推~65F 05/04 16:41
推 : 然後,這些英文改成中文不會比較好懂,我是認真的= =66F 05/04 16:53
推 : 有些地方還是可以改中文拉 不過大體上不改沒差67F 05/04 16:54
推 : 工程寫法中英夾雜很正常阿,推內容,不過用電源管理68F 05/04 16:56
→ : 當成標題有點不搭
→ : 當成標題有點不搭
推 : 不過這種時候其實需要的是幹你教育部...70F 05/04 16:58
→ : 感謝各位大大批評指教~英文單純是辭意上個人比較好71F 05/04 17:08
→ : 表達,針對文字描述的確是一門藝術。會再次修正^^
→ : 表達,針對文字描述的確是一門藝術。會再次修正^^
--
回列表(←)
分享