
sched_setscheduler説明する:
すべての予約はプリエンプティブです。つまり、静的優先順位の高いプロセスが実行準備が整うと、現在実行中のプロセスがプリエンプトされ、静的優先順位の待機リストに戻ります。
しかし、優先順位の設定説明する
これにより、非常に低いnice値(+ 19)はシステムに優先順位の高い負荷があるときにプロセスにCPUをほとんど提供しません。 。アプリケーション
それでは、nice値を変更すると、プログラムの実行にどのような影響がありますか? RTスケジューリングと似ていますか(nice値の高いプログラムはnice値の低いプログラムを中断します)。
インターネット上のすべての情報は、nice
プロセスの優先順位を変更する方法と使用方法に関するものです。優先順位の異なるプロセスが正確にどのように機能するかを説明するリンクはありません。ソースコードも見つかりません。
答え1
特定のプロセスが受け取るプロセッサ時間の割合は、そのプロセスと他の実行可能なプロセスとの間の相対的な優位性の違いによって決まります。
Linux完全に公正なスケジューラ(CFS)計算重量フレンドリーさに基づいています。重量はほぼ同じです1024 / (1.25 ^ nice_value)
。 nice値が減少するほど、重みは指数関数的に増加します。プロセスに割り当てられたタイムスライスは、プロセスの重みを、実行可能なすべてのプロセスの合計重みで割った値に比例します。 CFSの実装はkernel/sched/fair.c
。
中央に一つあります。目標遅延一定期間です。ターゲット待ち時間が短いほどインタラクティブ性が向上しますが、ターゲット待ち時間が短くなると移行オーバーヘッドが増加し、全体のスループットが低下します。
たとえば、目標待ち時間が20ミリ秒で、実行可能な2つのプロセスのパフォーマンスが同じであると仮定すると、各プロセスは他のプロセスによってプリエンプトされる前に10ミリ秒間実行されます。 10個の同じプロセスがある場合、各プロセスは2ミリ秒間実行されます。
それでは、2つのプロセスを考えてみましょう。 1つはniceness 0(デフォルト)、もう1つはniceness 5です。対応する重みの比例的な差は約3分の1です。つまり、優先順位の高いプロセスは約15ミリ秒のタイムスライスを受け取り、優先順位の低いプロセスは5ミリ秒のタイムスライスを受け取ります。
最後に、niceness値がそれぞれ5と10の2つのプロセスを考えてみましょう。確かにこの場合好感度はもっと大きいが、比較的Nice値の差は前の例と同じであるため、同じ時間分割が発生します。