完全に公平なスケジューリングでは、時間分割はプロセスの優先順位によって異なりますか?

完全に公平なスケジューリングでは、時間分割はプロセスの優先順位によって異なりますか?

CFS(Completely Fair Scheduler)を理解しようとしています。ロバート・ラブ(Robert Love)によるとLinuxカーネルの開発、第3版(イタリック体は彼のもので、太字は私のものです):

各プロセスにタイムスライスを割り当てる代わりに、CFSは実行可能なプロセスの総数に基づいてプロセスを実行する時間を計算します。タイムスライスを計算するためにNice値を使用する代わりに、CFSはプロセスが受信するプロセッサ比率の測定値としてNice値を使用します。より高い値(低い優先順位)を持つプロセスは、デフォルトのNice値と比較して部分的な重みを受けます。 、値が低いプロセスは、デフォルトのNice値(優先順位が高い)に比べて部分的な重みを受けます。

次に、各プロセスは、その重みを、実行可能なすべてのスレッドの総重みで割った値に比例する「時間スライス」を実行する。現実的な時間を計算するために、CFSはほぼ完全なマルチタスクで「無限に小さい」一定期間の目標を設定します。この目標をターゲット待ち時間と呼びます...ターゲット待ち時間が20ミリ秒で、同じ優先順位を持つ2つの実行可能タスクがあるとします。これらのタスクの優先順位に関係なく、各プロセスは、他のプロセスをプリエンプトする前に10ミリ秒実行されます。同じ優先順位のジョブが4つある場合、各ジョブは5ミリ秒間実行されます。 20個のジョブがある場合、各ジョブは1ミリ秒間実行されます。

次に、異なるNice値を除いて、実行可能な2つのプロセスのケースをもう一度考えてみましょう。たとえば、1つはデフォルトのNice値(0)、もう1つはgood値5です。これらのNice値は重みが異なるため、2つのプロセスは異なるプロセッサ時間比を受けます。この場合、重みはNice-5プロセスの約3分の1のペナルティです。目標待ち時間が再び20ミリ秒の場合、両方のプロセスはそれぞれ15ミリ秒と5ミリ秒のプロセッサ時間を受け取ります。

最初の太字の文は、タスクが優先順位に関係なく同じ時間フラグメントを持つことを意味し、2番目の文は時間フラグメントが良い値に依存することを意味します。どちらが正しいですか?それとも何か抜けましたか?

ベストアンサー1

この2つの文は、CFSの仕組みの2つのケースを説明しています。前者は、2つのジョブが同じNice値を持つ場合、後者は2つのジョブが異なるNice値を持つ場合です。一般に、各タスクについて計算されたタイムスライスは、次の式にまとめることができます。

timeslice = (weight/total_weight)*target_latency

weightジョブに割り当てられている良い値に基づいて、現在のジョブの重みです。

total_weight実行キュー内のすべてのジョブの重みの合計です。

target_latencyCFS が実行キュー内のすべてのジョブを同時にスケジュールしようとする時間間隔。

元の式に戻り、両方のジョブのnice値が等しい場合、値も同じですweight。これをweight定数として扱うと、新しい式は次のようになります。

timeslice = (target_latency/total_weight)

ご覧のとおり、実行キュー内の各ジョブのタイムスライスはその値にweight依存しなくなり、各ジョブは同じタイムスライスを受け取ります。この本で言及された最初のケ​​ースです。

2番目のケースでは、良い値が異なるため、weight値も変わると述べました。各タスクはそれに応じて時間を受け取ります。

おすすめ記事