第2章 RHEL for Real Time のスケジューリングポリシー
リアルタイムでは、スケジューラーは、実行する実行可能なスレッドを決定するカーネルコンポーネントです。各スレッドには、関連付けられたスケジューリングポリシーおよび静的スケジューリング優先度 (sched_priority
) があります。スケジューリングはプリエンプティブであるため、静的優先度の高いスレッドの実行の準備ができると、現在実行中のスレッドは停止します。その後、実行中のスレッドは静的優先度の waitlist
に戻ります。
すべての Linux スレッドには、以下のいずれかのスケジューリングポリシーがあります。
-
SCHED_OTHER
またはSCHED_NORMAL
: デフォルトのポリシーです。 -
SCHED_BATCH
:SCHED_OTHER
に似ていますが、増分指向です。 -
SCHED_IDLE
:SCHED_OTHER
より優先度の低いポリシーです。 -
SCHED_FIFO
: 先入れ先出しのリアルタイムポリシーです。 -
SCHED_RR
: ラウンドロビンのリアルタイムポリシーです。 -
SCHED_DEADLINE
: ジョブの期限に従ってタスクに優先度を割り当てるスケジューラーポリシーです。絶対期限が最も早いジョブが最初に実行されます。
2.1. スケジューラーポリシー
リアルタイムスレッドは標準スレッドよりも優先度が高くなります。ポリシーには、最小値 1 から最大値 99 までの範囲のスケジューリング優先順位値があります。
次のポリシーは、リアルタイムにとって重要です。
SCHED_OTHER
またはSCHED_NORMAL
ポリシーこれは、Linux スレッドのデフォルトスケジューリングポリシーです。スレッドの特性に基づいてシステムによって変更される動的な優先度があります。
SCHED_OTHER
スレッドの nice 値は、最高の優先度である 20 と最低の優先度である 19 の間です。SCHED_OTHER
スレッドのデフォルトの nice 値は 0 です。SCHED_FIFO
ポリシーSCHED_FIFO
を持つスレッドは、SCHED_OTHER
タスクよりも高い優先度で実行されます。SCHED_FIFO
は、nice 値を使用する代わりに、最低が 1 で最高が 99 の固定された優先度を使用します。優先度 1 のSCHED_FIFO
スレッドは、SCHED_OTHER
スレッドよりも常に先にスケジュールされます。SCHED_RR
ポリシーSCHED_RR
ポリシーは、SCHED_FIFO
ポリシーに似ています。同じ優先度のスレッドは、ラウンドロビン方式でスケジュールされます。SCHED_FIFO
およびSCHED_RR
スレッドは以下のイベントのいずれかが発生するまで実行されます。- スレッドはスリープ状態になるか、イベントを待機します。
優先度の高いリアルタイムスレッドを実行する準備が整います。
上記のイベントのいずれかが発生しない限り、スレッドは指定されたプロセッサーで無期限に実行されますが、優先度の低いスレッドは実行を待機しているキューに残ります。これにより、システムサービススレッドが常駐し、スワップアウトが妨げられ、ファイルシステムデータのフラッシュが失敗する可能性があります。
SCHED_DEADLINE
ポリシーSCHED_DEADLINE
ポリシーはタイミング要件を指定します。タスクの期限に従って各タスクをスケジュールします。Earliest Deadline First (EDF) スケジュールを持つタスクが最初に実行されます。カーネルは、
runtime⇐deadline⇐period
が true である必要があります。必要なオプション間の関係は、runtime⇐deadline⇐period
です。