elvtuneって 

elvtune - I/O エレベータの調整ツール

ってのがあるんだけど、どんな感じ?

manページによれば、カーネルがブロックデバイス(≒物理デバイス?)ごとにキューを持ち、書き出しに与える読み込み/書き込みの最大待ち時間と、読み込み待ちが存在する場合に書き込みの最大実行数制限の指定が出来る模様。「書き出しに与えるR/Wの最大待ち時間」っていう日本語はちょっと曖昧で、開始された単一のR/Wに対する最大連続実行時間を指定する様にも、キューに入ったR/Wそれぞれが最大でどれだけの時間待たされたままになる可能性があるのか指定する様にも読める。

実装するために必要になる事柄の複雑さを考えれば、多分前者(開始された単一のR/Wに対する最大連続実行時間)だろうと推測できるよね。

ディスクI/O待ちとなるケースの一つとして、大きなReadまたはWriteアクセスが発生し時間が掛かる中で別の小さなディスクアクセスも実行しなければならない場合を考えてみる。こうしたケースでは大きなR/Wは完了までに時間が掛かることは致し方のないことで、これが10%位延びた所で体感的には気にならないだろう。

だけど、後から必要になった小さなディスクアクセスはどうだろう? 通常あっという間に完了するはずのアクセスはなかなか完了せず、意味の分からない待ち状態になってしまうんじゃないだろうか。

こういう時にLinuxのI/Oスケジューラ(I/Oエレベータ)が賢ければ、連続して実行している大きなディスクアクセスを中断させ、後から来た小さなディスクアクセスを割り込みで先に完了させることが出来るはずだ。ということを実装しているんだろうね、ただ、使用環境によってどれだけ連続実行したら大きなディスクアクセスなのか、というのは変わってくるので、各自でチューニングすることが出来る様コマンドelvtuneが用意されているということだろうね。

というのは全部想像なので、試してみるチャンスがあれば「実際に使ってみたらどうよ」というのを書き込んでみようと思う。

elvtuneで調整できるパラメータを見ても、LinuxのI/Oエレベータってやっぱり結構シンプルですな。Solarisではもっと複雑なことをやっていそうで、R/W要求元のプロセス優先度とかも見てくれていたりしてんじゃないかしら、妄想だけど。今度調べてみよう。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/160-d68fe844