2

OS クラスの Linux CFS 分析を行っていますが、説明できない観察結果があります。

それ以外は同一の 2 つのプロセスについて、SCHED_OTHER ポリシーを使用して実行すると、SCHED_FIFO または SCHED_RR ポリシーを使用して実行した場合よりも約 50% 多くの自発的なコンテキスト スイッチが表示されます。

SCHED_OTHERの優先度ははるかに低く、CPU を放棄する必要があるため、意図しない切り替えについては少し驚くことではありません。しかし、なぜこれが自発的な切り替えの場合になるのでしょうか。SCHED_OTHER が自発的にリアルタイム プロセスよりも頻繁に CPU を放棄するのはなぜですか? それは同じプロセスなので、I/O に切り替えるときに CPU を自発的に放棄するだけですよね? また、ポリシーの選択が I/O 試行の頻度に影響するとは思いません。

Linux の人にアイデアはありますか? ありがとう!

4

1 に答える 1

7

まず、スケジューリング ポリシーは、カーネルに実装されているスケジューリング アルゴリズムに他ならないことを理解してください。したがって、SCHED_FIFO、SCHED_RR、SCHED_OTHER はカーネル内の異なるアルゴリズムです。SCHED_FIFO と SCHED_RR は、リアルタイム スケジューリング アルゴリズムの「クラス」に属します。SCHED_OTHER は、CFS (Completely Fair Scheduler) アルゴリズムとしてより一般的に知られている、システム内の通常のプロセスのスケジューリング アルゴリズムに他なりません。

SCHED_OTHER の優先度ははるかに低い

正確には、優先度が「大幅に」低いわけではありませんが、リアルタイム スケジューリング クラスよりも「a」低い優先度です。Linux スケジューラには、リアルタイム スケジューリング クラス、通常プロセス スケジューリング クラス、アイドル タスク スケジューリング クラスの 3 つのスケジューリング クラスがあります。優先度は次のとおりです。

  1. リアルタイムスケジューリングクラス。
  2. 通常のタスク スケジューリング クラス。
  3. アイドル タスク スケジューリング クラス。

システム上のタスクは、これらのクラスのいずれかに属します。(クラスは変更できますが、タスクは常に 1 つのスケジューリング クラスにしか属することができないことに注意してください)。Linux のスケジューラーは、まずリアルタイム クラスにタスクがあるかどうかをチェックします。存在する場合は、システムで構成されている内容に応じて、SCHED_FIFO または SCHED_RR アルゴリズムを呼び出します。リアルタイム タスクがない場合、スケジューラは通常のタスクをチェックし、実行する準備ができている通常のタスクがあるかどうかに応じて CFS アルゴリズムを呼び出します。また

2 つの異なるスケジューリング クラスで同じプロセスを実行すると、コンテキスト スイッチが増えるのはなぜですか。次の 2 つのケースがあります。

  1. 一般に、単純なシステムでは、リアルタイム タスクはほとんどなく、ほとんどのタスクは通常のタスク クラスに属します。したがって、そのプロセスをリアルタイム クラスで実行すると、すべてのプロセッサがこのプロセス専用になります (リアルタイム スケジューリング クラスは通常のタスク スケジューリング クラスよりも優先度が高く、リアルタイム タイムがまったくない (/非常に少ない) ため)。 CPU を共有するタスク)。通常のタスク クラスで同じプロセスを実行すると、そのプロセスは他のさまざまなプロセスとプロセッサを共有する必要があるため、より多くのコンテキスト スイッチが発生します。
  2. システムに多くのリアルタイム タスクが存在する場合でも、問題のリアルタイム スケジューリング アルゴリズムである FIFO と RR の性質により、コンテキスト スイッチが少なくなります。FIFO では、プロセッサは現在のタスクが完了するまで他のタスクに切り替えられません。RR では、プロセスに与えられる一定の間隔 (時間量) があります。CFS を見ると、プロセスが取得するタイムスライスは、プロセッサのランキューにあるタスクの数に比例します。これは、その重みとプロセッサ ランキューの合計重みの関数です。OSクラスを受講しているので、FIFOとRRに精通していると思います。CFS の詳細については、Google で検索するか、勇気がある場合はソース コードを確認することをお勧めします。

答えが完全であることを願っています:)

于 2013-03-28T12:00:45.497 に答える