顯示具有 CPUfreq 標籤的文章。 顯示所有文章
顯示具有 CPUfreq 標籤的文章。 顯示所有文章

2012年6月3日 星期日

減少Linux耗電,第3部分: 調優結果


Reference from IBM research.

減少Linux耗電,第3部分: 調優結果

工作負載和調控器效果
電源效率是任何關心業務成本和環境問題的人應該考慮的重要因素。 在本系列的最後一篇文章中,讓我們檢查您通過調優Linux CPUfreq子系統和內核調控器以更改處理器的運行頻率,在電源效率上所造成的差異(用實際數字和圖表表示),這種更改不會 對性能造成重大影響。
在 減少Linux耗電,第2部分:一般設置和與調控器相關的設置 中,您看到瞭如何使用和調優調控器,現在您將看到一些調控器效果。 我將使用以下兩個流行的工作負載來比較性能和電量消耗,展示一個調優後的調控器如何節約電能而不會犧牲性能。
  • 一個工作負載來自SPECpower_ssj2008 基準測試,該測試評估電能和性能。
  • 一個工作負載來自一個電子商務購物應用程序,該程序在一個模擬在線購物會話期間收集許多統計數據,其中包括延遲時間和每秒的請求數量。
這些對比在一台運行Red Hat Enterprise Linux 5.2 的IBM System x® 3650 上完成。
SPECpower_ ssj2008 工作負載
以下結果來自評估電能和性能的SPECpower_ssj2008基準測試。 要查看關於這個基準測試的更多信息或查看最新官方基準測試結果,請參見SPEC Web站點(參考資料 提供了一個鏈接)。 注意,這些結果沒有針對最優性能進行調優,不應被視為針對系統的正式基準測試結果,它們只是用於研究目的的結果。
SPECpower_ssj2008 使用一個Java™ 基準測試以獲取單位為ssj_ops(ssj 操作)的性能得分,並在從100% 負載到完全閒置的負載範圍內運行這個基準測試。 得分越高,系統可以完成的計算量就越大。
SPECpower_ssj2008 還測量電能(以瓦特為單位)並在每個負載水平計算一個性能/電能比(performance-to-power)。 這個比率越高,系統的“性能/電能” 效率也就越好。
默認調控器比較
圖1比較了5個內核調控器的效果,它們都使用默認設置運行。 可調優的 sched_mc_power_savings 和 sched_smt_power_savings 被關閉,CPU頻率守護進程 cpuspeed 與userspace調控器一起運行。
回顧5 個內核調控器
Performance 調控器
靜態| 設置處理器為最高頻率| 用戶可調節頻率範圍| 最快的速度;沒有電能節約
Powersave 調控器
靜態| 設置處理器為最低頻率| 用戶可調節頻率範圍| 最慢的速度;很少的電能節約
Userspace 調控器
動態| 允許用戶手動設置頻率| 用戶可調節頻率範圍| 可用於設置獨特的電能策略
Ondemand 調控器
動態| 基於處理器使用情況更改頻率| 用戶可調節範圍,利用檢查率和閾值| 管理處理器電能利用的下降
Conservative 調控器
動態| 基於處理器使用情況更改頻率| 用戶可調節範圍、利用率檢查、閾值和頻率步頻| 管理處理器電能利用的上升和下降



