6.4.2. デッドライン I/O スケジューラー
デッドライン I/O スケジューラーは、要求に対して保証された待ち時間の提供を試みます。待ち時間の測定は、要求が I/O スケジューラーに到達してからしか開始されないことに留意してください (アプリケーションは要求記述子が解放されるのを待ちながらスリープになる場合があるので、これは重要な区別です)。デフォルトでは、書き込みよりも読み取りが優先されます。これは、アプリケーションが読み取り I/O をブロックする可能性の方が高いからです。
デッドラインは、I/O をバッチで送ります。バッチは、LBA で昇順となっている読み取りもしくは書き込み I/O の連続です。各バッチの処理後に、I/O スケジューラーは書き込み要求が長時間にわたってリソース不足になっていたかどうかをチェックし、読み取りもしくは書き込みの新たなバッチを開始するかどうかを決定します。要求の FIFO リストは各バッチの開始時に期限切れの要求があるかどうかだけをチェックされ、その後にそのバッチのデータ方向のみがチェックされます。このため、書き込みバッチが選択された場合に期限切れの読み取り要求があると、その読み取り要求は書き込みバッチが完了するまで実行されません。
チューニング可能なパラメーター
fifo_batch
- これは、単一バッチで発行される読み取りまたは書き込み数を決定します。デフォルト値は
16
です。これを高く設定するとスループットは改善しますが、待ち時間も長くなる可能性があります。 front_merges
- ワークロードが前方マージを生成しないと分かっている場合、これを
0
に設定できます。このチェックのオーバーヘッドを測定していない場合は、デフォルト設定のまま (1
) にしておくことが推奨されます。 read_expire
- このパラメーターで、読み取り要求が実行される時間をミリ秒で設定できます。デフォルト値は
500
ミリ秒 (0.5 秒) です。 write_expire
- このパラメーターで、書き込み要求が実行される時間をミリ秒で設定できます。デフォルト値は
5000
ミリ秒 (5 秒) です。 writes_starved
- このパラメーターは書き込みバッチの処理前に処理可能な読み取りバッチ数を制御します。この値を高く設定すればするほど、読み取りが優先されます。