カーネルを再コンパイルしていて、I/Oスケジューラーを選択したいと思います。これらの違いは何ですか?
それらをすべてコンパイルする場合は、起動時に、またはデバイスごとに、使用するスケジューラーを選択できます。すべてのバイトが重要な組み込みデバイスを対象としている場合を除き、コンパイル時に選択する必要はありません。起動時のデバイスごとまたはシステム全体の切り替えの詳細については、_Documentation/block/switching-sched.txt
_を参照してください。
CFQスケジューラを使用すると、ionice(1)
ツールまたはioprio_set(2)
システムコールを介して優先順位を設定できます。これにより、一部のプロセスを優先したり、他のプロセスにIO)を強制したりできるのは、システムのブロックデバイスが比較的アイドル状態の場合のみです。キューは IOプロセスからキューへの要求 、およびCPUスケジューリングと同様に、各キューからの要求を処理します。構成の詳細については、_Documentation/block/cfq-iosched.txt
_を参照してください。
対照的に、期限スケジューラは、すべてのプロセスからのすべての書き込みを一度に調べます。書き込みをセクター番号でソートし、すべて線形に書き込みます。期限とは、期限が切れる前に各ブロックを書き込もうとすることを意味しますが、期限内であれば、適切と思われるブロックを自由に再配置できます。構成の詳細については、_Documentation/block/deadline-iosched.txt
_を参照してください。
おそらく実際にはほとんどありません。
私のテストでは、賢いRAIDコントローラーがあれば、一般的にNOOPの方が少し優れていることがわかりました。他の人も同様の結果を報告していますが、ワークロードは異なる場合があります。
ただし、実行時に(再起動せずに)選択できるため、コンパイル時に心配する必要はありません。
私の理解では、「賢い」スケジューラー(CFQと期限)は、RAIDコントローラーを備えていない従来の「スピニングディスク」デバイスでのみ実際に役立ちます。