完全に公平なキューイング

Completely Fair QueuingCFQ)は、 2003年にJens Axboeによって書かれたLinuxカーネルI/Oスケジューラです。[ 1 ]

説明

CFQは、プロセスから送信された同期リクエストをプロセスごとの複数のキューに配置し、各キューにディスクアクセスのためのタイムスライスを割り当てます。タイムスライスの長さとキューが送信できるリクエスト数は、プロセスのI/O優先度に依存します。すべてのプロセスに対する非同期リクエストは、優先度ごとに1つずつ、より少数のキューにまとめてバッチ処理されます。CFQは明示的な先行I/Oスケジューリングは行いませんが、同期I/Oの終了時にプロセスキューをアイドル状態にすることで、そのプロセスからの次の近いI/Oを「予測」し、システム全体のスループットを向上させるという同じ効果を実現します。これは、プロセスにI/Oタイムスライスを付与することの自然な拡張と考えることができます。

歴史

統合前

2003年2月、アンドレア・アルカンジェリは確率的公平キューイング(Stochastic Fair Queueing)I/Oスケジューラのアイデアをイェンス・アクスボーに提案し、アクスボーはそれを実装しました。イェンス・アクスボーは最初の実装に改良を加え、新バージョンを「完全公平キューイング(Completely Fair Queueing)」スケジューラと名付け、2.5.60開発シリーズカーネルに適用するためのパッチを作成しました。

カーネル 2.6.6 (2004年5月10日)

CFQ I/Oスケジューラは、オプションのI/Oスケジューラとしてメインラインカーネルに初めて統合されました。カーネルの「elevator」パラメータを使用することで、ブート時にスケジューラを変更することが可能でした。

カーネル 2.6.9 (2004年10月19日)

Red Hat Enterprise Linux 4は2.6.9ベースのカーネルを使用していたにもかかわらず、このI/Oスケジューラをデフォルトとして使用していました。[ 2 ]

カーネル 2.6.10 (2004 年 12 月 24 日)

CFQスケジューラの2番目のリリースであるCFQv2が2.6.10に含まれています。改善点としては、応答性の向上と、以前のバージョンで発生していた一部のリソース枯渇問題の解消などがあります。また、sysfsファイルシステムの/sys/block/<block_device>/queue/scheduler変数を変更することで、実行時にスケジューラを切り替えることも可能になりました。

カーネル 2.6.13 (2005年6月27日)

CFQスケジューラは、CFQv3と呼ばれる新しいタイムスライス設計に移行しました。特に、ioprio_get(2)ioprio_set(2)を実装しており、ユーザーはこれらを使用してプロセスごとのI/O優先度を設定できます。これらの優先度は通常、ionice(1)コマンドを使用して設定します(ただし、nice(1)コマンドを使用してもI/O優先度は多少変更されます)。

カーネル 2.6.18 (2006 年 9 月 20 日)

CFQは先行スケジューラに代わりデフォルトのスケジューラとなった。[ 3 ]

カーネル 5.0 (2019年3月3日)

CFQは削除されました。[ 4 ] [ 5 ] CFQはBudget Fair Queueing(BFQ)に進化しました。[ 6 ] [ 7 ]

参照

参考文献

出典