6.3.6. スケジューリングポリシーの調整
Linux スケジューラーではスレッドの実行場所と実行期間を決定する数種類のスケジューリングポリシーを実装しています。大きく分けると通常ポリシーとリアルタイムポリシーの 2 種類のカテゴリーに分けられます。通常スレッドは、通常の優先度のタスクに使用されます。リアルタイムポリシーは、中断なしで完了する必要のある時間的制約のあるタスクに使用されます。
リアルタイムスレッドは、タイムスライスの対象ではありません。つまり、ブロックされる、終了する、自発的に停止する、より優先度の高いスレッドが取って代わるなどが起こるまで実行されます。最も優先度の低いリアルタイムスレッドは、通常のポリシーを持つスレッドの前にスケジュールされます。
6.3.6.1. スケジューリングポリシー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
6.3.6.1.1. SCHED_FIFO を使用した静的優先度のスケジューリング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SCHED_FIFO (静的優先度スケジューリングとも呼ばれる)は、各スレッドに固定の優先度を定義するリアルタイムポリシーです。このポリシーを使用するとイベントの応答時間を改善し待ち時間を低減させることができるため、長期間は実行しない時間的制約のあるタスク対しての使用が推奨されます。
SCHED_FIFO を使用すると、スケジューラーは SCHED_FIFO スレッドの一覧を優先度順にスキャンし、実行準備ができているスレッドで最も優先度の高いスレッドをスケジュールします。SCHED_FIFO スレッドの優先度レベルは 1 から 99 までの任意の整数にすることができます。この場合、99 は最も高い優先度として処理されます。Red Hat では最初は低い順位で使用を開始し、待ち時間に関する問題が見つかった場合にのみ徐々に優先度を上げていく方法を推奨しています。
警告
リアルタイムスレッドはタイムスライスに依存しないため、Red Hat では優先度 99 の設定は推奨していません。この優先度を使用するとプロセスは移行スレッドや監視スレッドと同じ優先レベルにすることになってしまいます。このスレッドが演算ループに陥りブロックされるとスレッドの実行は不可能になります。単一のプロセッサーを持つシステムは、この状況では最終的にハングします。
管理者は
SCHED_FIFO 帯域幅を制限して、リアルタイムアプリケーションのプログラマーがプロセッサーを独占するリアルタイムタスクを開始しないようにすることができます。
- /proc/sys/kernel/sched_rt_period_us
- 上記のパラメーターはプロセッサー帯域幅の 100% とみなされるべき時間をマイクロ秒で定義します。デフォルト値は
1000000DHEs (1 秒)です。 - /proc/sys/kernel/sched_rt_runtime_us
- 上記のパラメーターはリアルタイムスレッドの実行に当てられる時間をマイクロ秒で定義します。デフォルト値は
950000DHEs または 0.95 秒です。
6.3.6.1.2. SCHED_RR を使用したラウンドロビン方式の優先度スケジューリング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SCHED_RR は、SCHED_FIFO のラウンドロビン版です。このポリシーは、複数のスレッドを同じ優先レベルで実行する必要がある場合に役に立ちます。
SCHED_FIFO と同様に、SCHED_RR は各スレッドに固定の優先度を定義するリアルタイムポリシーです。スケジューラーは、すべての SCHED_RR スレッドの一覧を優先度順にスキャンし、実行準備ができているスレッドで最も優先度の高いスレッドをスケジュールします。ただし、SCHED_FIFO とは異なり、同じ優先度を持つスレッドは、特定のタイムスライス内でラウンドロビン方式にスケジュールされます。
このタイムスライスの値は、
sched_rr_timeslice_ms カーネルパラメーター(/proc/sys/kernel/sched_rr_timeslice_ms)を使用してミリ秒単位で設定できます。最も小さい値は 1 ミリ秒になります。
6.3.6.1.3. SCHED_OTHER を使用した通常のスケジュール リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SCHED_OTHER は、Red Hat Enterprise Linux 7 のデフォルトのスケジューリングポリシーです。このポリシーは Completely Fair Scheduler (CFS) を使用して、このポリシーでスケジュールされているすべてのスレッドへの公平プロセッサーアクセスを許可します。多量のスレッドやデータの処理が重要な場合にはこのポリシーの方が長い期間で見ると効率的なスケジュールになります。
このポリシーが使用されると、スケジューラーは各プロセススレッドの niceness 値に基づいて動的な優先順位リストを作成します。管理者側でプロセスの niceness 値を変更することはできますがスケジューラーの動的な優先リストを直接変更することはできません。
プロセスの niceness の変更に関する詳細は、Red Hat Enterprise Linux 7 システム管理者のガイドを参照してください。