Survey: Linux New I/O Scheduler

https://lwn.net/Articles/720675/

Linux kernel 4.12 で入った新しい IO Scheduler について。 IO リクエストを発行する際に内部的に multiple queue(multiqueue API) を使う点が従来の scheduler と異なる。

記事にはベンチマークがないが、調べたら mq-deadline が SSD では一番性能が良く、私の PC でもデフォルトで mq-deadline が有効になっている。

以下各 IO scheduler の特徴。

BFQ: HDD(や遅い SSD など)遅いデバイス向けの scheduler。 CFQ(completely fair queue) をベースに heuristic を使って最適化されている。 記事が書かれた当時はデフォルトだった。

Kyber: read と write の2つの主要なキューを使う scheduler。 同期的なIO要求(つまり read)は read queue に、非同期的なIO要求(つまり write)は write queue に入る。 デバイス側にあるコマンドキューに入るIO要求数が少くなるように厳格に制限されているのがキーポイント。

mq-deadline: deadline scheduler を multiqueue API にポートしたもので、これは 4.11 で入った機能。 deadline scheduler は、IO要求の締切を設けて、 締切を過ぎているものを優先的に処理しレイテンシを改善し、 締切を過ぎたものがない場合はIOをソートしてパフォーマンス向上を目指す scheduler。

none: 何もしない scheduler。 直感に反すると思うが SSD では none も性能が高い。

IO Scheduler に変更が入ったモチベーションには、

・従来の IO scheduler の single queue がボトルネックになっていた。 ・NVMe など(他にもある?) 仕様としてコマンドキューが複数使える時に性能向上を実現するため。(AHCI はコマンドキューは1個しか存在しなかった。) ・ハイエンドの SSD が multiqueue をサポートし始めた。

というのがある。

Comments

comments powered by Disqus