2012年6月3日 星期日

減少Linux電耗,第1部分: CPUfreq子系統


Reference form IBM research.


減少Linux電耗,第1部分: CPUfreq子系統

在本系列的三篇文章中,您將從電源效率的角度全面調優自己的系統。 在第1 部分中,了解在電源效率方面調優基於Linux 的System x 服務器的各種組件和概念。 了解如何啟動Linux CPUfreq 子系統,獲取CPU 電源狀態和CPU 性能狀態,以及確保提高系統電源效率所需的5 種內核調控器。
Linux CPUfreq子系統
從2.6.0 Linux 內核開始,您可以通過CPUfreq 子系統動態調整處理器頻率。 當處理器以較低的時鐘速度運行時,它們消耗的電能和產生的熱量也相對較少。 時鐘速度的這種縮放可以控制系統在未全力運行時消耗較少電能。
CPUfreq結構利用調控器和守護程序來為系統設置靜態或動態電源策略。 動態調控器(詳見下文)可以根據CPU利用率來調整CPU頻率,從而有助於節省電能,而不會犧牲性能。 這些調控器還允許一些用戶調優,因此您可以自定義並輕鬆地更改變頻係數。 此外,sched_mc_power_savings 和sched_smt_power_savings 設置將利用整固線程來節省電能。
CPU 電源狀態(C State)和CPU/設備性能狀態(P State)
在開始CPUfreq 討論之前,我們先來看看CPU 電源狀態和CPU/設備性能狀態。
CPU 電源狀態:幾乎全是空閒
CPU電源狀態(不包括處理器運行時的 C0 狀態)是空閒狀態,處理器將解鎖並關閉組件來節省電能。 CPU電源狀態程度越深,採取的電能節省措施就越多—比如說停止處理器時鐘或停止外部中斷請求。 這些狀態幫助空閒中的系統節省電能。
此外,C1E 模式(或稱作 Enhanced C1C1 Enhanced Mode)也可以幫助空閒系統節省電能。 同樣通過降低電壓和頻率,C1E嘗試比傳統C1狀態(只會停止時鐘信號)提供更大的電能節省。 事實上,C1E能夠比任何CPUfreq調控器更快地降低電壓/頻率。
並非所有處理器都有這些選項,但是要使用C電源狀態和CIE,請確保啟用了BIOS選項 CPU C State 和 C1E(或者類似的選項),以便於在空閒時實現更大的電能節省。 一些系統支持 C3 甚至 C6 嘗試休眠狀態。
記住,CPU 電源狀態程度越深,節省的電能就越多。
CPU/設備性能狀態:運轉中
CPU/設備性能狀態是與CPU 頻率和電壓相關的運轉狀態。 CPU/設備性能狀態值越大,處理器所使用的頻率和電壓就越低。 CPUfreq 調控器使用CPU/設備性能狀態來修改頻率和降低功耗。
您需要在系統上啟用 Processor Performance States BIOS選項(或類似的選項),以便於使用CPU/設備性能狀態和CPUfreq調控器。 圖1是C和CPU/設備性能狀態的簡化圖。

圖1. CPU 電源狀態和CPU/設備性能狀態
CPUfreq 子系統的前提條件
在使用CPUfreq 子系統之前,您需要滿足下節所述的前提條件。 CPUfreq 在RHEL 5.2 中是默認啟用的(在其他分發版中通常也是啟用的)。 檢查CPUfreq 是否已經啟用的一種快捷方法是查看/sys 文件系統。 如果在/sys/devices/system/cpu/cpu*/cpufreq/ 中看到了cpufreq 目錄,則表示您的系統當前已經啟用了CPUfreq。 如果未在其中看到此目錄,則依照以下步驟確保一切就緒。
首先,確保您的處理器可以支持變頻。 有關此CPUfreq子系統的硬件列表,請參閱 參考資料 小節。
接下來,查看內核配置文件。 通常,所有需要的配置默認都已針對RHEL 5.2內核設置好,但您可能希望更改一些設置來實現所需的系統啟動狀態。 以下選項位於配置文件的 CPU Frequency scaling 部分:
 CONFIG_CPU_FREQ
必須將此選項設置為 y,以便於利用內核的CPU變頻功能。
 CONFIG_CPU_FREQ_GOV_PERFORMANCE, CONFIG_CPU_FREQ_GOV_POWERSAVE,
 CONFIG_CPU_FREQ_GOV_USERSPACE, CONFIG_CPU_FREQ_GOV_ONDEMAND,
 CONFIG_CPU_FREQ_GOV_CONSERVATIVE
