vmstat の"r"列とマクドナルドのレジカウンター - ablog の iostat 版です。
以前、iostat の見方 - ablog というエントリを書きましたが、
絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection)
- 作者: 小田圭二
- 出版社/メーカー: 翔泳社
- 発売日: 2008/04/22
- メディア: 単行本(ソフトカバー)
- 購入: 22人 クリック: 303回
- この商品を含むブログ (36件) を見る
を元に説明してみます。
$ iostat -x 30 avg-cpu: %user %nice %sys %iowait %idle 15.46 0.23 3.70 45.05 35.55 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util hda 2.77 5.26 34.36 39.29 619.26 462.68 309.63 231.34 14.69 1.47 19.90 7.58 55.85
これを銀行のATMに例えて説明してみるとこんな感じです。
イメージがわくと、いろいろと見えてきます。
- rsec/s が1秒間に読み込んだセクタ数ということはこれにセクタサイズを掛ければrkB/sになるはず。
619.26(rsec/s) * 512(byte) = 317061.12(byte) = 309.63(kB)
- wsec/s についても同様のことが言えるはず。
462.68(wsec/s) * 512(byte) = 236892.16(byte) = 231.34(kB)
14.69(avgrq-sz) * 512(byte) * (34.36(r/s) + 39.29(w/s)) = 553942.272(byte) = 540.95925(kB) 309.63(rkB/s) + 231.34(wkB/s) = 540.97(kB)
ほぼ同じ値になりますね。
- (r/s + w/s) * svctm = %util (Yoshinori Matsunobu's blog: iostat: (r/s + w/s) * svctm = %util on Linux より)
(34.36(r/s) + 39.29(w/s)) * 7.58(svctm) = 558.267(ms) = 0.558267(sec)
となり、(r/s + w/s) * svctm は %util とほぼ同じ値になります。
人が作ったものは頭の中で分解して再構築してみると理解が深まりますね。
追記(2011/12/04):
iostat のソースコードは SYSSTAT に行って、SYSSTAT から sysstat-10.0.3.tar.gz をダウンロードしたら見れました。
sysstat-10.0.3/iostat.c の line 607 を見てると、/proc/diskstats から情報を取ってるみたいですね。/proc/diskstats については
/proc/diskstats (Linux 2.5.69 以降)
Man page of PROC
このファイルには各ディスクデバイスのディスク I/O 統計情報が書かれている。更に詳しい情報は、カーネルソースファイル Documentation/iostats.txt を参照すること。
と書かれるので、http://www.kernel.org/doc/Documentation/iostats.txt を見てみたり、
Linux Kernel 2.6 のソースコードを見てみようと思って、
% git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
と実行してみたら、えらい時間かかるので(そりゃそうか)、
kernel/git/torvalds/linux.git - Linux kernel source tree
で見てみたり。
たまにはこんなことをしてみるのも面白いですね。
追記(2012/12/12):
"service time” is the time from when the request is given to the queue, and when the IO is completed.
Beware of Svctm in Linux’s Iostat