最新のLinuxでストレージIOPSのサイズを監視する方法は?
Iostatなどのコマンドを使用してストレージIOPSの量を監視できます。ただし、ワークロードによって生成されるIOPSのサイズを知りたいです。
最後のX秒間に、5 iops 4K、10 iops 8K、20 iops 16K ..のようなものがありました。
ブロックデバイスレベル(例:/ dev/sda)での監視に興味がありますが、他のレベルでも同様に興味深いでしょう。
低レベルでは、この情報は_/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
_です。