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


8

私はベンチマークに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
パフォーマンス
パフォーマンス
パフォーマンス
パフォーマンス

そして、適切な対策として、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周波数がまったく変動しないように設定する方法はありますか?


どのタイプのサーバーハードウェアを使用していますか?そのハードウェアのBIOSパワーとCPUパフォーマンス設定は何ですか?
ewwhite 2015

これは、実際にはi7 CPUを搭載したデスクトップマシンです。ここにdmesgとcpuinfoをアップロードしました:gist.github.com/vext01/73eea539eb041acf784b。Re:biosの設定です。マシンに行って確認する必要があります。あなたが考えている特定の設定はありますか?
Edd Barrett

通常の
pstateの

回答:


9

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

このスレッドで述べたよう、特定の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_driverCPUをスケーリングするためにpstateまたはACPIが使用されているかどうかを調べるために調べることができます。これらのファイルは、値acpi-cpufreqまたはを想定できますintel_pstate


別のトリック:カーネルによってロードされたモジュールをリストするために「lsmod」を使用し、CPU速度のスケーリング/ p-state / c-states /その他に関連するすべてのモジュールをブラックリストに登録して、マシンを再起動します。「ブラックリストカーネルモジュール」を検索します。
Rufo El Magufo 2015


4

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

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


面白い。だから、これは私がintel_pstate=disableカーネルに渡ったときにも当てはまりますか?そのときに「レガシーモード」を呼び出しますか?
Edd Barrett

1)わからない Intel Architectures Software Developer's Manual.2)はい、相談する必要があります。PS。あなたも遊ぶことができますx86_energy_perf_policy
SaveTheRbtz

コメントしてくれてありがとう。まだわからないので、とりあえず質問は残しておきます。多分誰かが後で状況を明らかにするでしょう。
Edd Barrett

-1

私がこのスレッドを読んだのは、ファンが動作しなくなったためにCPUに固定周波数を設定しようとしていたためです(もちろん、ダイビングレジャーのために海外のロストアイランドにいるときにこれらのことが起こります)。最低周波数(800Mhz)..iは、構成の各CPUの/ sys / devices / system / cpu / cpu * / cpufreq /のscaling_max_freqへの変更を行うことに成功しました。これで、周波数は800Mhzから移動することになっています。 .... 800Mhzに それは動作し、私が経験した過熱の問題を解決しました。

PS:私はターボモードも無効にします(3,1Ghz)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.