第27章 スケジューリングポリシーの調整
Red Hat Enterprise Linux ではプロセス実行の最小単位をスレッドと呼んでいます。システムスケジューラーは、スレッドを実行するプロセッサーと、スレッドの実行期間を決定します。しかし、スケジューラーの主な目標はシステムを常に稼働させ続けることです。そのため、スケジューラーは、アプリケーションのスケジューリングポリシーのパフォーマンスカテゴリーに最適な形で、スレッドをスケジュールしない可能性があります。
たとえば、NUMA システムでノード B のプロセッサーが利用可能になったときアプリケーションはノード A で実行中だったと仮定します。プロセッサーをノード B でビジー状態に維持するために、スケジューラーはアプリケーションのスレッドのいずれかをノード B に移動します。ただし、アプリケーションスレッドは依然としてノード A のメモリーにアクセスする必要があります。ただし、スレッドがノード B で実行され、ノード A のメモリーがスレッドに対してローカルにならないため、このメモリーへのアクセスには時間がかかります。そのため、スレッドがノード B での実行を終了するには、ノード A のプロセッサーが利用可能になるまで待機してから、ローカルメモリーアクセスで元のノードでスレッドを実行するよりも時間がかかる場合があります。
27.1. スケジューリングポリシーの分類 リンクのコピーリンクがクリップボードにコピーされました!
パフォーマンス重視のアプリケーションでは、多くの場合、設計者または管理者がスレッドの実行場所を決定することでメリットが得られます。Linux スケジューラーは、スレッドが実行される場所と期間を決定するいくつかのスケジューリングポリシーを実装します。以下は、スケジューリングポリシーの主なカテゴリーです。
- 通常のポリシー
- 通常スレッドは、通常の優先度のタスクに使用されます。
- リアルタイムポリシー
- リアルタイムポリシーは、中断なしで完了する必要のある時間的制約のあるタスクに使用されます。リアルタイムスレッドは、タイムスライスの対象ではありません。つまり、スレッドは、ブロック、終了、デプロイメント、または優先度の高いスレッドによってプリエンプションされるまで実行されます。
最も優先度の低いリアルタイムスレッドは、通常のポリシーを持つスレッドの前にスケジュールされます。詳細は、SCHED_FIFO を使用した静的優先度スケジューリング、SCHED_RR を使用したラウンドロビン優先度スケジューリング、およびシステム上の sched(7)、sched_setaffinity(2)、sched_getaffinity(2)、sched_setscheduler(2)、および sched_getscheduler(2) man ページを参照してください。