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