圖1. 默認設置的得分和電能消耗
虛線顯示單位為 ssj_ops 的得分,ssj_ops 是一個SPECpower_ssj2008性能度量指標。 您可以看到,導致性能下降的主要因素是powersave調控器,這顯然是因為powersave調控器靜態處理器將頻率設置為盡可能低的水平,以便盡量節約電能。
實線顯示電能消耗。 同樣,powersave調控器消耗的電能比其他調控器少,但這是以犧牲性能為代價的。 另外,您還可以看到系統閒置時不同調控器之間的能耗差異。 performance調控器總是以最高頻率運行,因此它在閒置時消耗的電能要比其他調控器高10瓦特左右。 userspace調控器以及 cpuspeed 守護進程在節約電能而不損害性能方面似乎是最好的默認調控器。 我們可以通過在圖2中比較每次運行的“性能/電能”比率來確認這一點。
圖2. 默認設置下的“性能/電能” 比率
“性能/電能” 比率是SPECpower_ssj2008 計算的一個度量指標,通過比較獲得的得分和獲得該得分所耗費的電能來度量一個系統的節電程度,因此比率越高越好。
如您所見,當所有調控器以默認設置運行時,userspace調控器以及 cpuspeed 守護進程在多數負載水平下比其他調控器擁有更好的“性能/電能”比率,因此,userspace調控器的能效最高。
調優
如 減少Linux耗電,第2部分:一般設置和與調控器相關的設置 所述,有一些針對ondemand和conservative調控器的可選調優參數。 下面將介紹如何更改利用率閾值以影響調控器的能效。
回顧可調優調度器
sched_mc_power_savings 用於在內核上調度進程。
sched_smt_power_savings 用於在內核上的超線程上調度進程。



Ondemand
ondemand up_threshold 默認設置為80,表示一旦CUP利用率達到80%以上,ondemand調控器將提高頻率。 下面我將向您展示,只需將 up_threshold 更改為98,您就可以使ondemand調控器變得更有能效。
圖3比較ondemand調控器以默認配置(up_threshold 為80)運行的效果和以調優後的設置(up_threshold 為98)運行的效果。 在上述運行期間,可調優的sched_mc_power_savings 和 sched_smt_power_savings 均關閉。
圖3. ondemand 的得分和電能消耗
從圖中的虛線可以看出,默認和調優ondemand調控器獲得了非常相似的得分,可見,更改 up_threshold 不會影響性能。 但是,顯示電能消耗的實線的確顯示出輕微的差異。 如您所見,將 up_threshold 提高到98比使用默認閾值略微降低了電能消耗。
下面,我們看看圖4 中的“性能/電能” 比率。

圖4. ondemand 的“性能/電能” 比率
從圖4 可以看出,對於幾乎每一個負載水平,調優後的ondemand 調控器(利用率閾值為98)比默認ondemand 調控器的能效都略高一些。
Conservative
conservative 調控器有兩個閾值可以調優:
  • 首先,up_threshold 默認設置為80,表示一旦處理器利用率超過80%,該調控器將提高頻率。
  • 還有一個 down_threshold,默認值為20。 這表示一旦調控器發現處理器的利用率低於20%,它將逐步降低頻率以節約電能。
我將向您展示,只需將 up_threshold 更改為98並將 down_threshold 更改為95就可以調優conservative調控器,使其能效更高。 這是相當大膽的調控器調優,但我將向您展示這個經過調優的調控器的能效將更高。
圖5比較了conservative調控器以默認設置(up_threshold 為80且 down_threshold 為20)運行的結果和以調優設置(up_threshold 為98且 down_threshold 為95)運行的結果。 在上述運行中,可調優的 sched_mc_power_savings 和 sched_smt_power_savings 關閉。

圖5. conservative 的得分和電能消耗
同樣,圖5 中的虛線顯示,使用經過調優的調控器沒有性能影響。 而實線清晰地顯示,默認調控器和調優調控器之間存在電能消耗差異:調優調控器在中等水平的負載下消耗更少的電能,在50% 負載水平上減少了約40 瓦特。 這是一個較大的電能節約。 您可以通過比較圖6 中的“性能/電能” 比率確認這一點。

圖6. conservative 的“性能/電能” 比率
這些比率顯示調優的conservative 調控器在從30% 到90% 的負載水平上比默認conservative 調控器提高了能效。
調優的調控器比較
在這個小節中,我將比較調優的ondemand和conservative調控器與其他3個調控器。 圖7比較所有5個調控器,其中ondemand和conservative的閾值進行了調優。 可調優的 sched_mc_power_savings 和 sched_smt_power_savings 關閉,CPU頻率守護進程cpuspeed與userspace調控器同時運行。

