基于Linux的智能手機(jī)省電設(shè)計(jì)
引言
本文引用地址:http://butianyuan.cn/article/201612/331514.htm智能手機(jī)中包含了很多耗能設(shè)備, 諸如MP3、MPEG- 4、Wi-Fi、數(shù)碼相機(jī)、3D 游戲等等。在手機(jī)電池容量還沒有實(shí)現(xiàn)質(zhì)的飛躍的前提下, 我們不得不考慮手機(jī)電源節(jié)能的問題。我主要通過了以下四個(gè)方面來闡述在基于Linux 平臺上的智能手機(jī)的解決方案。
CPU 的選擇
盡管現(xiàn)在有了各種在不過多加重功耗負(fù)擔(dān)的前提下提高性能的技術(shù), 但用一個(gè)芯片來處理這么多各種各樣的任務(wù), 恐怕已經(jīng)不是一個(gè)很好的選擇了。一是因?yàn)檫@些功能對芯片處理功能的要求可能各不相同, 二是因?yàn)橐粋€(gè)負(fù)擔(dān)著如此眾多任務(wù)的芯片勢必需要很高的速度, 降低功耗變得很困難。
在這種情況下, 多CPU 系統(tǒng)(MPCore)成為一個(gè)必然的趨勢。多CPU 系統(tǒng)的一個(gè)明顯的優(yōu)勢是: 針對不同的任務(wù)處理需要, 不同的CPU 可以各盡其職, 將自身的優(yōu)勢充分發(fā)揮, 由此帶給手機(jī)最優(yōu)化的性能表現(xiàn)。另一個(gè)優(yōu)勢顯然還是體現(xiàn)在對功耗的控制上: 假如用單CPU 來完成所有的功能, 不可避免地需要一個(gè)很高的CPU 速度, 從而造成很高的功耗。用一顆高速CPU 來完成這樣的任務(wù), 無疑是大牛拉小車, 同時(shí)浪費(fèi)很多能源。多CPU 系統(tǒng)可以根據(jù)不同的任務(wù)需要合理地啟動(dòng)、停止相應(yīng)的CPU 來完成任務(wù),不需要的時(shí)候處于停歇狀態(tài), 實(shí)現(xiàn)最大限度地控制功耗。
既然我們選擇了多CPU 的架構(gòu), 那么接下來CPU 的性能就是我們要考慮的第二大問題。一般的情況下, 我們是在CPU 的性能( Performance) 和功耗(Power Consumption) 方面進(jìn)行比較和選擇。通常可以采用每執(zhí)行1M次指令所消耗的能量來進(jìn)行衡量, 即Watt/MIPS。
我們把CPU 的功率消耗分為兩大部分: 內(nèi)核消耗功率PCORE和外部接口控制器消耗功率PI/O, 總的功率等于兩者之和, 即PPCORE+PI/O。對于PCORE, 關(guān)鍵在于其供電電壓和時(shí)鐘頻率的高低; 對于PI/O 來講, 除了留意各個(gè)專門I/O 控制器的功耗外, 還必須關(guān)注地址和數(shù)據(jù)總線寬度。
在數(shù)字集成電路設(shè)計(jì)中, CMOS 電路的靜態(tài)功耗很低, 與其動(dòng)態(tài)功耗相比基本可以忽略不計(jì)。CMOS 電路動(dòng)態(tài)功耗的計(jì)算公式如下:
Pd=CT*V2*f, 其中Pd 是CMOS 芯片的動(dòng)態(tài)功耗, C是CMOS芯片的負(fù)載電容, V 是CMOS 芯片的工作電壓, f 是CMOS 芯片的工作頻率。
由上可見, 當(dāng)CPU 確定后, 我可以通過降低頻率和電壓來減少系統(tǒng)的功耗。
在CPU 的選擇方面, 我們推薦采用Intel 的Xscale 芯片, 以及IBM的PowerPC405G 芯片。
動(dòng)態(tài)電源管理(DPM)
系統(tǒng)不可能始終處于滿負(fù)荷狀態(tài), 因?yàn)橄到y(tǒng)的工作量隨時(shí)都在改變。動(dòng)態(tài)電源管理(DPM) 通過選擇性的將空閑的系統(tǒng)組件置于低能耗狀態(tài)實(shí)現(xiàn)了系統(tǒng)整體能耗的最優(yōu)化。
我們更為關(guān)注的是DPM在Linux 框架結(jié)構(gòu)下的實(shí)現(xiàn)。圖1 展示了電源管理和嵌入式Linux 堆棧之間的關(guān)系。
電源管理和嵌入式Linux 堆棧之間的關(guān)系
以下是一些于電源管理相關(guān)的接口以及API:
內(nèi)核接口。在針對Linux 的DPM 架構(gòu)中, 內(nèi)核中的DPM 子系統(tǒng)負(fù)責(zé)維持系統(tǒng)的電源狀態(tài), 并把DPM 系統(tǒng)的各個(gè)電源得到管理的元件聯(lián)系在一起。DPM 子系統(tǒng)通過多個(gè)API 直接與設(shè)備驅(qū)動(dòng)程序通信, 這些API 把驅(qū)動(dòng)程序從完全運(yùn)行狀態(tài)轉(zhuǎn)為各種電源得到管理的狀態(tài)。策略管理器( 或應(yīng)用軟件自身) 通過多個(gè)API向DPM 子系統(tǒng)提供指導(dǎo), 這些API 定義各種策略, 并在定義好的運(yùn)行點(diǎn)之間轉(zhuǎn)移整個(gè)系統(tǒng)。
驅(qū)動(dòng)程序接口。啟用了DPM 的設(shè)備驅(qū)動(dòng)程序比默認(rèn)驅(qū)動(dòng)程序具有更多“狀態(tài)”: 由外部事件通過各種狀態(tài)來驅(qū)動(dòng)它們, 或通過來自內(nèi)核DPM 子系統(tǒng)的回調(diào)來驅(qū)動(dòng)它們, 從而反映并遵循運(yùn)行策略。驅(qū)動(dòng)程序API 還允許驅(qū)動(dòng)程序登記它們連接和管理的各個(gè)設(shè)備的基本運(yùn)行特征, 從而實(shí)現(xiàn)更精細(xì)的策略決策。
用戶程序API, 用戶程序( 應(yīng)用軟件) 分為三類:
(1)可感知電源管理的應(yīng)用軟件;
(2)可感知電源管理的“包裝器”中的傳統(tǒng)應(yīng)用軟件;
(3)不帶電源管理的傳統(tǒng)應(yīng)用軟件。
可感知電源管理的應(yīng)用軟件能夠充分利用來自策略管理器的API, 從而建立各自的基礎(chǔ)約束, 并強(qiáng)制電源管理策略發(fā)生變化, 以便匹配各自的執(zhí)行要求。不直接帶有電源管理功能的傳統(tǒng)應(yīng)用軟件可以“包裝”到代碼或補(bǔ)丁中, 從而實(shí)現(xiàn)相當(dāng)?shù)男Ч? 它們還可以按照默認(rèn)行為來運(yùn)行, 這取決于更寬范圍的默認(rèn)策略管理。
嵌入式Linux DPM 下的實(shí)際機(jī)制包括各種API, 比如dpm_set_os ()( 內(nèi)核) 、assert_constraint ()、remove_constraint () 和set_operating_state () ( 內(nèi)核和驅(qū)動(dòng)程序) 、set_policy () 和set_task_state()( 經(jīng)由系統(tǒng)調(diào)用的用戶級接口) , 以及/proc 接口。
電源管理策略在系統(tǒng)電源管理中扮演了極為關(guān)鍵的角色。DPM的策略抽象模型的執(zhí)行體系類似于狀態(tài)機(jī)。在DPM中有2個(gè)概念很重要: 一個(gè)是執(zhí)行點(diǎn)(operating points), 另一個(gè)是執(zhí)行狀態(tài)( operating states) 。DPM的執(zhí)行點(diǎn)來自一些獨(dú)立的系統(tǒng)參數(shù), 包括執(zhí)行電壓, 頻率, 以及總線帶寬等等。隨著事件的改變, 系統(tǒng)的狀態(tài)也不斷的改變( 如圖2 所示) 。在DPM中, 每個(gè)系統(tǒng)狀態(tài)都是一個(gè)執(zhí)行狀態(tài), 包括空閑態(tài)、活動(dòng)態(tài)和睡眠態(tài)。
系統(tǒng)的狀態(tài)不斷的改變
自適應(yīng)電壓調(diào)整(AVS)
在CPU 的選擇部分, 我們知道了系統(tǒng)能耗是與電壓和頻率緊密相關(guān)的?,F(xiàn)在我們來探討一下調(diào)整電壓在降低能耗方面的作用。在電壓調(diào)整方面, 自適應(yīng)電壓調(diào)整是一種很有效的方法。自適應(yīng)電壓調(diào)整AVS(Adaptive Voltage Scaling)是通過反饋機(jī)制將電源電壓調(diào)整到給定工作負(fù)載(處理量)所需的最小值。這種閉環(huán)方式可進(jìn)一步減小功耗, 但需要將部分電源管理電路置入主處理器。
評論