3.12. リアルタイムのスロットリング
リアルタイムスケジューリングの問題
Red Hat Enterprise Linux for Real Time の 2 つのリアルタイムスケジューリングポリシーには、主要な特性が 1 つあります。これらは、優先度の高いスレッドによってプリエンプティブされるか、スリープまたは I/O を実行することによって待機するまで、実行される特性です。SCHED_RR の場合、同じ SCHED_RR 優先度を持つ別のスレッドが実行されるように、スレッドがオペレーティングシステムによってプリエンプトされることがあります。このようないずれの場合も、POSIX 仕様では、優先度の低いスレッドが CPU 時間を取得できるようにするポリシーを定義するプロビジョニングはありません。
SCHED_FIFO スレッドによって独占されると、ハウスキーピングタスクを実行できなくなり、最終的にはシステム全体が不安定になり、クラッシュが発生する可能性があります。
SCHED_FIFO 優先度 (デフォルト: 50) を持つスレッドとして実行されます。割り込み ハンドラー スレッドよりも高い SCHED_FIFO または SCHED_RR ポリシーを持つ CPU を占有するスレッドは、割り込みハンドラーの実行を妨げ、それらの割り込みによって通知されるデータを待機しているプログラムが不足して失敗する可能性があります。
リアルタイムスケジューラーのスロットリング
Red Hat Enterprise Linux for Real Time には、システム管理者がリアルタイムタスクで使用できる帯域幅を割り当てる安全なメカニズムが含まれています。この安全機構は リアルタイムスケジューラースロットリング と呼ばれ、/proc ファイルシステム内の 2 つのパラメーターによって制御されます。
/proc/sys/kernel/sched_rt_period_us- CPU 帯域幅の 100% と見なされる μ (マイクロ秒) の期間を定義します。デフォルト値は、1,000,000 μs (1 秒) です。期間の値の変更は、期間が長すぎるか、または小さすぎると、非常に大きな影響を及ぼす必要があります。
/proc/sys/kernel/sched_rt_runtime_us- すべてのリアルタイムタスクで利用可能な合計帯域幅。デフォルト値は 950,000 μs (0.95 秒)、つまり CPU 帯域幅の 95% です。値を -1 に設定すると、リアルタイムタスクで CPU 時刻が 100% になる可能性があることを意味します。これは、リアルタイムタスクが良好で、無制限のポーリングループなどの明確な注意がない場合にのみ適切です。
SCHED_OTHER および同様のスケジューリングポリシーで実行されるタスク) に割り当てられます。1 つのリアルタイムタスクが CPU タイムスロットの 95% を占有している場合、その CPU 上の残りのリアルタイムタスクは実行されないことに注意してください。CPU 時間の残りの 5% は、リアルタイム以外のタスクでのみ使用されます。
RT_RUNTIME_GREED 機能
RT_RUNTIME_GREED を 有効にします。
# echo RT_RUNTIME_GREED > /sys/kernel/debug/sched_features
NO_RT_RUNTIME_SHARE ロジックを無効にします。
# echo NO_RT_RUNTIME_SHARE > /sys/kernel/debug/sched_features
参考資料
kernel-rt-doc パッケージで入手可能なカーネルドキュメントから引用します。
/usr/share/doc/kernel-rt-doc-3.10.0/Documentation/scheduler/sched-rt-group.txt