基于Linux的動態(tài)電源管理
——
電源管理范圍
任何擁有筆記本電腦的人都會感覺到,他們的這種便攜式設(shè)備依靠電池運(yùn)行時(shí),與依靠交流電(主電源)運(yùn)行對比,行為表現(xiàn)不一樣,屏幕變暗了,處理器時(shí)鐘變慢了,并且系統(tǒng)只要有可能,就會轉(zhuǎn)入待機(jī)或睡眠狀態(tài)。
另外,PDA 的擁有者們還發(fā)現(xiàn),在設(shè)備停用一段時(shí)間之后,屏幕會變暗,設(shè)備甚至進(jìn)入睡眠狀態(tài),而手機(jī)用戶會注意到,撥號之后,背光和按鍵照明光熄滅了。在肉眼能夠察覺的這些行為的背后,是若干軟硬件技術(shù)和策略在起作用。
明顯的行為如全速運(yùn)行、待機(jī)和睡眠等,充分利用了 CPU 本身的功能來降低工作電壓和/或時(shí)鐘頻率,從而省電。大多數(shù)設(shè)備用戶覺察不到的是,實(shí)際的電源管理還可以是漸增的,并且可以每秒發(fā)生好幾百次,而不是整個(gè)系統(tǒng)狀態(tài)大規(guī)模變化。
任何動態(tài)電源管理 (DPM) 戰(zhàn)略開始都是調(diào)節(jié)便攜式設(shè)備中存在的一個(gè)或多個(gè)處理器內(nèi)核的工作電壓和頻率——高度集成的、基于 PowerPC、ARM 和 x86 的系統(tǒng)通常配備一塊 DSP 或智能基帶處理器。實(shí)際上,Intel XScale 和 TI OMAP 等處理器系列提供了內(nèi)核電壓和頻率的動態(tài)調(diào)節(jié)。不過,現(xiàn)代嵌入式處理器的用電效率非常高,以至于 CPU 并不總是主要的耗能器件,其它大能耗器件可能包括高性能存儲器、彩色顯示器和無線接口。因此,動態(tài)電源管理系統(tǒng)如果只關(guān)注對處理器內(nèi)核的電壓和頻率進(jìn)行調(diào)節(jié)的話,那么它的用途也許很有限。
真正有用的電源管理方案將支持各種電壓和時(shí)鐘的快速調(diào)節(jié),既可以與 CPU 內(nèi)核的運(yùn)行協(xié)同進(jìn)行,也可以獨(dú)立進(jìn)行。
架構(gòu)
兩種現(xiàn)有的電源管理方案是來自“白箱”PC 及筆記本電腦領(lǐng)域,第一種是傳統(tǒng)的“高級電源管理”(Advanced Power Management,簡稱 APM)方案,仍用于許多基于 Linux 的便攜式設(shè)備中,而基于微軟操作系統(tǒng)的筆記本電腦和手持設(shè)備已停止采用這種方案了,第二種是“高級配置和電源接口”(Advanced Configuration and Power Interface,簡稱 ACPI),這種現(xiàn)行標(biāo)準(zhǔn)得到了英特爾、東芝等公司的支持。對于 PC、筆記本電腦、服務(wù)器、甚至面向通信設(shè)備的刀片服務(wù)器等“商業(yè)成品”(commercial off-the-shelf,簡稱 COTS)硬件,ACPI 等系統(tǒng)更受青睞,不過它們表現(xiàn)出對目前盛行的 x86/IA-32 BIOS 架構(gòu)的強(qiáng)烈依賴。
嵌入式系統(tǒng)通常沒有 BIOS(在 PC/AT 的意義上),并且通常無法奢侈地配備機(jī)器抽象,來把操作系統(tǒng)與低層器件和電源管理活動隔離開來。因此,在嵌入式 Linux 中,就像在其它針對電池供電應(yīng)用的操作系統(tǒng)一樣,電源管理活動需要對操作系統(tǒng)內(nèi)核以及設(shè)備驅(qū)動程序做特殊干預(yù)。不過請注意一件重要事情,雖然動態(tài)電源管理的低層實(shí)現(xiàn)是駐留在操作系統(tǒng)內(nèi)核,但電源管理戰(zhàn)略及策略可以源自中間件和用戶應(yīng)用軟件代碼,實(shí)際也是如此。
接口和 API
理想狀況下,電源管理系統(tǒng)對于軟件堆棧的盡可能多的層次而言,幾乎是完全透明的。實(shí)際上,這正是 Transmeta 公司在其 Crusoe 架構(gòu)中遵循的路線,并且已經(jīng)成為現(xiàn)有的各種基于 BIOS 的電源管理方案的目標(biāo)。不過,擁有手持設(shè)備制造經(jīng)驗(yàn)的開發(fā)人員將證明這一事實(shí):整個(gè)系統(tǒng)的各個(gè)部分都需要某種程度的直接參與,如下所述:
內(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ū)動程序通信,這些 API 把驅(qū)動程序從完全運(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ū)動程序接口 啟用了 DPM 的設(shè)備驅(qū)動程序比默認(rèn)驅(qū)動程序具有更多“狀態(tài)”:由外部事件通過各種狀態(tài)來驅(qū)動它們,或通過來自內(nèi)核 DPM 子系統(tǒng)的回調(diào)來驅(qū)動它們,從而反映并遵循運(yùn)行策略。驅(qū)動程序 API 還允許驅(qū)動程序登記它們連接和管理的各個(gè)設(shè)備的基本運(yùn)行特征,從而實(shí)現(xiàn)更精細(xì)的策略決策。
用戶程序 API 用戶程序(應(yīng)用軟件)分為三類:
評論