圖7. 調優的調控器的得分和電能消耗
圖7再次表明,儘管powersave調控器的確比其他調控器消耗更少的電能,但它對性能有較大的負面影響,因為它只在盡可能低的頻率運行。 (我們將在下一個圖形中展示powersave與其他調控器相比之下的能效)。 其他4個調控器獲得相似的得分,不管它們是否進行了調優。 同樣,performance調控器只在盡可能高的頻率運行,您可以通過比較圖中的實線看出這在電能消耗上導致多大的差異。 與 cpuspeed 守護進程聯合運行的userspace調控器和調優的conservative調控器在電能節約方面僅次於powersave調控器。 userspace調控器在30%到50%的負載水平上比調優的conservative調控器消耗的電能略少一些,而調優的conservative調控器在50%以上的負載水平上則比userspace調控器消耗的電能更少。 我們可以通過比較它們的“性能/電能”比率(見圖8)來了解哪個調控器的能效更高。

圖8. 調優的調控器的“性能/電能” 比率
圖8顯示,調優的conservative調控器和運行 cpuspeed 的userspace調控器的能效非常相似。 最終的得分(沒有在這裡顯示)表明,調優的conservative調控器擁有最好的總體能效,但優勢並不明顯。
sched_mc_power_savings 比較
如前所述,sched_mc_power_savings 調優方法試圖合併進程以佔用盡可能低的內核資源,從而節約電能。 圖9和圖10展示運行默認conservative調控器時,sched_mc_power_savings 分別為on (1)和off (0)時的CPU利用率的對比。 以下比較展示在10%的負載水平上每個處理器的利用率,這樣系統的平均利用率為10%。

圖9. sched_mc_power_savings 關閉

圖10. sched_mc_power_savings 開啟
您可以清楚地看到兩個圖形中的差異。 圖9顯示,在 sched_mc_power_savings 關閉時,4個處理器的利用率約為15%,另外4個處理器的利用率約為5%。 圖10顯示,在 sched_mc_power_savings 開啟時,負載聚合到4個處理器上,現在它們的利用率約為20%,而其他4個處理器則閒置。 聯合使用這種調優方法和一個內核CPUfreq調控器能夠減少電能消耗,因為負載聚合能夠使一些處理器處於閒置狀態,從而以較低的頻率運行。
sched_smt_power_savings 比較
與 sched_mc_power_savings 類似,sched_smt_power_savings 調優方法試圖將超線程聚合到盡可能少的CPU上,從而節約電能。 圖11和12展示,當默認conservative調控器在一個支持超線程的系統上運行時,sched_smt_power_savings 分別為on (1)和off (0)時的CPU利用率的對比。 以下比較展示在10%的負載水平上每個處理器的利用率,這樣系統的平均利用率為10%。

圖11. sched_smt_power_savings 關閉

Figure 12. sched_smt_power_savings 開啟
同樣,當設置為開啟時,負載將聚合。 如果閒置或接近閒置的CPU 能夠使用CPUfreq 調控器來降低頻率且/或閒置C 狀態,同時結合使用這種類型的調度,那麼電能節約就有可能實現。
一個電子商務工作負載
在這個小節中,我將在另一種類型的工作負載上比較調控器的效果。 以下結果來自一個電子商務購物應用程序,該程序在一個模擬在線購物會話期間收集許多統計數據,包括延遲時間和每秒請求數。 這個應用程序使用一個Apache 前端,一個PHP 實現和一個MySQL 數據庫來創建一個可用的購物站點。 注意,這些結果沒有針對最優性能進行調優,不應被視為針對系統的正式結果。 我們將在不同的利用率負載水平上比較這個工作負載上的效果。
默認調控器比較
以下圖形比較conservative和ondemand這兩個可調優內核調控器和作為基準比較的performance調控器。 所有調控器使用默認設置運行,調優方法 sched_mc_power_savings 和 sched_smt_power_savings 在運行期間關閉。
圖13 系列展示一個總共帶有500 個客戶端的在線購物會話的統計數據。 測試系統在運行500 個客戶端時的平均利用率為8-12%。

圖13a. 性能(請求/秒)

圖13b. 延遲時間(毫秒)

Figure 13c. 平均電能(瓦特)

