第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 カーネルを使用すると、スケジューラーの優先順位を詳細に制御できます。また、アプリケーションレベルのプログラムをカーネルスレッドよりも優先度の高い状態でスケジュールすることもできます。
警告
スケジューラーの優先度を設定すると、結果が生じる可能性があります。重要なカーネルプロセスが必要に応じて実行できなくなると、システムが応答しなくなり、その他の予測不可能な動作が発生する可能性があります。最終的に、正しい設定はワークロードに依存します。
優先順位は、特定のカーネル機能専用の一部のグループで定義されます。
Expand
| 優先度 | Threads | 説明 |
|---|---|---|
1 | 優先度の低いカーネルスレッド | 優先度 1 は通常、SCHED_OTHER の すぐ上に必要なタスク用に予約されています。 |
2 - 49 | 利用可能 | 一般的なアプリケーションの優先順位に使用される範囲 |
50 | ハード IRQ のデフォルト値 | |
51 - 98 | 優先度の高いスレッド | この範囲は、定期的に実行され、応答時間が短くなければならないスレッドに使用します。中断が不足するため、CPU にバインドされたスレッドにはこの範囲を使用しないでください。 |
99 | watchdogs および移行 | 最も優先度が高いシステムスレッド |
手順3.1 systemd を使用して優先順位を設定する
- 優先度は、
0(最低優先度) から99(最高優先度) までの一連のレベルを使用して設定されます。systemdサービスマネージャーを使用すると、カーネルのブート後にスレッドのデフォルトの優先順位を変更できます。実行中のスレッドのスケジュール優先順位を表示するには、tuna ユーティリティーを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# cat <<-EOF > /etc/systemd/system/mcelog.system.d/priority.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下を入力します。
[SERVICE] CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 EOF
[SERVICE] CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdスクリプトの設定をリロードします。systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow mcelogサービスを再起動します。systemctl restart mcelog
# systemctl restart mcelogCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdによって設定されたmcelog優先度を表示するには、次のコマンドを発行します。tuna -t mcelog -P
$ tuna -t mcelog -PCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドの出力は、以下のようになります。thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 826 FIFO 20 0,1,2,3 13 0 mcelog
thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 826 FIFO 20 0,1,2,3 13 0 mcelogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# cat <<-EOF > /etc/systemd/system/mcelog.system.d/affinity.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下を入力します。
[SERVICE] CPUAffinity=0,1 EOF
[SERVICE] CPUAffinity=0,1 EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdスクリプトの設定をリロードします。systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow mcelogサービスを再起動します。systemctl restart mcelog
# systemctl restart mcelogCopy to Clipboard Copied! Toggle word wrap Toggle overflow mcelogサービスが制限されている CPU を表示します。tuna -t mcelog -P
$ tuna -t mcelog -PCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドの出力は、以下のようになります。thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 12954 FIFO 20 0,1 2 1 mcelog
thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 12954 FIFO 20 0,1 2 1 mcelogCopy to Clipboard Copied! Toggle word wrap Toggle overflow
systemdユニット設定ディレクティブの 変更の詳細は、システム管理者ガイドの 既存のユニットファイルの変更 の章を参照してください。