概要
今日はI/O Schedulerについて調べます
I/O Schedulerとは
前提として知っておきたい知識
ディスクI/Oが発生するとHDDヘッドが読み書きをする場所までヘッドをシークさせる時間がある
この時間は物理的な移動時間なので移動が少ないほどディスクI/Oの時間が少なくなる
ディスクIOスケジューラ
アプリケーションから発行された複数のI/O要求を並び替えてディスクのシーク量を減らすためのソフトウェア
ディスクI/Oのパフォーマンスがうまく出せていない時は考えてみると吉
並び替えアルゴリズムについて
キューについて
OSからI/O要求が新規に追加された際にはI/Oスケジューラが呼び出されるようになっていて、新しい要求をキューに追加する
要求をキューに追加するアルゴリズムが4つ存在する
noop
何もしないスケジューラ、I/O要求を要求順に処理をする
なのでスケジューリングの負荷が小さい
SSDなどはこれにすると早くなるとか
deadline
ディスク上で位置が近いI/O要求を優先して処理をしてHDDヘッドの移動量を削減する
逆に後回しになってしまうものもあるが待ち時間の限界(deadline)より遅くなるとそのI/O要求を優先する
リアルタイムアプリケーションやデータベースなどに適しているとか
acticipatory (AS)
I/O要求を予測してその予測に基づいて処理を行う
deadlineと同様に遅くなりすぎるとそのI/O要求を優先する
データにシーケンシャルにアクセスするWebサーバなどに有効とか
cfq (Completely Fair Queuing)
スケジューラは内部に多数のキューを保持しておき、プロセス単位でI/O要求をそれらキューに割り振る
処理対象のキューを一定間隔で切り替えることによってプロセス間でI/O要求は公平に処理される
deadlineやacticipatoryと同じ遅すぎると優先してくれる
設定例
// 現在の設定を確認(cfq) $ cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq] // スケジューラを変更する $ sudo sh -c '(echo deadline > /sys/block/sda/queue/scheduler)' // 設定確認 $ cat /sys/block/sda/queue/scheduler noop anticipatory [deadline] cfq
コメントを書く
コメント一覧