Figure 13d. 性能/瓦特
圖13a 展示這個購物會話的性能,單位為“請求/秒”。 您可以看到,所有3 個調控器每秒的請求數幾乎完全相同。
圖13b 顯示平均延遲時間稍微有一些區別。 conservative 調控器比performance 調控器幾乎延遲7 毫秒,但對於在線購物車這樣的應用程序來說,多數用戶不會注意到增加的幾毫秒,因此這個區別可以忽略。
圖13c 顯示平均電能消耗。 可以看出,conservative 調控器比performance 調控器大約節約了20W;也就是說,沒有處理器變頻且ondemand 調控器平均節約15W。
圖13d 通過用每秒請求數除以平均電能消耗顯示“性能/瓦特”。 三個調控器的類似性能和兩個動態調控器的電能節約意味著後者俱有更高的“性能/瓦特” 值。 conservative 調控器在8-12% 的利用率負載水平上的能效最高,緊隨其後的是ondemand 調控器。
下面,我們將在更高的負載水平上比較三個默認調控器的“性能/瓦特” 值,看看默認的conservative 調控器是否仍然比其他兩個默認調控器的能效更高。 圖14 展示了一個1,000 個客戶端的負載,這個負載導致20-25% 的平均利用率。

圖14. 針對1,000 個客戶端的默認調控器比較
從這個圖表可以看出,對於這個負載水平,conservative 調控器也是能效最高的調控器。 對於這次運行,conservative 調控器比performance 調控器節約了約25W,當它仍然可以服務幾乎完全相同的每秒請求數。 對於這個負載水平,conservative 調控器的平均請求延遲時間比其他兩個調控器慢了約5 毫秒。
最後,讓我們看看圖15 中負載水平為2,000 個客戶端時的“性能/瓦特" 值,該負載水平將測試系統的平均利用率提高到45-60%。

圖15. 針對2,000 個客戶端的默認調控器比較
對於這個負載水平,默認ondemand 調控器擁有的“性能/瓦特” 值略好一些。 ondemand 和conservative 調控器都節約了約15W,但默認conservative 調控器的性能出現降低,因為它每秒完成的請求數比其他兩個調控器少8 個,它的延遲時間比performance 調控器慢了0.15秒。 這一次ondemand 調控器是贏家,因為它實際上完成了相同數量的每秒請求數而延遲時間只比performance 調控器多50 毫秒,當然,這表示系統無需任何處理器變頻情況下實現的性能。
調優的調控器比較
現在我們將比較調優的ondemand和conservative調控器在這個工作負載下的表現。 同樣,調控器調優通過更改利用率閾值實現。 調優的conservative調控器的 up_threshold 設置為98,down_threshold 設置為95。 調優的ondemand調控器也使用 up_threshold 為98的設置運行。 我們將在圖16系列中查看在更繁重的2,000個客戶端的負載水平(平均利用率為45-60%)上這兩個調優過的調控器的效果。
較輕的負載水平不會顯示明顯的差異,因為在20%的利用率(默認的 down_threshold 設置)下,調優的調控器在所有負載水平上的表現與默認調控器相同。 調優方法 sched_mc_power_savings 和 sched_smt_power_savings 在運行期間關閉。

圖16a. 性能(請求/秒)

圖16b. 延遲時間(毫秒)

圖16c. 平均電能(瓦特)

圖16d. 性能/瓦特
圖16a 和16b 顯示,調優的conservative 調控器的性能略有降低:每秒完成的請求數減少約13 個,延遲時間比performance 調控器約多0.28 秒。 但圖16c 顯示,調優的conservative 調控器比沒有處理器變頻時大約節約55W。 即使性能略有降低,調優的conservative 調控器也是目前為止能效最高的。


結束語
在這個 3部分系列 中,我向您展示了在多數情況下,一個調優的conservative調控器(up_threshold 為98、down_threshold 為95)能夠取得最好的“性能/電能”效率。 在某些情況下,這個調控器可能會對性能有輕微負面影響。
您必須確定,以可能發生的性能降低來換取實現潛在的巨大電能節約是否值得。 如前所述,您可以使用許多針對動態內核調控器的調優方法來影響調控器的性能,這可能會反過來影響正在運行的工作負載的性能。
電能節約和性能之間總是存在一種平衡,但我希望我已經向您展示如何將性能影響降低到一個可以忽略的程度,同時使系統獲得更好的電能效率。


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

減少Linux耗電,第2部分: 一般設置和與調控器相關的設置


Reference from IBM research.

減少Linux耗電,第2部分: 一般設置和與調控器相關的設置

CPUfreq 的一般設置
我們先來介紹Linux CPUfreq 子系統的使用設置並提供一些接口選項,看看使用它是多麼容易。 先討論一些一般設置:
  • /sys 接口
  • cpuspeed 設置文件
  • cpufreq-utils
使用/sys 接口
/sys 文件系統為CPUfreq 提供用戶接口,起點是/sys/devices/system/cpu/。 其中一些文件是可寫的(由根用戶寫),其他文件是只讀的。
首先,看看/sys/devices/system/cpu/。 在這裡會找到每個邏輯CPU的目錄和 sched_mc_power_savings 可調項,如果在系統上可用的話,還會找到 sched_smt_power_savings 可調項(稍後討論)。

清單1. 檢查/sys/devices/system/cpu/ 的內容

[root@systemx ~]#
cd /sys/devices/system/cpu/

[root@systemx cpu]#
ls

cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings


在每個處理器的目錄內是一個cpufreq 目錄,它包含CPUfreq 接口:

清單2. 檢查cpufreq 目錄

[root@systemx cpu]#
cd cpu0/cpufreq/
[root@systemx cpufreq]#
ls -l
total 0 -r--r--r-- 1 root root 4096 Oct 31 14:53 affected_cpus -r---- ---- 1 root root 4096 Oct 31 14:53 cpuinfo_cur_freq -r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_max_freq -r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_min_freq -r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_frequencies -r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_governors -r--r- -r-- 1 root root 4096 Oct 31 14:53 scaling_cur_freq -r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_driver -rw-r--r-- 1 root root 0 Nov 5 11 :44 scaling_governor -rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_max_freq -rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_min_freq
          


如果調控器設置為conservative 或ondemand,還會在這裡看到與調控器同名的目錄。 我們稍後討論如何改變調控器。
對於每個調控器,都可以使用這些文件。 我們將討論每個設置的意義以及如何修改它們;然後討論這個接口之外與調控器相關的一些設置。 注意,對於每個處理器,cpufreq 目錄下的設置可以不一樣,因此要想跨處理器應用一致的策略,就必須按照後面的說明修改每個處理器的設置值。
首先,affected_cpus 顯示修改頻率會影響哪些處理器。 由於硬件和/或軟件的關聯,一些處理器的頻率是相互依賴的,必須同時修改頻率。 例如,可能會看到這種設置:

清單3. 檢查修改頻率會影響哪些處理器

[root@systemx ~]#
cd /sys/devices/system/cpu
[root@systemx cpu]#
grep . cpu*/cpufreq/affected_cpus
cpu0/cpufreq/affected_cpus:0 1 cpu1/cpufreq/affected_cpus:0 1 cpu2/cpufreq /affected_cpus:2 3 cpu3/cpufreq/affected_cpus:2 3


接下來,cpuinfo_cur_freq 顯示處理器當前的運行頻率。scaling_cur_freq 文件列出調控器當前使用的擴展頻率。
清單4. 檢查頻率

[root@systemx cpufreq]# cat cpuinfo_cur_freq 2997000 [root@systemx cpufreq]# cat scaling_cur_freq 2997000


這個接口中列出的所有頻率都以KHz 為單位。
下面一些文件提供可用處理器頻率的相關信息。cpuinfo_max_freq 和 cpuinfo_min_freq 文件包含系統可用的最大和最小頻率;scaling_available_frequencies 顯示所有可用頻率。

清單5. 檢查最大、最小和可用頻率

[root@systemx cpufreq]#
cat cpuinfo_max_freq
2997000 [root@systemx cpufreq]#
cat cpuinfo_min_freq
1998000 [root@systemx cpufreq]#
cat scaling_available_frequencies
2997000 2664000 2331000 1998000


