良い仕事はどうですか?


20

sched_setschedulerのコメント

すべてのスケジューリングはプリエンプティブです。より高い静的優先度を持つプロセスが実行可能になると、現在実行中のプロセスがプリエンプトされ、静的優先度レベルの待機リストに戻ります。

ながらのsetpriorityは言います

これにより、ナイス値が非常に低く(+19)、システムに他の優先度の高い負荷がある場合は常にプロセスにほとんどCPUを提供せず、高いナイス値(-20)を必要とするアプリケーションにほとんどのCPUを提供します

では、ナイス値をどのように変更すると、プログラムの実行に影響するのでしょうか?RTスケジューリング(ナイス値の高いプログラムがナイス値の低いプログラムを中断する)に似ていますか?


インターネット上のすべての情報は、使用方法nice、およびプロセスの優先度を変更する方法です。優先度の異なるプロセスがどのように機能するかを説明するリンクはありません。ソースコードすら見つかりませんでした。

回答:


24

特定のプロセスが受け取るプロセッサー時間の割合は、そのプロセスと他の実行可能なプロセスとの相対的な良さの違いによって決まります。

Linux Completely Fair Scheduler(CFS)は、優良さに基づいて重みを計算します。重量はにほぼ等しくなり1024 / (1.25 ^ nice_value)ます。nice値が減少すると、重みは指数関数的に増加します。プロセスに割り当てられるタイムスライスは、プロセスの重量をすべての実行可能なプロセスの合計重量で割った値に比例します。CFSの実装はにありkernel/sched/fair.cます。

CFSには、スケジューリング期間中のターゲット遅延があります。ターゲットレイテンシが小さいほど、対話性は向上しますが、ターゲットレイテンシが減少すると、スイッチングオーバーヘッドが増加し、全体のスループットが低下します。

たとえば、ターゲットレイテンシが20ミリ秒で、2つの実行可能プロセスが同等の良さである場合、両方のプロセスがそれぞれ10ミリ秒実行されてから、他のプロセスに優先されます。同等のナイスネスのプロセスが10個ある場合、それぞれ2ミリ秒実行されます。

次に、2つのプロセスを検討します。1つはナイスネス0(デフォルト)、もう1つはナイスネス5です。対応する重みの比例差は約1/3です。つまり、優先度の高いプロセスは約15ミリ秒のタイムスライスを受け取ります。一方、優先度の低いプロセスは5ミリ秒のタイムスライスを受け取ります。

最後に、それぞれ5と10のナイスネス値を持つ2つのプロセスを検討します。この場合、絶対的な素晴らしさはより大きくなりますが、素晴らしさの値の相対的な差は前の例と同じであり、同一のタイムスライス分割になります。


ちょうど私が探していたもの。ありがとう!後で、すべてを詳細に説明するこの記事を見つけましたが、あなたが書いたばかりの記事ではありません。
BЈовић

理解できないことがあります。vruntimeの役割は何ですか?
秋のサーファー

@Surferonthefall vruntimeは、プロセスが割り当てられた多くのCPU時間を追跡するCFS内部メカニズムです。この質問は、ユーザー空間に見える素晴らしい値に関するものです。あなたはCFSの内部に関する質問がある場合、および他の場所で答えを見つけることができない新しい質問を
トーマス・ナイマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.