Linux:為什麼使用效能調節器時CPU頻率會波動?

Linux:為什麼使用效能調節器時CPU頻率會波動?

我使用 Debian 8 amd64 機器進行基準測試。在實驗過程中,我希望 CPU 以固定頻率運作(最好是最大可能頻率)。這將排除 CPU 時脈速度作為結果變化來源的可能性。

經過一番閱讀後,似乎正確的做法是將CPU調速器更改為performance,如下所述Linux 核心文件中

CPUfreq調節器「效能」將CPU靜態設定為scaling_min_freq和scaling_max_freq範圍內的最高頻率。

遺憾的是,沒有提供有關scaling_min_freq和 的更多詳細資訊。scaling_max_freq希望這無關緊要,因為使用的 CPU 頻率是該間隔的最大值。

所以我使用 cpufreq-set 啟用了這個調節器:

$ 貓 /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
表現
表現
表現
表現

為了更好地衡量,我還在 BIOS 中禁用了渦輪增壓模式:

$ 貓 /sys/devices/system/cpu/intel_pstate/no_turbo
1

根據上面對效能調節器的描述,我預期 CPU 時脈速度不會出現波動。然而,如果我重複運行cpufreq-info,我會看到時鐘速度波動:

$ cpufreq-資訊 | grep '當前CPU fr'
  目前 CPU 頻率為 4.00 GHz。
  目前CPU頻率為3.99 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
$ cpufreq-資訊 | grep '當前CPU fr'
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前CPU頻率為3.96 GHz。
$ cpufreq-資訊 | grep '當前CPU fr'
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前CPU頻率為3.94 GHz。
$ cpufreq-資訊 | grep '當前CPU fr'
  目前CPU頻率為4.01 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前 CPU 頻率為 4.00 GHz。
  目前CPU頻率為3.98 GHz。

這種波動是由於硬體、BIOS、核心還是其他因素造成的?有沒有辦法設定CPU頻率使其完全不波動?

答案1

經過一些實驗,我想我可以回答我自己的問題。

如上所述在這個線程中,在某些 Intel 硬體上,有兩種方法來管理 CPU 頻率:

  • 使用 pstate。
  • 使用常規 ACPI。

當使用 pstate 時,BIOS 對時鐘速度有一定的發言權,這似乎是波動的根源。

intel_pstate=disable您可以透過附加到核心參數來強制關閉 pstate (編輯/etc/default/grub並將參數新增至GRUB_CMDLINE_LINUX_DEFAULT.Finally run sudo update-grub)。

執行此操作後,輸出cpufreq-info看起來有很大不同,我還注意到一組不同的 CPU 調節器變得可用(例如ondemand現在可用)。

最重要的是,將調速器設為 後performance,時脈速度現已固定(在我的情況下為 4.00GHz)。

您可以查看/sys/devices/system/cpu/cpu*/cpufreq/scaling_driver以確定是否使用 pstate 或 ACPI 來擴充 CPU。這些文件可以採用數值acpi-cpufreqintel_pstate

答案2

對於當代英特爾處理器,頻率由處理器本身控制,軟體暴露的 P 狀態與效能等級相關。 頻率可以設定為單一的想法 對於英特爾酷睿處理器來說頻率是虛構的。即使縮放驅動程式選擇單一 P 狀態,處理器運作的實際頻率也是由處理器本身選擇的。 [1]

[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt

答案3

我讀這個帖子是因為我太想為我的CPU設置一個固定頻率,因為風扇不再工作了(當然,當你在國外一個失落的島嶼上潛水休閒時,這些事情就會發生!)所以我的觀點是更多的設定最低頻率( 800Mhz )..我最終成功地更改了/sys/devices/system/cpu/cpu*/cpufreq/ 中配置的每個cpu 中的scaling_max_freq & 現在可以了,頻率應該從800Mhz 移動至....800Mhz。它有效並解決了我遇到的過熱問題..(頻率現在為799Mhz並且不要移動,這使得CPU保持在50°C左右!)

PS:我還禁用了渦輪模式(3,1Ghz)

相關內容