scaling_available_governors 文件列出可用的所有調控器。 如果沒有看到全部五個調控器,要檢查在配置文件中是否啟用了所有調控器並確保按第1部分中的說明裝載了調控器的模塊。

清單6. 檢查可用的調控器

[root@systemx cpufreq]#
cat scaling_available_governors
ondemand powersave conservative userspace performance


scaling_driver 文件說明系統正在運行哪個cpufreq驅動程序。 典型的驅動程序包括 acpi、speedstep-smi、speedstep-centrino、powernor_k8、powernow_k7、longhaul 等。 如果希望改變驅動程序,需要先卸載正在使用的驅動程序,然後再裝載另一個驅動程序。 另外,在使用之前,一定要檢查驅動程序是否適用於您的處理器。

清單7. 檢查系統正在運行哪個cpufreq 驅動程序

[root@systemx cpufreq]#
cat scaling_driver
centrino


這個目錄中的其他文件可以由根用戶寫,可以通過它們修改一些cpufreq 設置。 這些文件只包含允許用戶修改的powersave 和performance 調控器設置。 其他調控器有更多設置可用,我們在下一節中討論。
首先,scaling_governor 文件顯示當前啟用的調控器。 要想改變調控器,只需把新調控器的名稱 echo 到這個文件中。 注意,要想應用一致的策略,必須對每個處理器這麼做。 例如:

清單8. 檢查啟用的調控器並改變調控器

[root@systemx ~]#
cd /sys/devices/system/cpu/
[root@systemx cpu]#
ls
cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings [root@systemx cpu]#
cat cpu0/cpufreq/scaling_governor
performance [root @systemx cpu]#
echo conservative > cpu0/cpufreq/scaling_governor
[root@systemx cpu]#
cat cpu0/cpufreq/scaling_governor
conservative


scaling_max_freq 和 scaling_min_freq 文件顯示調控器可用的最大和最小頻率。 通過把一個可用的頻率 echo 到這些文件中,用戶可以修改調控器可用頻率的範圍。 注意,這個頻率必須是 scaling_available_frequencies 中列出的頻率之一,因為這些是系統可用的所有處理器頻率。 同樣,必須對每個處理器這麼做。 例如:

清單9. 修改調控器可用的頻率

[root@systemx ~]#
cd /sys/devices/system/cpu/
[root@systemx cpu]#
cat cpu0/cpufreq/scaling_available_frequencies
2997000 2664000 2331000 1998000 [root@systemx cpu]#
cat cpu0/cpufreq/scaling_max_freq
2997000 [root @systemx cpu]#
cat cpu0/cpufreq/scaling_min_freq
1998000 [root@systemx cpu]#
echo 2331000 > cpu0/cpufreq/scaling_min_freq
[root@systemx cpu]#
cat cpu0/cpufreq/scaling_min_freq
2331000


