第3章 リアルタイム固有のチューニング
2章一般的なシステムチューニング で最適化が完了したら、Red Hat Enterprise Linux for Real Time 固有のチューニングを開始できます。この手順のために Red Hat Enterprise Linux for Real Time カーネルがインストールされている必要があります。
重要
このセクションのツールは、最初に 2章一般的なシステムチューニング を完了させてから使用してください。パフォーマンスは改善されません。
Red Hat Enterprise Linux for Real Time チューニングを開始する準備が整ったら、以下のステップを最初に実行してください。以下のステップでは、最大限のメリットを得られます。
システムで調整を開始する準備ができたら、本章の他のセクションを試してください。
本章では、パフォーマンス監視ツールについても説明します。
本章のすべてのチューニング提案が完了したら、4章アプリケーションのチューニングとデプロイメント に進みます。
3.1. スケジューラーの優先順位の設定
Red Hat Enterprise Linux for Real Time カーネルを使用すると、スケジューラーの優先順位を詳細に制御できます。また、アプリケーションレベルのプログラムをカーネルスレッドよりも優先度の高い状態でスケジュールすることもできます。
警告
スケジューラーの優先度を設定すると、結果が生じる可能性があります。重要なカーネルプロセスが必要に応じて実行できなくなると、システムが応答しなくなり、その他の予測不可能な動作が発生する可能性があります。最終的に、正しい設定はワークロードに依存します。
優先順位は、特定のカーネル機能専用の一部のグループで定義されます。
優先度 | スレッド | 詳細 |
---|---|---|
1 | 優先度が低いカーネルスレッド | 優先度 1 は通常、SCHED_OTHER を上になるタスクに対して予約されます。 |
2 - 49 | 利用可能 | 一般的なアプリケーションの優先順位に使用される範囲 |
50 | デフォルトの hard-IRQ 値 | |
51 - 98 | 優先度の高いスレッド | この範囲は、定期的に実行され、応答時間が短くなければならないスレッドに使用します。中断が不足するため、CPU にバインドされたスレッドにはこの範囲を使用しないでください。 |
99 | watchdogs および移行 | 最も優先度が高いシステムスレッド |
手順3.1 systemd
の使用による優先順位の設定
- 優先度は、
0
(最も低い優先度) から99
(最も高い優先度) までの一連のレベルを使用して設定されます。systemd
サービスマネージャーは、カーネル起動後のスレッドのデフォルト優先度を変更するために使用できます。実行中のスレッドのスケジューリングの優先度を表示するには、tuna ユーティリティーを使用します。~]#
tuna --show_threads
thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 2 OTHER 0 0xfff 451 3 kthreadd 3 FIFO 1 0 46395 2 ksoftirqd/0 5 OTHER 0 0 11 1 kworker/0:0H 7 FIFO 99 0 9 1 posixcputmr/0 ...[output truncated]...
3.1.1. ブートプロセス中のサービスの優先度の変更
systemd
ブートプロセス中に起動されるサービスのリアルタイム優先度を設定できるようにします。
ユニット設定ディレクティブ は、システムの起動プロセス中にサービスの優先度を変更するために使用されます。ブートプロセスの優先度の変更は、サービスセクションの以下のディレクティブを使用して行われます。
- CPUSchedulingPolicy=
- 実行したプロセスの CPU スケジューリングポリシーを設定します。Linux で利用可能なスケジューリングクラスの 1 つを取ります。
- その他
- バッチ
- idle
- fifo
- rr
- CPUSchedulingPriority=
- 実行したプロセスの CPU スケジューリングの優先度を設定します。利用可能な優先度の範囲は、選択した CPU スケジューリングポリシーにより異なります。リアルタイムスケジューリングポリシーでは、1 (最も低い優先度) から 99 (最も高い優先度) の整数を使用できます。
例3.1 mcelog サービスの優先度の変更
以下の例では、
mcelog
サービスを使用します。mcelog
サービスの優先度を変更するには、以下を実行します。
- 以下のように、
/etc/systemd/system/mcelog.system.d/priority.conf
で、補助mcelog
サービス設定ディレクトリーファイルを作成します。# cat <<-EOF > /etc/systemd/system/mcelog.system.d/priority.conf
- 以下を挿入します。
[SERVICE] CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 EOF
systemd
スクリプト設定を再読み込みします。# systemctl daemon-reload
mcelog
サービスを再起動します。# systemctl restart mcelog
- 以下の
systemd
で設定したmcelog
優先度を表示します。$ tuna -t mcelog -P
このコマンドの出力は、以下のようになります。thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 826 FIFO 20 0,1,2,3 13 0 mcelog
systemd
ユニット設定ディレクティブ の変更の詳細は、システム管理者のガイドの「 既存のユニットファイルの変更の章を参照してください。
3.1.2. サービスの CPU 使用率の設定
systemd
では、実行できる CPU サービスを指定できるようになります。
これを行うには、systemd は CPUAffinity= unit 設定ディレクティブ を使用します。
例3.2 mcelog サービスの CPU 使用率の設定
以下の例では、
mcelog
サービスが CPU 0 および 1 で実行されるように制限します。
- 以下のように、
/etc/systemd/system/mcelog.system.d/affinity.conf
で、補助mcelog
サービス設定ディレクトリーファイルを作成します。# cat <<-EOF > /etc/systemd/system/mcelog.system.d/affinity.conf
- 以下を挿入します。
[SERVICE] CPUAffinity=0,1 EOF
systemd
スクリプト設定を再読み込みします。# systemctl daemon-reload
mcelog
サービスを再起動します。# systemctl restart mcelog
mcelog
サービスが以下に制限される CPU を表示します。$ tuna -t mcelog -P
このコマンドの出力は、以下のようになります。thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 12954 FIFO 20 0,1 2 1 mcelog
systemd
ユニット設定ディレクティブ の変更の詳細は、システム管理者のガイドの既存のユニットファイルの変更の章を参照してください。