IOPSサイズを監視する

IOPSサイズを監視する

最新の Linux でストレージ IOPS のサイズを監視するにはどうすればよいでしょうか?

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

たとえば、最後の X 秒間に、4K で 5 iops、8K で 10 iops、16K で 20 iops などがありました...

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

答え1

低レベル

低レベルでは、この情報は から取得できます/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

関連情報