手機管理應用研究【6】——省電管理篇
CPU和IO調節模式。不同調節模式對應的效能提升、省電效果不一樣
CPU調節模式
Ø ondemand(按需模式)
顧名思義,按需調節cpu頻率,不操作手機的時候控制在最低頻率,滑屏或進入應用後會迅速提升至最高頻率,當空閒時迅速降低頻率,效能較穩定,但因頻率變化幅度過大,省電方面只有一般的水平。
Ø powersave(省電模式)
按設定最低頻率執行,最省電也最龜速,日常沒有使用價值,除非配合setcpu情景模式,關屏睡眠時使用此調節模式。
Ø performance(高效能模式)
和省電模式相反,始終按設定最高菜譜頻率執行,最耗電也最剛猛!此模式亦無任何日常使用價值,果斷pass。
Ø userspace(使用者隔離模式)
嚴格來說它並不是一個模式,是允許非核心程序控制cpu頻率的設定,現在已經不需要它了,setcpu官方的建議是,“不要使用此選項”。
Ø conservative(保守模式)
和ondemand模式的調頻設定類似,不過有操作時提升cpu頻率的速度較慢,空閒時迅速降頻,所以名字叫保守模式,效能較低,省電程度略好於ondemand,隨著CPU負荷加大,頻率逐級上升,在CPU閒時頻率逐級下降,因此這個設定相對於ondemand模式省電,但變頻不夠順滑,所以會有卡頓現象。總體不推薦
interactive(互動模式)
相對於保守模式,這個模式算是高效能版的ondemand,開始操作手機後,頻率升至最高,可以帶來更好的響應速度,空閒時緩慢降至設定最低頻率。電量自然也是要多費一點。
關於CPU調節模式的設定可以參見下圖:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
I/O調節模式
(什麼是I/O調節模式?i/o即input/output的縮寫,關於資料的讀寫操作,不同程序請求資料的優先順序等等。io排程模式比較複雜,這裡僅介紹常用的幾個模式,部分參考xda、androidforums、wik1pedia、linuxarchive資料)
Ø noop
這個排程模式會把所有的資料請求直接合併到一個簡單的佇列裡。不適合有機械結構的儲存器,因為沒有優化順序,會增加額外的尋道時間。屬於最簡單的一個排程模式,無視io操作優先順序和複雜性,執行完一個再執行一個,如果讀寫操作繁多的話,就會造成效率降低。
Ø anticipatory
其實這個有點類似於pc硬碟的NCQ功能,執行有預測性的排程,看起來似乎可以提高效率,不過因為它的預測機制會在程序將要結束一個讀寫操作時時開始準備下一個的預處理,所以會打亂系統正常的連續io排程,降低隨機存取效率。用的人很少,不推薦。
Ø deadline
顧名思義,用過期時間來排序io操作順序,保證先出現的io請求有最短的延遲時間,相對於寫操作,給讀操作更優先的級別。是比較好的一個排程模式。
Ø cfq
完全公平佇列,是anticipatory模式的替代品,沒有過多的做預測性排程,而是根據給定的程序io優先順序,直接來分配操作的順序。這個模式在linux上表現良好,但也許並不是最適合android的io排程模式,太強調均衡,而降低了連續讀寫資料的效能。
Ø vr
具有和deadline相似的操作排序機制,有著最高的峰值讀寫速度,但是效能比較不穩定,也就是說可能跑出最高的分數,但是也會出現最低值。
Ø sio
雖然基於deadline,但是它和noop一樣,不會對io操作進行排序,所以有著noop那樣快速的存取速度,但並沒有過多優化io操作。如果不喜歡noop完全不參與排程,也可以選擇這個。
關於I/O Scheduler的設定可以參見下圖:
/sys/block/{DEVICE-NAME}/queue/scheduler