第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です。