I/O Schedulerをわかりやすくまとめる

Published: 2016年4月5日 by tomsato

概要

今日は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

参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