
私は、デュアルコア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*/disable
。1
周波数を確認すると、次のようになります。
$ 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=off
CPUの脆弱性に対する緩和策が無効になることに注意してください。これらのパラメータが3.10.0-1160.49.1.el7.x86_64カーネルで利用可能かどうかはわかりませんが、カーネルパラメータの完全なリストは次のとおりです。ここ。