使用cpuspeed 設置文件
除了像前面提到的那樣直接 echo 設置值,用戶還可以使用cpuspeed設置文件修改驅動程序、調控器、最大速度、最小速度、利用率閾值和 ignore_nice_load 設置。 RHEL 5.2附帶cpuspeed,但是其他Linux發行版可能不包含這個包。 如果您的發行版不包含cpuspeed,可以 下載carlthompson.net版本;README中提供安裝說明。 要想使用cpuspeed的RHEL 5.2版本,只需編輯/etc/sysconfig/cpuspeed文件,在文件中設置任何變量值,然後執行以下命令:
/etc/init.d/cpuspeed restart
這個命令會讓新設置生效。 請記住,必須裝載相應的調控器模塊,才能開始使用調控器,除非它已經是內置的。
使用cpufreq-utils
RHEL 5.2 和其他一些發行版還附帶cpufreq-utils 包,它為CPUfreq 子系統提供另一個用戶接口。 大多數其他發行版應該也包含這個包。 在安裝cpufreq-utils rpm 時,會得到兩個實用程序cpufreq-info 和cpufreq-set。
cpufreq-info實用程序列出處理器的相關信息及其CPUfreq設置,比如當前頻率、頻率限制、CPUfreq驅動程序、當前策略、當前調控器和 affected-cpus 列表。
在啟用userspace 調控器時,cpufreq-set 實用程序讓用戶可以修改每個處理器的可用頻率範圍、使用的調控器和當前運行頻率。 更多信息見cpufreq-info 和cpufreq-set 手冊頁。
與調控器相關的設置
現在討論用戶可以在內核調控器中修改的設置。
powersave 和performance 調控器
這兩個調控器分別把處理器頻率靜態地設置為最低和最高頻率。 用戶只能修改前一節中討論的設置。
userspace 調控器
現在開始討論與調控器相關的設置。 如果啟用userspace調控器,還會在cpufreq目錄中看到 scaling_setspeed 文件,根用戶可以寫這個文件。 這個調控器讓用戶或用戶空間中的程序可以交互地修改處理器頻率。 用戶可以把所需的頻率 echo 到這個文件中,一些用戶空間守護進程也可以設置這個值。 正如對前面討論的文件所做的,必須修改每個處理器的 scaling_setspeed 文件。
許多守護進程使用userspace 調控器調整處理器頻率;下面是幾個例子:
  • cpudyn(CPU動態頻率控制):這個守護進程根據處理器負載修改基本頻率,還可以在沒有活動時讓磁盤進入備用狀態以節省能源。
  • cpufreqd:這個守護進程可以對電池電壓、AC狀態、溫度、正在運行的程序、處理器使用量等做出反應。
  • cpuspeed:這個守護進程可以根據處理器需求、電源變化、溫度等改變頻率。
  • powernowd:這個調控器守護進程根據處理器負載改變基本頻率,用戶可以選擇四種行為模式。
ondemand 調控器
如果裝載ondemand調控器,會在cpufreq目錄中看到ondemand目錄。 在這個目錄中,有許多可調的設置。 對於可由根用戶寫的所有文件,可以通過 echo 新的設置值來修改。 注意,對ondemand設置的任何修改會應用於整個系統範圍,所以不需要為每個處理器修改設置。

清單10. 檢查ondemand 的可調設置

[root@systemx ~]#
cd /sys/devices/system/cpu/cpu0/cpufreq/ondemand/
[root@systemx ondemand]#
ls -l
total 0 -rw-r--r-- 1 root root 4096 Nov 19 10:30 ignore_nice_load -rw-r--r-- 1 root root 4096 Nov 19 10:30 powersave_bias -rw-r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate -r--r--r -- 1 root root 4096 Nov 19 10:30 sampling_rate_max -r--r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate_min -rw-r--r-- 1 root root 4096 Nov 19 10:30 up_threshold


ignore_nice_load 文件可以設置為0或1(0是默認設置)。 當這個參數設置為1時,任何具有“nice”值的處理器不計入總處理器利用率。 在設置為0時,所有處理器都計入利用率。 如果運行的某個程序需要大量處理器,但是您不關心運行時間,就可以使用這個設置。 如果把“nice”設置應用於進程,就可以避免它受到頻率調整的影響。
接下來,powersave_bias 文件可以略微改變ondemand調控器的行為,它在用戶不太關心性能的情況下把目標頻率降低指定的百分比,從而節省更多電力。 這個設置可以設置為1到1000之間的值,這會使頻率下降百分之0.1到百分之百。
sampling_rate(以微秒為單位)決定調控器間隔多長時間檢查處理器利用率,以便決定設置什麼頻率。 這個設置必須設置為 sampling_rate_min 和 sampling_rate_max 之間的值。
最後,up_threshold 設置允許用戶修改最大處理器利用率閾值,這個閾值觸發處理器頻率修改。 在默認情況下,up_threshold 值為80。 這意味著,內核將按照 sampling_rate 指定的時間間隔檢查處理器利用率,如果超過了百分之80,調控器會把頻率提高到可用的最大頻率。
conservative 調控器
如果裝載conservative調控器,會在cpufreq目錄中看到conservative目錄。 在這個目錄中,有許多可調的設置。 對於可由根用戶寫的所有文件,可以通過 echo 新的設置值來修改。 注意,對conservative設置的任何修改會應用於整個系統範圍,所以不需要為每個處理器修改設置。

清單11. 檢查conservative 的可調設置

