2013-02-17 7 views

答えて

12

利用可能なスケジューラがいくつかあります。この回答はデフォルトのスケジューラー、CFS(Linux)とULE(FreeBSD)を前提としています。

CFSは、の完全に公平なスケジューラの略です。最も顕著な違いは、CFSはプロセス選択の実行キューに基づいていないことです。代わりに、O(log N)の複雑さを持つ赤黒のツリーを使用します。このツリーは、費やされたCPU時間によって索引付けされます。

CFSは時間アカウンティングにナノ秒を使用しています。 Kernel Trapから:

CFSは、ナノ秒の粒度会計を使用して、任意の jiffy単位または他のHZの詳細に依存しません。したがって、CFSスケジューラには 「タイムスライス」という概念はなく、ヒューリスティックはまったくありません。一つだけ 中央チューナブルがあります:「サーバ」(良いバッチ処理)ワークロードに「デスクトップ」(低レイテンシ )からチューニングするために、スケジューラを使用することができます

/proc/sys/kernel/sched_granularity_ns 

。デスクトップワークロードに適したデフォルト設定は です。 SCHED_BATCHは CFSスケジューラモジュールによっても処理されます。

ULEは、従来のBSDスケジューラの後継です。 SMPシステムとユニプロセッサーシステムで大幅に改善されたパフォーマンスを提供します。実行キューとタイムスライスを使用する従来の設計に従います。公平に努めていますが、インタラクティブなプロセスを好むよう指示することができます。

ここでは、CFSのソースを勉強している間に、ULEの著者によるいくつかの所見にはlinkがあります。また、CFSスケジューラのアルゴリズムの複雑さ(議論が深まっている)については、コメントで説明します。

両方のスケジューラは、デスクトップでの使用に適しています。 kern.sched.interactが設定されていると、ULEは対話型プロセスを優先します。それがなければ、CFSとULEは同等に公正でなければなりません。

ULEはおよそ3000行のコードであり、CFSはその2倍に近くなっています。

関連する問題