這些選項分別對應各個可用的CPUfreq調控器。 要使用調控器,需要將配置選項設置為 y 或者 m。 如果將選項設置為 y,則該調控器的模塊將嵌入到內核中。 如果將選項設置為 m,則每次在啟動時都需要通過發出以下部分或全部命令來載入模塊:
 modprobe cpufreq_performance
 modprobe cpufreq_powersave
 modprobe cpufreq_userspace
 modprobe cpufreq_ondemand
 modprobe cpufreq_conservative
或者,如果選擇了 m,那麼您可以將調控器模塊添加到/etc/rc.local,以便在啟動時載入模塊。 還需注意,通過將 CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE 或 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE 設置為 y,您可以將用戶空間或性能調控器設置為默認。
此外,要使用 sched_mc_power_savings 和 sched_smt_power_savings(稍後討論),應確保在配置文件的 Processor type and features 部分將 CONFIG_SCHED_MC 和 CONFIG_SCHED_SMT 選項設置為 y。
要讓配置文件中的更改生效,您需要重建和啟動內核。 您可能知道如何執行此任務,但如果不了解細節,可以閱讀關於重建Linux內核的指南(參見 參考資料 獲取建議)。
調控器簡介
CPUfreq 子系統可以使用5 種內核調控器。 這些調控器根據特定標准設置處理器頻率;其中一些根據系統或用戶對輸入的更改而動態更改頻率。 本文將重點討論RHEL 5.2,它基於2.6.18 內核,因此所有這些調控器都可以使用。 (本系列的第2 和第3 部分將詳細討論調控器。)
性能調控器:最高的頻率
性能調控器會靜態將處理器設置為可用的最高頻率。 您可以調整此調控器可用的頻率範圍。 顧名思義,此調控器的目標的通過將處理器時鐘速度設置為最大級別而實現最大的系統性能。 此調控器默認不會嘗試提供任何電能節省,但您可以通過調優調控器來更改它所選的頻率。
電能節省調控器:最低的頻率
另一方面,電能節省調控器會靜態將處理器設置為可用的最低頻率。 您仍然可以調整此調控器可用的頻率範圍。 此調控器的作用是始終以最低的速度運行。 顯然,這有時會影響性能,因為無論處理器多麼繁忙,系統都不會提高頻率。
事實上,此調控器經常都不會節省任何電能,因為最有效的電能節省通常來自空閒時通過輸入C 電源狀態實現的節省。 使用電能節省調控器會拖慢進程的運行,因為它會以最低的頻率運行;因此,系統需要花更長的時間進入空閒狀態,然後才能獲得C 電源狀態節省。
用戶空間調控器:手動頻率
接下來介紹用戶空間調控器,它允許您手動選擇和設置頻率。 此調控器還可以與在用戶空間中運行的處理器頻率守護程序結合使用來控制頻率(我們將在第2 部分中討論關於守護程序的更多信息,並提供一些示例)。 此調控器可用於設置唯一的電源策略(不可預設,也不可從其他調控器獲取);您還可以使用它來試驗策略。
注意,用戶空間調控器本身並不會動態更改頻率;而是允許您或用戶空間程序動態選擇處理器頻率。
隨需應變調控器:基於處理器的頻率變更
2.6.10 內核中引入的隨需應變調控器是首款根據處理器利用率動態更改處理器頻率的內核調控器。 隨需應變調控器將檢查處理器利用率,如果發現其超過閥值,則會將頻率設置為可用的最高值。 如果調控器發現利用率小於閥值,則會繼續降低頻率,直到它達到可用的最低值。
您可以控制可用頻率的範圍,調控器檢查系統利用率的頻率以及利用率閥值。
保守調控器:更具漸進性的隨需應變方式
基於隨需應變調控器的保守調控器(在2.6.12 內核中引入)也是根據處理器利用率來調整頻率;但是,保守調控器稍有不同,它允許電能更加漸進性地增加。 保守調控器將檢查處理器利用率,並比較其與閥值的大小,適當地增加或減少頻率,而不是直接使用最高或最低的頻率。
您可以控制可用頻率的範圍、調控器檢查系統利用率的頻率、利用率閥值以及頻率漸進率。

後續文章
在第2 部分中,我們將更加深入地討論子系統的設置和使用。 我將為Linux CPUfreq 子系統提供一些常規設置和使用設置,以及一些不同的接口選項。 我還將討論特定於調控器的設置和管理調度程序,以便幫助您確定最合適的工具。
在第3 部分中,我將使用兩種熱門的配置工作負荷來討論各調控器對不同工作負荷的效果。


參考資料
學習
獲得產品和技術

沒有留言: