FreeBSD スケジューラと Linux スケジューラの違いは何ですか?
1 に答える
いくつかのスケジューラーが利用可能です。この回答では、デフォルトのスケジューラーである CFS (Linux) および ULE (FreeBSD) を想定しています。
CFSはCompletely Fair Schedulerの略です。最も顕著な違いは、CFS がプロセス選択の実行キューに基づいていないことです。代わりに、費やされた CPU 時間によってインデックス付けされる O(log N) の複雑さを持つ赤黒ツリーを使用します。
もう 1 つの注目すべき詳細は、CFS が時間計算にナノ秒を使用していることです。カーネルトラップから:
CFS はナノ秒の粒度アカウンティングを使用し、jiffies やその他の HZ の詳細には依存しません。したがって、CFS スケジューラには「タイムスライス」の概念がなく、ヒューリスティックもまったくありません。中央の調整パラメータは 1 つだけです。
/proc/sys/kernel/sched_granularity_ns
これは、スケジューラーを「デスクトップ」(低レイテンシー) から「サーバー」(適切なバッチ処理) のワークロードに調整するために使用できます。デフォルトでは、デスクトップ ワークロードに適した設定になっています。SCHED_BATCH も CFS スケジューラ モジュールによって処理されます。
ULEは、従来の BSD スケジューラの後継です。これにより、SMP システムおよびユニプロセッサー システムでのパフォーマンスが大幅に向上します。これは、実行キューとタイム スライスを備えた従来の設計に従います。公平であるように努めますが、インタラクティブなプロセスを優先するように指示することができます。
ULE の作成者が CFS ソースを研究しているときに発見したいくつかの結果へのリンクを次に示します。彼らはまた、コメントで CFS スケジューラのアルゴリズムの複雑さ (激しく議論されてきた) についても議論しています。
どちらのスケジューラもデスクトップでの使用に適しています。set を使用kern.sched.interact
すると、ULE はインタラクティブなプロセスを優先します。それがなければ、CFS と ULE は同等に公平であるべきです。
ULE のコード行数は約 3000 行ですが、CFS はその 2 倍近くまで押し上げています。