[root@systemx ~]#
cd /sys/devices/system/cpu/cpu0/cpufreq/conservative/
[root@systemx conservative]#
ls -l
total 0 -rw-r--r-- 1 root root 4096 Nov 19 11:31 down_threshold -rw-r--r-- 1 root root 4096 Nov 19 11:31 freq_step -rw-r--r-- 1 root root 4096 Nov 19 11:31 ignore_nice_load -rw-r--r- - 1 root root 4096 Nov 19 11:31 sampling_down_factor -rw-r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate -r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_max -r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_min -rw-r--r-- 1 root root 4096 Nov 19 11:31 up_threshold


ignore_nice_load、sampling_rate、sampling_rate_max、sampling_rate_min 和 up_threshold 設置與前面討論的ondemand調控器中的設置相同。
conservative調控器還允許用戶設置 down_threshold。 例如,在默認情況下 down_threshold 設置為20。 這意味著,內核將按照 sampling_rate 指定的時間間隔檢查處理器利用率,如果低於百分之20,調控器會降低頻率。
freq_step 設置修改調控器在調整CPU頻率時使用的頻率步長(包括提高和降低兩個方向)。 在默認情況下,這個值設置為5,這意味著,在每次決定調整頻率時,調控器調整頻率的幅度為最大或最小頻率的百分之5。 如果把這個值設置為100,這個調控器的表現會與ondemand調控器完全一樣。
最後,sampling_down_factor 作為 sampling_rate 的乘數,放寬處理器利用率取樣的時間間隔。 例如,如果 sampling_rate 設置為10,000,而 sampling_down_factor 設置為2,那麼處理器利用率取樣的時間間隔為20,000微秒。
調度器可調項
現在,討論兩個調度器可調項—
  • sched_mc_power_savings 用於在核上調度進程。
  • sched_smt_power_savings 用於在核上的超線程上調度進程。
sched_mc_power_savings
sched_mc_power_savings 是/sys/devices/system/cpu/目錄中的調度器可調項。 如果要使用這個可調項,不要忘了把 CONFIG_SCHED_MC 配置文件選項設置為 y(見 減少Linux耗電,第1部分:CPUfreq子系統 中的設置部分)。

清單12. 檢查sched_mc_power_savings 的位置

[root@systemx ~]#
cd /sys/devices/system/cpu/
[root@systemx cpu]#
ls -l
total 0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7 - rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings


sched_mc_power_savings 文件可以設置為0或1;0是默認設置。 在設置為1時,調度器嘗試在盡可能少的核上調度進程,讓其他核可以空閒。 換句話說,如果所有處理器都不太忙,那麼 sched_mc_power_savings 嘗試把工作整合在盡可能少的處理器上。 然後就可以讓一些處理器空閒,從而進一步節省電力,尤其是在處理器支持C狀態等深度睡眠狀態的情況下(在這種狀態下處理器在空閒時只消耗非常少的電力)。 實際節省的電力取決於許多因素,包括可用處理器的數量和正在運行哪種CPUfreq調控器。 當 sched_mc_power_savings 設置為0時,不執行特殊的調度。
sched_smt_power_savings
sched_smt_power_savings 可調項也是/sys/devices/system/cpu/目錄中的調度器可調項;但是,這個可調項只適用於支持超線程的系統。 如果要使用這個可調項,不要忘了把 CONFIG_SCHED_SMT 配置文件選項設置為 y(見第1部分中的設置部分)。

清單13. 檢查sched_smt_power_savings 的位置

[root@systemx ~]#
cd /sys/devices/system/cpu/
[root@systemx cpu]#
ls -l
total 0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7 - rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings -rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_smt_power_savings


與 sched_mc_power_savings 設置相似,sched_smt_power_savings 文件可以設置為0或1;0是默認設置。 在設置為1時,調度器嘗試在核上盡可能少的超線程上調度進程,讓其他超線程可以空閒,進而通過空閒C狀態節省電力。
結束語
在第3 部分中,我將以兩個流行的配置工作負載為例,討論每個調控器在不同工作負載上可以產生的效果。
參考資料
學習
獲得產品和技術