<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > Linux2.6內(nèi)核中最新電源管理技術(shù)分析及未來(lái)發(fā)展

          Linux2.6內(nèi)核中最新電源管理技術(shù)分析及未來(lái)發(fā)展

          作者: 時(shí)間:2016-12-07 來(lái)源:網(wǎng)絡(luò) 收藏

            從 Linux? 2.6內(nèi)核及整個(gè) software stack (包括 kernel、middleware 以及各種用戶態(tài) utility)如何添加對(duì)這些創(chuàng)新的節(jié)能技術(shù)的支持這一角度,為讀者介紹 Linux 操作系統(tǒng)近幾年來(lái)在電源管理方面所取得的長(zhǎng)足進(jìn)步以及未來(lái)的發(fā)展方向。

          本文引用地址:http://www.ex-cimer.com/article/201612/327367.htm

            作為本系列文章的開(kāi)篇之作,首先要向大家介紹的是 cpufreq,它是 Linux 2.6內(nèi)核為了更好的支持近年來(lái)在各款主流CPU 處理器中出現(xiàn)的變頻技術(shù)而新增的一個(gè)內(nèi)核子系統(tǒng)。

            Cpufreq 的由來(lái)

            隨著 energy efficient computing 和 performance per watt 等概念的推廣以及高級(jí)配置與電源接口ACPI(Advanced Configuration and Power Interface)標(biāo)準(zhǔn)的發(fā)展,目前市場(chǎng)上的主流 CPU 都提供了對(duì)變頻(frequency scaling)技術(shù)的支持。例如Intel?處理器所支持的 Enhanced SpeedStep? 技術(shù)和 AMD? 處理器所支持的 PowerNow! ? 技術(shù),另外像最新的PowerPC?、ARM?、SPARC? 和 SuperH? 等處理器中也提供了類似的支持。參考資料中列出了當(dāng)前 Linux 2.6內(nèi)核所支持的具備變頻技術(shù)的處理器。需要注意的是,這里要討論的變頻技術(shù)與大家以前所熟知的超頻是兩個(gè)不同的概念。超頻是指通過(guò)提高核心電壓等手段讓處理器工作在非標(biāo)準(zhǔn)頻率下的行為,這往往會(huì)造成 CPU 使用壽命縮短以及系統(tǒng)穩(wěn)定性下降等嚴(yán)重后果。

            而變頻技術(shù)是指CPU硬件本身支持在不同的頻率下運(yùn)行,系統(tǒng)在運(yùn)行過(guò)程中可以根據(jù)隨時(shí)可能發(fā)生變化的系統(tǒng)負(fù)載情況動(dòng)態(tài)在這些不同的運(yùn)行頻率之間進(jìn)行切換,從而達(dá)到對(duì)性能和功耗做到二者兼顧的目的。

            雖然多個(gè)處理器生產(chǎn)廠家都提供了對(duì)變頻技術(shù)的支持,但是其硬件實(shí)現(xiàn)和使用方法必然存在著細(xì)微甚至巨大的差別。這就使得每個(gè)處理器生產(chǎn)廠家都需要按照其特殊的硬件實(shí)現(xiàn)和使用方法向內(nèi)核中添加代碼,從而讓自己產(chǎn)品中的變頻技術(shù)在 Linux 中得到支持和使用。然而,這種內(nèi)核開(kāi)發(fā)模式所導(dǎo)致的后果是各個(gè)廠家的實(shí)現(xiàn)代碼散落在 Linux 內(nèi)核代碼樹(shù)的各個(gè)角落里,各種不同的實(shí)現(xiàn)之間沒(méi)有任何代碼是共享的,這給內(nèi)核的維護(hù)以及將來(lái)添加對(duì)新的產(chǎn)品的支持都帶來(lái)了巨大的開(kāi)銷,并直接導(dǎo)致了 cpufreq 內(nèi)核子系統(tǒng)的誕生。實(shí)際上,正如前文所說(shuō),發(fā)明變頻技術(shù)的目的是為了能夠讓系統(tǒng)在運(yùn)行過(guò)程中隨時(shí)根據(jù)系統(tǒng)負(fù)載的變化動(dòng)態(tài)調(diào)整 CPU 的運(yùn)行頻率。這件事情可以分為兩個(gè)部分,一部分是“做什么”的問(wèn)題,另一部分是“怎么做”的問(wèn)題。“做什么”是指如何根據(jù)系統(tǒng)負(fù)載的動(dòng)態(tài)變化挑選出 CPU 合適的運(yùn)行頻率,而“怎么做”就是要按照選定的運(yùn)行頻率在選定的時(shí)間對(duì) CPU 進(jìn)行設(shè)置,使之真正工作在這一頻率上。這也就是我們?cè)谲浖O(shè)計(jì)中經(jīng)常會(huì)遇到的機(jī)制 mechanism 與策略 policy 的問(wèn)題,而設(shè)計(jì)良好的軟件會(huì)在架構(gòu)上保證二者是被清晰的隔離開(kāi)的并通過(guò)規(guī)范定義的接口進(jìn)行通信。

            Cpufreq 的設(shè)計(jì)和使用

            為了解決前文所提到的問(wèn)題,一個(gè)新的內(nèi)核子系統(tǒng)—— cpufreq 應(yīng)運(yùn)而生了。Cpufreq 為在Linux 內(nèi)核中更好的支持不同 CPU 的變頻技術(shù)提供了一個(gè)統(tǒng)一的設(shè)計(jì)框架,其軟件結(jié)構(gòu)如圖 1 所示。

            圖 1. Cpufreq 的軟件結(jié)構(gòu)

            如圖 1 所示,cpufreq 在設(shè)計(jì)上主要分為以下三個(gè)模塊:

            Cpufreq 模塊(cpufreq module)對(duì)如何在底層控制各種不同CPU 所支持的變頻技術(shù)以及如何在上層根據(jù)系統(tǒng)負(fù)載動(dòng)態(tài)選擇合適的運(yùn)行頻率進(jìn)行了封裝和抽象,并在二者之間定義了清晰的接口,從而在設(shè)計(jì)上完成了前文所提到的對(duì) mechanism 與policy 的分離。

            在 cpufreq 模塊的底層,各個(gè)CPU 生產(chǎn)廠商只需根據(jù)其變頻技術(shù)的硬件實(shí)現(xiàn)和使用方法提供與其 CPU 相關(guān)的變頻驅(qū)動(dòng)程序(CPU-specific drivers),例如 Intel 需要提供支持Enhanced SpeedStep 技術(shù)的 CPU 驅(qū)動(dòng)程序,而 AMD 則需要提供支持 PowerNow! 技術(shù)的 CPU 驅(qū)動(dòng)程序。

            在 cpufreq 模塊的上層,governor 作為選擇合適的目標(biāo)運(yùn)行頻率的決策者,根據(jù)一定的標(biāo)準(zhǔn)在適當(dāng)?shù)臅r(shí)刻選擇出 CPU 適合的運(yùn)行頻率,并通過(guò) cpufreq 模塊定義的接口操作底層與 CPU 相關(guān)的變頻驅(qū)動(dòng)程序,將 CPU 設(shè)置運(yùn)行在選定的運(yùn)行頻率上。

            目前最新的 Linux 內(nèi)核中提供了 performance 、powersave 、userspace、conservative 和 ondemand 五種 governors 供用戶選擇使用,它們?cè)谶x擇 CPU 合適的運(yùn)行頻率時(shí)使用的是各自不同的標(biāo)準(zhǔn)并分別適用于不同的應(yīng)用場(chǎng)景。用戶在同一時(shí)間只能選擇其中一個(gè) governor 使用,但是可以在系統(tǒng)運(yùn)行過(guò)程中根據(jù)應(yīng)用需求的變化而切換使用另一個(gè) governor 。

            這種設(shè)計(jì)帶來(lái)的好處是使得 governor 和 CPU 相關(guān)的變頻驅(qū)動(dòng)程序的開(kāi)發(fā)可以相互獨(dú)立進(jìn)行,并在最大限度上實(shí)現(xiàn)代碼重用,內(nèi)核開(kāi)發(fā)人員在編寫(xiě)和試驗(yàn)新的 governor 時(shí)不會(huì)再陷入到某款特定 CPU 的變頻技術(shù)的硬件實(shí)現(xiàn)細(xì)節(jié)中去,而 CPU 生產(chǎn)廠商在向 Linux 內(nèi)核中添加支持其特定的 CPU 變頻技術(shù)的代碼時(shí)只需提供一個(gè)相對(duì)來(lái)說(shuō)簡(jiǎn)單了很多的驅(qū)動(dòng)程序,而不必考慮在各種不同的應(yīng)用場(chǎng)景中如何選擇合適的運(yùn)行頻率這些復(fù)雜的問(wèn)題。

            內(nèi)核中的 cpufreq 子系統(tǒng)通過(guò) sysfs 文件系統(tǒng)向上層應(yīng)用提供了用戶接口,對(duì)于系統(tǒng)中的每一個(gè) CPU 而言,其 cpufreq 的 sysfs 用戶接口位于 /sys/devices/system/cpu/cpuX/cpufreq/ 目錄下,其中 X 代表 processor id ,與 /proc/cpuinfo 中的信息相對(duì)應(yīng)。以cpu0 為例,用戶一般會(huì)在該目錄下觀察到以下文件:

            $ ls -F /sys/devices/system/cpu/cpu0/cpufreq/

            affected_cpus

            cpuinfo_cur_freq

            cpuinfo_max_freq

            cpuinfo_min_freq

            ondemand/

            scaling_available_frequencies

            scaling_available_governors

            scaling_cur_freq

            scaling_driver

            scaling_governor

            scaling_max_freq

            scaling_min_freq

            stats/

            這其中的所有可讀文件都可以使用 cat 命令進(jìn)行讀操作,另外所有可寫(xiě)文件都可以使用 echo 命令進(jìn)行寫(xiě)操作。其中cpuinfo_max_freq 和 cpuinfo_min_freq 分別給出了CPU 硬件所支持的最高運(yùn)行頻率及最低運(yùn)行頻率, cpuinfo_cur_freq 則會(huì)從 CPU 硬件寄存器中讀取 CPU 當(dāng)前所處的運(yùn)行頻率。雖然 CPU 硬件支持多種不同的運(yùn)行頻率,但是在有些場(chǎng)合下用戶可以只選擇使用其中的一個(gè)子集,這種控制是通過(guò)scaling_max_freq 和 scaling_min_freq 進(jìn)行的。Governor在選擇合適的運(yùn)行頻率時(shí)只會(huì)在 scaling_max_freq 和scaling_min_freq 所確定的頻率范圍內(nèi)進(jìn)行選擇,這也就是scaling_available_frequencies 所顯示的內(nèi)容。與cpuinfo_cur_freq 不同, scaling_cur_freq 返回的是cpufreq 模塊緩存的 CPU 當(dāng)前運(yùn)行頻率,而不會(huì)對(duì) CPU 硬件寄存器進(jìn)行檢查。 scaling_available_governors 會(huì)告訴用戶當(dāng)前有哪些 governors 可供用戶使用,而 scaling_driver 則會(huì)顯示該 CPU 所使用的變頻驅(qū)動(dòng)程序。 Stats 目錄下給出了對(duì) CPU 各種運(yùn)行頻率的使用統(tǒng)計(jì)情況,例如 CPU 在各種頻率下的運(yùn)行時(shí)間以及在各種頻率之間的變頻次數(shù)。 Ondemand 目錄則與 ondemand governor 相關(guān),在后文會(huì)進(jìn)行相應(yīng)的介紹。

            通過(guò)以上的介紹,大家對(duì)如何使用 cpufreq 通過(guò) sysfs 提供的用戶接口已經(jīng)有了大致的了解,但是對(duì)于絕大部分用戶而言,逐一操作這些文件既費(fèi)力又耗時(shí)。因此 Dominik 等人開(kāi)發(fā)了cpufrequtils 工具包[2],為用戶提供了更加簡(jiǎn)便的對(duì)內(nèi)核cpufreq 子系統(tǒng)的操作接口。通過(guò) cpufreq-info 的輸出,讀者可以很清楚的看到剛剛在上面介紹過(guò)的/sys/devices/system/cpu/cpuX/cpufreq/ 目錄下各個(gè)文件的內(nèi)容。

            $ cpufreq-info

            cpufrequtils 002: cpufreq-info (C) Dominik Brodowski

            2004-2006

            Report errors and bugs to linux@brodo.de, please.

            analyzing CPU 0:

            driver: acpi-cpufreq

            CPUs which need to switch frequency at the same time:

            0 1

            hardware limits: 1000 MHz - 1.67 GHz

            available frequency steps: 1.67 GHz, 1.33 GHz, 1000

            MHz

            available cpufreq governors: userspace, conservative,

            ondemand, powersave, performance

            current policy: frequency should be within 1000 MHz

            and 1.67 GHz.

            The governor “ondemand” may decide which

            speed to use

            within this range.

            current CPU frequency is 1000 MHz.

            analyzing CPU 1:

            driver: acpi-cpufreq

            CPUs which need to switch frequency at the same time:

            0 1

            hardware limits: 1000 MHz - 1.67 GHz

            available frequency steps: 1.67 GHz, 1.33 GHz, 1000

            MHz

            available cpufreq governors: userspace, conservative,

            ondemand, powersave, performance

            current policy: frequency should be within 1000 MHz

            and 1.67 GHz.

            The governor “ondemand” may decide which

            speed to use

            within this range.

            current CPU frequency is 1000 MHz.

            Ondemand governor 的由來(lái)及其實(shí)現(xiàn)剛剛我們?cè)?cpufreq-info 的輸出中可以看到 cpufreq 子系統(tǒng)一共提供了五種 governors 供用戶選擇使用,它們分別是 userspace,conservative,ondemand,powersave 和performance。在最新的內(nèi)核中如果用戶不進(jìn)行額外設(shè)置的話,ondemand 會(huì)被作為默認(rèn)的 governor 使用。為了理解是什么原因造成了這種現(xiàn)狀,我們?cè)谶@里帶領(lǐng)讀者回顧一下 cpufreq 子系統(tǒng)中的governor在內(nèi)核中的開(kāi)發(fā)歷史。

          Cpufreq 作為一個(gè)子系統(tǒng)最早被加入到 Linux 內(nèi)核中時(shí)只配備了三個(gè)governors ,分別是performance、powersave 和userspace。當(dāng)用戶選擇使用 performance governor 時(shí),CPU會(huì)固定工作在其支持的最高運(yùn)行頻率上;當(dāng)用戶選擇使用powersave governor 時(shí),CPU會(huì)固定工作在其支持的最低運(yùn)行頻率上。因此這兩種 governors 都屬于靜態(tài) governor ,即在使用它


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: 電源管理技術(shù)Linux2.

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();