ablog

不器用で落着きのない技術者のメモ

Linux の I/O スケジューラ

DBマガジン5月号の「Linux-DBサーバー構築入門/松信嘉範」で取り上げられていた I/O スケジューラについてメモ。

  • I/O スケジューラはディスク I/O を効率化するための機能。
  • I/O 要求の順番の通りに I/O していると効率が悪いので、シーク待ちや回転待ちが最小化するよう並べ替える。
  • Kernel 2.6.10 からは deadline、moop、cfq、anticipatory の4種類があり、デフォルトは cfq。
    • deadline: 読み込み・書き込みの両方をバランス良く処理する。deadline 以外は読み込み・書き込みの区別をしない。
    • noop: 「キューにたまったI/O要求を物理的な配置上に並び替える」以外に特別なスケジューリングをしない。
    • cfq(Completely Fair Queuing): 特定のプロセス/スレッドだけにI/O要求が偏るのを防ぎ、まんべんなく振り分ける。
    • anticipatory: 発行されるI/O要求から将来的に発行されるI/O要求の位置情報を予測し、位置の離れたI/O要求の処理を止めて、位置の近いI/O要求を処理する。
  • で、DBサーバに適切なI/Oスケジューラは?

P.176

どのようなRDBMS製品やストレージ製品をどのように使うかによっても変わってくるため、一概に言い切ることができません。
経験的に大半のケースでは「deadline」か「noop」をお勧めします。

とのこと。デフォルトの cfq じゃないんで、注意しなきゃ。