
最新の 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
。