CPU スケーリングを回避して CPU を最高速度で実行するにはどうすればよいですか?

CPU スケーリングを回避して CPU を最高速度で実行するにはどうすればよいですか?

私は、デュアルコアCPU(Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz)を搭載したかなり古いラップトップ(Lenove T61)でCentOS 7(7.9.2009)(カーネル3.10.0-1160.49.1.el7.x86_64)を実行しています。CPUスケーリングのドライバーはacpi-cpufreqで、パフォーマンスガバナーを使用すると、CPU を に記載されている最大 CPU 速度で実行し/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq、次のようにしてこれを観察できます。

$ grep -i mhz /proc/cpuinfo 
cpu MHz     : 2001.000
cpu MHz     : 2001.000

そして、この速度では安定しています。これを確認するには、次のようにします。

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2001000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 
2001000

私は、タイミングのために CPU クロック サイクルをカウントするリアルタイム プログラムを一定の周波数で実行しようとしています。デフォルトの CentOS カーネル (3.10.0) ではサポートされていないハードウェアをサポートするために、カスタム カーネル (5.10.83-rt58) をコンパイルしました。CPU スケーリングにより、通常はクロック周波数が変動しますが、 のすべての値を に設定することで、安定した周波数が得られることがわかりました/sys/devices/system/cpu/cpu*/cpuidle/state*/disable1周波数を確認すると、次のようになります。

$ grep -i mhz /proc/cpuinfo 
cpu MHz     : 1995.106
cpu MHz     : 1995.106

3.10.0 カーネルで見られる 2001MHz には達していません。次のコマンドでこれを確認します。

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1995106

しかし、次の出力は次のようになります。

$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
2001000

違います。私の質問は、CPU が最大周波数 (2001MHz) ではなく、約 6MHz 低い周波数で動作している理由を知っている人はいますか? カーネル 3.10 と 5.10 の間で CPU スケーリングに何か劇的な変化があったのでしょうか?

答え1

カーネルパラメータを追加すると、nohz_full=1 rcu_nocbs=1 mitigations=offカーネル5.10.83-rt58でコアの1つを2001MHzで実行できることが分かりました。追加するとmitigations=offCPUの脆弱性に対する緩和策が無効になることに注意してください。これらのパラメータが3.10.0-1160.49.1.el7.x86_64カーネルで利用可能かどうかはわかりませんが、カーネルパラメータの完全なリストは次のとおりです。ここ

関連情報