ベンチマークに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周波数がまったく変動しないように設定する方法はありますか?
いくつかの実験の後、私は自分の質問に答えることができると思います。
前述のように このスレッドで 、特定のIntelハードウェアでは、CPU周波数を管理する方法が2つあります。
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
を想定できます。
最新のIntelプロセッサの場合、周波数はプロセッサ自体によって制御され、ソフトウェアに公開されるP状態はパフォーマンスレベルに関連しています。 周波数を単一に設定できるという考え周波数は、Intel Coreプロセッサのフィクションです。スケーリングドライバーが単一のP状態を選択した場合でも、プロセッサが実行される実際の周波数は、プロセッサ自体によって選択されます。 [1]
[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt