
ベンチマークには Debian 8 amd64 マシンを使用しています。実験中は、CPU を固定周波数 (できれば最大周波数) で動作させたいと思います。これにより、CPU クロック速度が結果の変動の原因となることがなくなります。
performance
いろいろ読んでみると、CPUガバナーを次のように変更するのが正しいようです。Linuxカーネルのドキュメントはこちら:
CPUfreq ガバナー「パフォーマンス」は、scaling_min_freq と scaling_max_freq の境界内で CPU を最高周波数に静的に設定します。
scaling_min_freq
残念ながら、とに関する詳細はscaling_max_freq
提供されていません。使用される CPU 周波数が間隔の最大値であるため、問題にならないことを願っています。
そこで、cpufreq-set を使用してこのガバナーを有効にしました。
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor パフォーマンス パフォーマンス パフォーマンス パフォーマンス
念のため、BIOS でターボ ブースト モードも無効にしました。
$ cat /sys/devices/system/cpu/intel_pstate/no_turbo 1
パフォーマンス ガバナーの上記の説明に基づくと、CPU クロック速度に変動はないと考えられます。しかし、繰り返し実行するとcpufreq-info
、クロック速度が変動していることがわかります。
$ cpufreq-info | grep '現在のCPU周波数' 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は3.99GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 $ cpufreq-info | grep '現在のCPU周波数' 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は3.96GHzです。 $ cpufreq-info | grep '現在のCPU周波数' 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は3.94GHzです。 $ cpufreq-info | grep '現在のCPU周波数' 現在のCPU周波数は4.01GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は4.00GHzです。 現在のCPU周波数は3.98GHzです。
この変動はハードウェア、BIOS、カーネル、またはその他の要因によるものでしょうか? CPU 周波数をまったく変動しないように設定する方法はありますか?
答え1
いくつか実験してみると、自分の質問に答えられると思います。
述べたようにこのスレッドで一部の Intel ハードウェアでは、CPU 周波数を管理する方法が 2 つあります。
- pstate を使用します。
- 通常の ACPI を使用します。
pstate が使用される場合、BIOS はクロック速度に対して何らかの影響を与えるため、これが変動の原因となるようです。
intel_pstate=disable
カーネル引数に を追加することで、pstate を強制的にオフにすることができます( を編集し/etc/default/grub
て arg を追加します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
。
答え2
最新の Intel プロセッサの場合、周波数はプロセッサ自体によって制御され、ソフトウェアに公開される P 状態はパフォーマンス レベルに関連しています。 周波数を単一に設定できるという考え 周波数はIntel Coreプロセッサでは架空のものですスケーリングドライバが単一のP状態を選択した場合でも、プロセッサが実際に実行される周波数はプロセッサ自体によって選択されます。[1]
[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
答え3
このスレッドを読んだのは、ファンが動かなくなったので CPU に固定周波数を設定したいと思っていたからです (もちろん、ダイビング レジャーで海外の無人島にいると、そういうことは起こります!)。私の言いたいことは、最低周波数 (800Mhz) を設定することです。最終的に、構成の各 CPU の /sys/devices/system/cpu/cpu*/cpufreq/ にある scaling_max_freq を変更することに成功しました。これで、周波数が 800Mhz から ....800Mhz に変動するはずです。これでうまくいき、私が経験した過熱の問題も解決しました (周波数は現在 799Mhz で変動しないため、CPU は 50°C 前後に留まります)。
PS: ターボモードも無効にします (3.1Ghz)