web-dev-qa-db-ja.com

Linux:パフォーマンスガバナーを使用すると、CPU周波数が変動するのはなぜですか?

ベンチマークにDebian 8 AMD64マシンを使用しています。実験中は、CPUを固定周波数(できれば可能な限り最大)で動作させたいと思います。これにより、結果の変動の原因としてCPUクロック速度が除外されます。

少し読んだ後、正しいことは、CPUガバナーをperformanceに変更することです。これは、 Linuxカーネルのドキュメントに記載されています

CPUfreqガバナーの「パフォーマンス」は、CPUをstatic_min_freqとscaling_max_freqの境界内の最高周波数に静的に設定します。

悲しいことに、scaling_min_freqおよびscaling_max_freqは提供されていません。使用するCPU周波数が間隔の最大値であるため、問題にならないようにしてください。

だから私はcpufreq-setを使用してこのガバナーを有効にしました:

 $ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance

そして、適切な対策として、BIOSでターボブーストモードを無効にしました。

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

上記のパフォーマンスガバナーの説明に基づいて、CPUクロック速度に変動はないと予想します。それでも繰り返し実行するとcpufreq-info、クロック速度が変動しているのがわかります。

 $ cpufreq-info | grep 'current CPU fr' 
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は3.99 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数4.00 GHzです。
 $ cpufreq-info | grep 'current CPU fr' 
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数3.96 GHzです。
 $ cpufreq-info | grep 'current CPU fr' 
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数3.94 GHzです。
 $ cpufreq-info | grep 'current CPU fr' 
現在のCPU周波数は4.01 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数は4.00 GHzです。
現在のCPU周波数3.98 GHzです。

この変動は、ハードウェア、BIOS、カーネル、またはその他の要因によるものですか? CPU周波数がまったく変動しないように設定する方法はありますか?

8
Edd Barrett

いくつかの実験の後、私は自分の質問に答えることができると思います。

前述のように このスレッドで 、特定のIntelハードウェアでは、CPU周波数を管理する方法が2つあります。

  • Pstateを使用します。
  • 通常のACPIを使用します。

Pstateが使用されている場合、BIOSはクロック速度に関して何らかの発言権を持っており、これが変動の原因であるようです。

カーネル引数にintel_pstate=disableを追加することで、pstateを強制的にオフにできます(/etc/default/grubを編集し、GRUB_CMDLINE_LINUX_DEFAULTに引数を追加します。最後にSudo update-grubを実行します)。

これを実行した後、cpufreq-infoの出力は大きく異なって見えます。また、異なるセットのCPUガバナーが使用可能になったことにも気付きました(例:ondemandが使用可能になりました)。

最も重要なことは、ガバナーをperformanceに設定すると、クロック速度が固定されます(私の場合は4.00GHz)。

/sys/devices/system/cpu/cpu*/cpufreq/scaling_driverを調べて、CPUのスケーリングにpstateまたはACPIのどちらが使用されているかを確認できます。これらのファイルは、値acpi-cpufreqまたはintel_pstateを想定できます。

7
Edd Barrett

最新のIntelプロセッサの場合、周波数はプロセッサ自体によって制御され、ソフトウェアに公開されるP状態はパフォーマンスレベルに関連しています。 周波数を単一に設定できるという考え周波数は、Intel Coreプロセッサのフィクションです。スケーリングドライバーが単一のP状態を選択した場合でも、プロセッサが実行される実際の周波数は、プロセッサ自体によって選択されます。 [1]

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

4
SaveTheRbtz