Linux 2.6 內(nèi)核中的最新電源管理技術(shù)綜述
發(fā)布時間:2008/8/19 0:00:00 訪問次數(shù):406
cpufreq 的由來
隨著 energy efficient computing 和 performance per watt 等概念的推廣以及高級配置與電源接口acpi(advanced configuration and power interface)標(biāo)準(zhǔn)的發(fā)展,目前市場上的主流 cpu 都提供了對變頻(frequency scaling)技術(shù)的支持。例如intel®處理器所支持的 enhanced speedstep® 技術(shù)和 amd® 處理器所支持的 powernow! ® 技術(shù),另外像最新的powerpc®、arm®、sparc® 和 superh® 等處理器中也提供了類似的支持。參考資料中列出了當(dāng)前 linux 2.6內(nèi)核所支持的具備變頻技術(shù)的處理器。需要注意的是,這里要討論的變頻技術(shù)與大家以前所熟知的超頻是兩個不同的概念。超頻是指通過提高核心電壓等手段讓處理器工作在非標(biāo)準(zhǔn)頻率下的行為,這往往會造成 cpu 使用壽命縮短以及系統(tǒng)穩(wěn)定性下降等嚴(yán)重后果。
而變頻技術(shù)是指cpu硬件本身支持在不同的頻率下運(yùn)行,系統(tǒng)在運(yùn)行過程中可以根據(jù)隨時可能發(fā)生變化的系統(tǒng)負(fù)載情況動態(tài)在這些不同的運(yùn)行頻率之間進(jìn)行切換,從而達(dá)到對性能和功耗做到二者兼顧的目的。
雖然多個處理器生產(chǎn)廠家都提供了對變頻技術(shù)的支持,但是其硬件實(shí)現(xiàn)和使用方法必然存在著細(xì)微甚至巨大的差別。這就使得每個處理器生產(chǎn)廠家都需要按照其特殊的硬件實(shí)現(xiàn)和使用方法向內(nèi)核中添加代碼,從而讓自己產(chǎn)品中的變頻技術(shù)在 linux 中得到支持和使用。然而,這種內(nèi)核開發(fā)模式所導(dǎo)致的后果是各個廠家的實(shí)現(xiàn)代碼散落在 linux 內(nèi)核代碼樹的各個角落里,各種不同的實(shí)現(xiàn)之間沒有任何代碼是共享的,這給內(nèi)核的維護(hù)以及將來添加對新的產(chǎn)品的支持都帶來了巨大的開銷,并直接導(dǎo)致了 cpufreq 內(nèi)核子系統(tǒng)的誕生。實(shí)際上,正如前文所說,發(fā)明變頻技術(shù)的目的是為了能夠讓系統(tǒng)在運(yùn)行過程中隨時根據(jù)系統(tǒng)負(fù)載的變化動態(tài)調(diào)整 cpu 的運(yùn)行頻率。這件事情可以分為兩個部分,一部分是“做什么”的問題,另一部分是“怎么做”的問題!白鍪裁础笔侵溉绾胃鶕(jù)系統(tǒng)負(fù)載的動態(tài)變化挑選出 cpu 合適的運(yùn)行頻率,而“怎么做”就是要按照選定的運(yùn)行頻率在選定的時間對 cpu 進(jìn)行設(shè)置,使之真正工作在這一頻率上。這也就是我們在軟件設(shè)計中經(jīng)常會遇到的機(jī)制 mechanism 與策略 policy 的問題,而設(shè)計良好的軟件會在架構(gòu)上保證二者是被清晰的隔離開的并通過規(guī)范定義的接口進(jìn)行通信。
cpufreq 的設(shè)計和使用
為了解決前文所提到的問題,一個新的內(nèi)核子系統(tǒng)—— cpufreq 應(yīng)運(yùn)而生了。cpufreq 為在linux 內(nèi)核中更好的支持不同 cpu 的變頻技術(shù)提供了一個統(tǒng)一的設(shè)計框架,其軟件結(jié)構(gòu)如圖 1 所示。
圖 1. cpufreq 的軟件結(jié)構(gòu)
如圖 1 所示,cpufreq 在設(shè)計上主要分為以下三個模塊:
cpufreq 模塊(cpufreq module)對如何在底層控制各種不同cpu 所支持的變頻技術(shù)以及如何在上層根據(jù)系統(tǒng)負(fù)載動態(tài)選擇合適的運(yùn)行頻率進(jìn)行了封裝和抽象,并在二者之間定義了清晰的接口,從而在設(shè)計上完成了前文所提到的對 mechanism 與policy 的分離。
在 cpufreq 模塊的底層,各個cpu 生產(chǎn)廠商只需根據(jù)其變頻技術(shù)的硬件實(shí)現(xiàn)和使用方法提供與其 cpu 相關(guān)的變頻驅(qū)動程序(cpu-specific drivers),例如 intel 需要提供支持enhanced speedstep 技術(shù)的 cpu 驅(qū)動程序,而 amd 則需要提供支持 powernow! 技術(shù)的 cpu 驅(qū)動程序。
在 cpufreq 模塊的上層,governor 作為選擇合適的目標(biāo)運(yùn)行頻率的決策者,根據(jù)一定的標(biāo)準(zhǔn)在適當(dāng)?shù)臅r刻選擇出 cpu 適合的運(yùn)行頻率,并通過 cpufreq 模塊定義的接口操作底層與 cpu 相關(guān)的變頻驅(qū)動程序,將 cpu 設(shè)置運(yùn)行在選定的運(yùn)行頻率上。
目前最新的 linux 內(nèi)核中提供了 performance 、powersave 、userspace、conservative 和 ondemand 五種 governors 供用戶選擇使用,它們在選擇 cpu 合適的運(yùn)行頻率時使用的是各自不同的標(biāo)準(zhǔn)并分別適用于不同的應(yīng)用場景。用戶在同一時間只能選擇其中一個 governor 使用,但是可以在系統(tǒng)運(yùn)行過程中根據(jù)應(yīng)用需求的變化而切換使用另一個 governor 。
這種設(shè)計帶來的好處是使得 governor 和 cpu 相關(guān)的變頻驅(qū)動程序的開發(fā)可以相互獨(dú)立進(jìn)行,并在最大限度上實(shí)現(xiàn)代碼重用,內(nèi)核開發(fā)人員在編寫和試驗(yàn)新的 governor 時不會再陷入到某款特定 cpu 的變頻技術(shù)的硬件實(shí)現(xiàn)細(xì)節(jié)中去,而 cpu 生產(chǎn)廠商在向 linux 內(nèi)核中添加支持其特定的 cpu 變頻技術(shù)的代碼時只需提供一個相對來說簡單了很多的驅(qū)動程序,而不必考慮在各種不同的應(yīng)用場景中如何選擇合適的運(yùn)行頻率這些復(fù)雜的問題。
內(nèi)核中的 cpufreq 子系統(tǒng)通過 sysfs 文件系統(tǒng)向上層應(yīng)用提供了用戶接口,對于系統(tǒng)中的每一個 cpu 而言,其 cpufreq 的 sysfs 用戶接口位于 /sys/devices/system/cpu/cpux/cpufreq/ 目錄下,其中 x 代表 processor id ,與 /proc/cpuinfo 中的信息相對應(yīng)。以cpu0
cpufreq 的由來
隨著 energy efficient computing 和 performance per watt 等概念的推廣以及高級配置與電源接口acpi(advanced configuration and power interface)標(biāo)準(zhǔn)的發(fā)展,目前市場上的主流 cpu 都提供了對變頻(frequency scaling)技術(shù)的支持。例如intel®處理器所支持的 enhanced speedstep® 技術(shù)和 amd® 處理器所支持的 powernow! ® 技術(shù),另外像最新的powerpc®、arm®、sparc® 和 superh® 等處理器中也提供了類似的支持。參考資料中列出了當(dāng)前 linux 2.6內(nèi)核所支持的具備變頻技術(shù)的處理器。需要注意的是,這里要討論的變頻技術(shù)與大家以前所熟知的超頻是兩個不同的概念。超頻是指通過提高核心電壓等手段讓處理器工作在非標(biāo)準(zhǔn)頻率下的行為,這往往會造成 cpu 使用壽命縮短以及系統(tǒng)穩(wěn)定性下降等嚴(yán)重后果。
而變頻技術(shù)是指cpu硬件本身支持在不同的頻率下運(yùn)行,系統(tǒng)在運(yùn)行過程中可以根據(jù)隨時可能發(fā)生變化的系統(tǒng)負(fù)載情況動態(tài)在這些不同的運(yùn)行頻率之間進(jìn)行切換,從而達(dá)到對性能和功耗做到二者兼顧的目的。
雖然多個處理器生產(chǎn)廠家都提供了對變頻技術(shù)的支持,但是其硬件實(shí)現(xiàn)和使用方法必然存在著細(xì)微甚至巨大的差別。這就使得每個處理器生產(chǎn)廠家都需要按照其特殊的硬件實(shí)現(xiàn)和使用方法向內(nèi)核中添加代碼,從而讓自己產(chǎn)品中的變頻技術(shù)在 linux 中得到支持和使用。然而,這種內(nèi)核開發(fā)模式所導(dǎo)致的后果是各個廠家的實(shí)現(xiàn)代碼散落在 linux 內(nèi)核代碼樹的各個角落里,各種不同的實(shí)現(xiàn)之間沒有任何代碼是共享的,這給內(nèi)核的維護(hù)以及將來添加對新的產(chǎn)品的支持都帶來了巨大的開銷,并直接導(dǎo)致了 cpufreq 內(nèi)核子系統(tǒng)的誕生。實(shí)際上,正如前文所說,發(fā)明變頻技術(shù)的目的是為了能夠讓系統(tǒng)在運(yùn)行過程中隨時根據(jù)系統(tǒng)負(fù)載的變化動態(tài)調(diào)整 cpu 的運(yùn)行頻率。這件事情可以分為兩個部分,一部分是“做什么”的問題,另一部分是“怎么做”的問題!白鍪裁础笔侵溉绾胃鶕(jù)系統(tǒng)負(fù)載的動態(tài)變化挑選出 cpu 合適的運(yùn)行頻率,而“怎么做”就是要按照選定的運(yùn)行頻率在選定的時間對 cpu 進(jìn)行設(shè)置,使之真正工作在這一頻率上。這也就是我們在軟件設(shè)計中經(jīng)常會遇到的機(jī)制 mechanism 與策略 policy 的問題,而設(shè)計良好的軟件會在架構(gòu)上保證二者是被清晰的隔離開的并通過規(guī)范定義的接口進(jìn)行通信。
cpufreq 的設(shè)計和使用
為了解決前文所提到的問題,一個新的內(nèi)核子系統(tǒng)—— cpufreq 應(yīng)運(yùn)而生了。cpufreq 為在linux 內(nèi)核中更好的支持不同 cpu 的變頻技術(shù)提供了一個統(tǒng)一的設(shè)計框架,其軟件結(jié)構(gòu)如圖 1 所示。
圖 1. cpufreq 的軟件結(jié)構(gòu)
如圖 1 所示,cpufreq 在設(shè)計上主要分為以下三個模塊:
cpufreq 模塊(cpufreq module)對如何在底層控制各種不同cpu 所支持的變頻技術(shù)以及如何在上層根據(jù)系統(tǒng)負(fù)載動態(tài)選擇合適的運(yùn)行頻率進(jìn)行了封裝和抽象,并在二者之間定義了清晰的接口,從而在設(shè)計上完成了前文所提到的對 mechanism 與policy 的分離。
在 cpufreq 模塊的底層,各個cpu 生產(chǎn)廠商只需根據(jù)其變頻技術(shù)的硬件實(shí)現(xiàn)和使用方法提供與其 cpu 相關(guān)的變頻驅(qū)動程序(cpu-specific drivers),例如 intel 需要提供支持enhanced speedstep 技術(shù)的 cpu 驅(qū)動程序,而 amd 則需要提供支持 powernow! 技術(shù)的 cpu 驅(qū)動程序。
在 cpufreq 模塊的上層,governor 作為選擇合適的目標(biāo)運(yùn)行頻率的決策者,根據(jù)一定的標(biāo)準(zhǔn)在適當(dāng)?shù)臅r刻選擇出 cpu 適合的運(yùn)行頻率,并通過 cpufreq 模塊定義的接口操作底層與 cpu 相關(guān)的變頻驅(qū)動程序,將 cpu 設(shè)置運(yùn)行在選定的運(yùn)行頻率上。
目前最新的 linux 內(nèi)核中提供了 performance 、powersave 、userspace、conservative 和 ondemand 五種 governors 供用戶選擇使用,它們在選擇 cpu 合適的運(yùn)行頻率時使用的是各自不同的標(biāo)準(zhǔn)并分別適用于不同的應(yīng)用場景。用戶在同一時間只能選擇其中一個 governor 使用,但是可以在系統(tǒng)運(yùn)行過程中根據(jù)應(yīng)用需求的變化而切換使用另一個 governor 。
這種設(shè)計帶來的好處是使得 governor 和 cpu 相關(guān)的變頻驅(qū)動程序的開發(fā)可以相互獨(dú)立進(jìn)行,并在最大限度上實(shí)現(xiàn)代碼重用,內(nèi)核開發(fā)人員在編寫和試驗(yàn)新的 governor 時不會再陷入到某款特定 cpu 的變頻技術(shù)的硬件實(shí)現(xiàn)細(xì)節(jié)中去,而 cpu 生產(chǎn)廠商在向 linux 內(nèi)核中添加支持其特定的 cpu 變頻技術(shù)的代碼時只需提供一個相對來說簡單了很多的驅(qū)動程序,而不必考慮在各種不同的應(yīng)用場景中如何選擇合適的運(yùn)行頻率這些復(fù)雜的問題。
內(nèi)核中的 cpufreq 子系統(tǒng)通過 sysfs 文件系統(tǒng)向上層應(yīng)用提供了用戶接口,對于系統(tǒng)中的每一個 cpu 而言,其 cpufreq 的 sysfs 用戶接口位于 /sys/devices/system/cpu/cpux/cpufreq/ 目錄下,其中 x 代表 processor id ,與 /proc/cpuinfo 中的信息相對應(yīng)。以cpu0
熱門點(diǎn)擊
- CPU學(xué)習(xí) (Cache Coherence
- 瑞薩推出具有1Mbyte片內(nèi)SRAM的32位
- MAP譯碼器嵌入式狀態(tài)信息存儲機(jī)制設(shè)計
- Atmel 在AT91SAM3中使用ARM3
- 統(tǒng)一建模語言UML在嵌入式系統(tǒng)設(shè)計中的應(yīng)用
- 全路由器掃描
- 嵌入式中C和匯編的一些技巧
- 基于ARM平臺的GPRS CQT測試系統(tǒng)的設(shè)
- 嵌入式系統(tǒng)軟件及編程語言
- 中文資料:vxwork bsp的制作1
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點(diǎn)是“靈動”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究