web-dev-qa-db-ja.com

IOPSサイズを監視する

最新のLinuxでストレージIOPSのサイズを監視する方法は?

Iostatなどのコマンドを使用してストレージIOPSの量を監視できます。ただし、ワークロードによって生成されるIOPSのサイズを知りたいです。

最後のX秒間に、5 iops 4K、10 iops 8K、20 iops 16K ..のようなものがありました。

ブロックデバイスレベル(例:/ dev/sda)での監視に興味がありますが、他のレベルでも同様に興味深いでしょう。

1
TimB

低レベル

低レベルでは、この情報は_/sys/block/X/stat_から取得できます。これは文書化されています ここ

コンテンツの例は次のようになります。

_   10465     3250   759844    27528     4400     2983   546848    66306        0     9754    93792
_

必要なフィールドは、読み取り用の列1と3、および書き込み用の列5と7です。計算方法はどちらも同じなので、読み取りについてのみ説明します。

列1は読み取りの数(既に監視できると述べた)であり、列3は読み取られたセクターの数です。セクターは512バイトです。したがって、これらを使用して読み取りのサイズを計算するには、_$col3 * 512 / $col1_を実行するだけです。
このファイルの数値は、ディスクがオンラインになってからの合計です。したがって、一定期間の平均読み取りサイズを計算するには、ファイルを2回読み取り、_($col3_t2 - $col3_t1) * 512 / ($col1_t2 - $col1_t1)_で計算します。

上記の方法では、アプリケーションレベルで実行されるOPのサイズがわかります(説明は正確ではありませんが、十分に近いものです)。カーネルは複数の操作をマージできるため、ディスクで実行される操作の数は少なくなります。このための計算は次のとおりです:$col3 * 512 / ($col1 - $col2)。そして、ある期間にわたって値を取得するには:_($col3_t2 - $col3_t1) * 512 / (($col1_t2 - $col1_t1) - ($col2_t2 - $col2_t1))_

高いレベル

iostatも値を与えることができますが、精度は低くなります。書き込みと読み取りを区別せず、バイトではなくセクター単位の値のみを提供します(つまり、512を掛けます)。ただし、コマンドは_iostat -x -d_であり、表示する列は_avgrq-sz_です。

1
Patrick