3.4. カーネルコマンドラインオプションを使用した C ステートの無効化
ホスト上のアプリケーションのレイテンシーが C ステートによって影響を受けているかどうかをテストするには、カーネルコマンドラインオプションで消費状態 (C ステート) を一時的に無効にします。
processor.max_cstate および intel_idle.max_cstate カーネルコマンドラインパラメーターにより、CPU コアが使用できる最大の C ステートを設定します。たとえば、パラメーターを 1 に設定すると、CPU が C1 より下の C ステートを要求することは決してなくなります。
特定の状態をハードコーディングしないようにするには、より動的なソリューションの使用を検討してください。カスタム TuneD プロファイルを使用した C-state の無効化 を参照してください。
前提条件
-
tunedサービスが実行されていないか、C ステート設定を更新しないように設定されている。
手順
システムが使用するアイドル状態のドライバーを表示します。
# cat /sys/devices/system/cpu/cpuidle/current_driver intel_idleドライバーの詳細は、
kernel-docパッケージによって提供される/usr/share/doc/kernel-doc-<version>/Documentation/admin-guide/pm/cpuidle.rstファイルを参照してください。ホストが
intel_idleドライバーを使用している場合は、intel_idle.max_cstateカーネルパラメーターを設定して、CPU コアで使用可能な最高 C ステートを定義します。# grubby --update-kernel=ALL --args="intel_idle.max_cstate=0"intel_idle.max_cstate=0を設定すると、intel_idleドライバーが無効になります。その結果、カーネルがacpi_idleドライバーを使用するようになります。このドライバーは、EFI ファームウェアに設定されている C ステート値を使用します。そのため、これらの C ステート設定をオーバーライドするには、processor.max_cstateも設定してください。CPU ベンダーに関係なく、各ホスト上で CPU コアが利用できる最高の C ステートを設定します。
# grubby --update-kernel=ALL --args="processor.max_cstate=0"重要intel_idle.max_cstate=0に加えてprocessor.max_cstate=0を設定すると、acpi_idleドライバーはprocessor.max_cstateの値をオーバーライドして1に設定します。その結果、processor.max_cstate=0 intel_idle.max_cstate=0の場合、カーネルが使用する最高の C ステートは C0 ではなく C1 になります。変更を有効にするためにホストを再起動します。
# reboot
検証
最大の C ステートを表示します。
# cat /sys/module/processor/parameters/max_cstate 1ホストが
intel_idleドライバーを使用している場合は、最大の C ステートを表示します。# cat /sys/module/intel_idle/parameters/max_cstate 0