このトピックでは、/proc/cpuinfoファイルに表示されるCPU頻度とインスタンスに指定された頻度との間に不整合が発生する理由と、この不整合を解決する方法について説明します。 例としてAlibaba Cloud Linux 3が使用されています。
問題の内容
アイドル状態では, 次のように /proc/cpuinfoファイルに表示されるCPU周波数が800 MHzで, インスタンスの仕様周波数と矛盾します。

このトピックで説明するソリューションには、次のカーネルとオペレーティングシステムも含まれます。
原因
システムのパフォーマンスとCPUレスポンスを向上させるために、バージョン5.11以降のLinuxカーネルにパッチ (コミットID: 3fcd6a230fa7d03bffcb831a81b40435c146c12b) が統合されました。
x86/cpu: Avoid cpuinfo-induced IPIing of idle CPUs
Currently, accessing /proc/cpuinfo sends IPIs to idle CPUs in order to
learn their clock frequency. Which is a bit strange, given that waking
them from idle likely significantly changes their clock frequency.
This commit therefore avoids sending /proc/cpuinfo-induced IPIs to
idle CPUs.関数rcu_is_idle_cpuは、/proc/cpuinfoがアクセスされたときにCPUがアイドル状態にあるかどうかをチェックします。 CPUがアイドル状態の場合、min_freqが返されます。これはカーネルによってデフォルトで800 MHzとして定義されています。 一部のカーネルバージョンでは、CPUベース周波数としてmin_freqの値を取得します。
解決策
アイドル状態で表示される周波数は期待と一致しない場合がありますが、CPUは仕様定義の周波数に達する可能性があるため、実際のパフォーマンスと使用には影響しません。
正確な周波数測定値を取得するには、cpupowerやturbostatなどのツールを使用します。
例えば、cpupowerツールを使用して、周波数データを収集することができる。
sudo cpupower frequency-info次の出力は、現在のCPU周波数が3,200 MHzであることを示しています。

上記のように、一部のインスタンスタイプはCPU頻度クエリをサポートしない場合があることに注意してください。 固有のインスタンスの基本周波数の詳細については、[インスタンスファミリーの概要] のドキュメントを参照してください。