kakts-log

programming について調べたことを整理していきます

iostatでのディスクI/Oの指標を見る

iostatとは

「I/O statics」の略称 iostatコマンドを使って、ディスク毎のI/O統計を集計して ディスクI/Oの使用率・飽和度を示す指標をみることができます。
利用シーンとしては、主にディスクI/O関連の調査を行う場合に使われます。

主なオプション

iostatを実行する際の主なオプションは以下のとおりです。

オプション 説明
-c cpu統計を表示
-d ディスク統計を表示
-k 表示サイズ変更 ブロック数(512バイト)→ kb
-m 表示サイズ変更 ブロック数(512バイト)→ mb
-p 使用されているブロックデバイスと、そのパーティション毎の統計を表示する
-x 通常項目に加え、いくつかの拡張統計を表示する

デフォルトでは、 -c -dが有効になっていて、cpu統計・ディスク統計を見ることができます。
具体的には以下のような感じで各統計データを見ることができます。

$ iostat
Linux 2.6.32-431.17.1.el6.x86_64 _x86_64_   (2 CPU)

#cpu統計
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.02    0.03    0.00   99.92

#ディスク統計
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               0.46         2.63         9.55    2239142    8134170
vdb               0.00         0.00         0.00       1754          8
dm-0              1.27         2.61         9.47    2221322    8069280
dm-1              0.00         0.01         0.01       6288       6392

各項目の値の示す意味はman iostatで調べることができるので詳細を知りたい場合は読んでみると良いかもです。
ディスク統計の方の各項目について説明すると以下の通りになります。

項目 説明
tps 秒間あたりのトランザクション
Blk_read/s Blk_write/s 秒間あたりに(read | write)されたブロック数
Blk_read Blk_write read | writeの合計数

ブロック数の単位を変えたい場合は -m -kオプションを使って変えることができます。

-x オプションをつかって詳細なI/O統計を表示させる

iostat実行時に-xオプションを付けることで、より詳細なディスクの統計データを表示できます。

# ディスクの詳細な統計データを表示
$ iostat -dx

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.01     0.87    0.06    0.41     2.62     9.52    26.17     0.00    6.71    2.31    7.30   1.71   0.08
vdb               0.00     0.00    0.00    0.00     0.00     0.00     8.39     0.00    1.22    1.00   49.00   1.22   0.00
dm-0              0.00     0.00    0.06    1.21     2.60     9.44     9.50     0.10   75.09    2.88   78.71   0.63   0.08
dm-1              0.00     0.00    0.00    0.00     0.01     0.01     8.00     0.00   45.32    2.91   87.04   0.90   0.00
項目 説明
rrqm/s 秒間あたりに読み込みキューに登録され、マージされた読み出し要求数
wrqm/s 秒間あたりに読み込みキューに登録され、マージされた書き込み要求数
r/s 秒間あたりにディスクデバイスに発行された読み出し要求数
w/s 秒間あたりにディスクデバイスに発行された読み出し要求数
rsec/s 秒間あたりにディスクデバイスから読み出されたセクタ数
wsec/s 秒間あたりにディスクデバイスから書き込まれたセクタ数
await I/O応答平均時間(ミリ秒) ドライバの要求キーで待っている時間と実際のI/O応答時間を合わせたもの
r_await awaitデータの読み込み処理のみのデータ(ミリ秒)
w_await awaitデータの書き込み処理のみのデータ(ミリ秒)
%util バイスがI/O処理をしていたことによるビジー状態の時間の割合(使用率)

この中で、もっとも重要な指標は awaitで、要求が発行されてからI/Oの応答が終わるまでの時間を表すものです。
%utilも重要な指標ですが、あくまでビジー状況の計測値を表すもので、複数ディスクからなる仮想デバイス環境ではあまり参考にならない指標と言われています。

rrqm/s wrqm/sの値は、パフォーマンス向上のために、複数の読み込み・書き込み要求が1つにマージされていることを表す指標で、
シーケンシャルなワークロードが処理された兆候を表します。

参考

詳解 システム・パフォーマンス

Understanding iostat (Example)

https://stackoverflow.com/questions/4458183/how-the-util-of-iostat-is-computed

Interpreting iostat Output - Server Fault Blog