Linux下CPU的手動頻率設定


在Linux中,內核的開發者定義了一套框架模型來完成CPU頻率動態調整這一目的,它就是CPU Freq系統。如下為CPU的幾種模式(governor參數):
  
ondemand:    系統默認的超頻模式,按需調節,內核提供的功能,不是很強大,但有效實現了動態頻率調節,平時以低速方式運行,當系統負載提高時候自動提高頻率。以這種模式運行不會因為降頻造成性能降低,同時也能節約電能和降低溫度。一般官方內核默認的方式都是ondemand。 interactive:  交互模式,直接上最高頻率,然后看CPU負荷慢慢降低,比較耗電。Interactive 是以 CPU 排程數量而調整頻率,從而實現省電。InteractiveX 是以 CPU 負載來調整 CPU 頻率,不會過度把頻率調低。所以比 Interactive 反應好些,但是省電的效果一般。 conservative:  保守模式,類似於ondemand,但調整相對較緩,想省電就用他吧。Google官方內核,kang內核默認模式。 smartass:    聰明模式,是I和C模式的升級,該模式在比interactive 模式不差的響應的前提下會做到了更加省電。 performance:  性能模式!只有最高頻率,從來不考慮消耗的電量,性能沒得說,但是耗電量。 powersave    省電模式,通常以最低頻率運行。 userspace:   用戶自定義模式,系統將變頻策略的決策權交給了用戶態應用程序,並提供了相應的接口供用戶態應用程序調節CPU 運行頻率使用。也就是長期以來都在用的那個模式。可以通過手動編輯配置文件進行配置 Hotplug:    類似於ondemand, 但是cpu會在關屏下嘗試關掉一個cpu,並且帶有deep sleep,比較省電。

 

  眾所周知的是,CPU的頻率和它的實際性能特別是整數運算能力上有着相當強的關聯性。但同時CPU的頻率也跟它的功耗成正比,而功耗是有一個TDP的熱功耗上限。根據當下多核CPU、多任務的趨勢我們很容易就聯想到在一個系統上如果存在多個任務,我們是否可以通過為不同任務設置不同的CPU頻率的方法區分優先級?也就說CPU的頻率是否可以作為一種可用資源來任意分配?
  答案是肯定的!
  不過由於CPU頻率的設定是基於CPU不同的核心而言,在這個層級上來說並沒有系統或者任務的概念,所以要想達到我們之前說的任務級別的頻率分配需要通過任務-核心的綁定來實現。具體的手段其實非常豐富,從taskset命令,cgroup,vm,container技術都有CPU-set的設定,在這里我就不多贅述,主要還是講如何為每個CPU核心設定不同的頻率。
 
   首先要講的是幾個CPU頻率相關的技術
  · Speedstep: 似乎最早出現在“迅馳”筆記本CPU上,現在已經在所有Intel CPU上實現。它允許CPU在空載的情況下自動降低頻率以節約寶貴的電力。
  · Turbo:奔4時代的技術,turbo技術允許CPU在較高負載且熱功耗允許的情況下主動升頻
  · PCPS: Xeon v4之后的技術,繼承了前面兩個技術的特點允許系統為每一個物理核心(core)設定不同的頻率。
  以上3種技術中最重要的PCPS需要 Linux kernel 4.7以后的版本,比如我這里用的4.13.
[root@localhost cpu]# cd /sys/devices/system/cpu/cpufreq
[root@localhost cpufreq]# ls
boost policy10 policy13 policy16 policy19 policy21 policy24 policy27 policy5 policy8
policy0 policy11 policy14 policy17 policy2 policy22 policy25 policy3 policy6 policy9
policy1 policy12 policy15 policy18 policy20 policy23 policy26 policy4 policy7

 

  /sys/devices/system/cpu/cpufreq 是具體的CPU 頻率管理入口,每一個policy*子文件夾都對應了系統的一個core。比如我們需要設定core0的頻率,則直接進入policy0目錄即可。
[root@localhost cpufreq]# cd policy0
[root@localhost policy0]# ls -l
total 0
-r--r--r--. 1 root root 4096 Jan 17 02:49 affected_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 bios_limit
-r--------. 1 root root 4096 Jan 17 02:49 cpuinfo_cur_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_max_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_min_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 cpuinfo_transition_latency
-r--r--r--. 1 root root 4096 Jan 17 02:49 freqdomain_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 related_cpus
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_available_frequencies
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_available_governors
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_cur_freq
-r--r--r--. 1 root root 4096 Jan 17 02:49 scaling_driver
-rw-r--r--. 1 root root 4096 Jan 17 03:00 scaling_governor
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_max_freq
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_min_freq
-rw-r--r--. 1 root root 4096 Jan 17 02:49 scaling_setspeed

 

  路徑下有多個文件,首先需要確定該CPU是否支持PCPS
[root@localhost policy0]# cat scaling_available_governors
conservative userspace powersave ondemand performance

 

  scaling_available_governors保存了系統支持的電源策略,如果你曾經在桌面版本的Linux配置過電源的話應該很熟悉這幾個模式。不過這里除了傳統的conservative (保守),powersave(節能) ondemand(請求) performance(性能)4種模式之外,還特別的多了一個userspace模式,這說明系統可以支持PCPS.
  我們看一下這顆CPU究竟支持哪些頻率設定,scaling_available_frequencies文件保存了對應的內容。
[root@localhost policy0]# cat scaling_available_frequencies
2501000 2500000 2400000 2300000 2200000 2100000 2000000 1900000 1700000 1600000 1500000 1400000 1300000 1200000 1100000 1000000
  
  沒什么好多解釋的,一看就能明白,這顆CPU可以在1G~2.5G之間做調整,每次最少調整0.1G。
  查看當前頻率也很容易,scaling_cur_freq文件:
[root@localhost policy0]# cat scaling_cur_freq
1000000

 

  看了一圈了,開始設定CPU0的頻率,其實也很容易的。
[root@localhost policy0]# echo userspace > scaling_governor
[root@localhost policy0]# echo 200000 > scaling_setspeed
[root@localhost policy0]# cat scaling_cur_freq
2000000
  
scaling_governor文件可以設定該CPU的電源模式,就像前面說的,這里需要將電源模式設定為“userspace”。而scaling_setspeed可以直接指定CPU的頻率,這里就直接設定為2.0G。
  依次為每個core設定不同的頻率即可。
  需要注意的是,你無法將所有的頻率都設定到最大並保持住。這是由CPU的熱功耗決定的,將一部分核心頻率提升的同時,勢必要降低某些core的頻率。
 
 
 
 
 https://blog.csdn.net/zaf0516/article/details/95769589
http://www.51testing.com/html/20/n-3723920.html
   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM