ディスク IO 負荷率を計算する方法は?

ディスク IO 負荷率を計算する方法は?

以下は net-snmp の出力です。ご覧のとおり、diskIOLA は使用できません。

SNMP table: UCD-DISKIO-MIB::diskIOTable

diskIOIndex diskIODevice diskIONRead diskIONWritten diskIOReads diskIOWrites diskIOLA1 diskIOLA5 diskIOLA15 diskIONReadX diskIONWrittenX

      25          sda   845276160     2882477056      576632     42597061         ?         ?          ?   5140243456    883350772736

ここでの定義によればhttp://www.net-snmp.org/docs/mibs/ucdDiskIOMIB.html:

ディスクIOLAxディスクの x 分間平均負荷 (%) を意味します。

表内の他の値は次のとおりです。

  • diskIONRead - 起動以降にこのデバイスから読み取られたバイト数。
  • diskIONWritten - 起動以降にこのデバイスに書き込まれたバイト数。
  • diskIOReads - 起動以降のこのデバイスからの読み取りアクセスの数。
  • diskIOWrites - 起動以降のこのデバイスへの書き込みアクセス回数

では、この負荷はサーバーで収集されないので、手動でどのように計算できるのでしょうか?

最終的には、ディスク IO が重いかどうかをユーザーが確認できるグラフを表示したいと考えています。これは、読み取り/書き込みバイト数/秒または読み取り/書き込み要求数/秒を使用して表示できます。

読み取り/書き込み要求数/秒のみを表示すると、大量の I/O が行われていることがわかります。ただし、ディスクの R/W 速度がこれによって影響を受けるかどうかはわかりません。

また、R/W 速度だけを表示しても、速度が影響を受けた理由 (I/O 操作が多すぎるためか、非同期書き込み用のバッファ メモリが不足しているためか) はわかりません。したがって、両方を表示する必要があります。

しかし、ディスク IOLoad のその他の値とは何を意味し、それをどのように計算すればよいのでしょうか。また、なぜ snmp で収集されないのでしょうか。これを有効にすると、大きな負荷が発生しますか? この値の収集に大きな負荷が発生する場合は、手動で計算できます。しかし、計算式は何ですか?

答え1

あなたが持っている情報だけでは、ディスク使用率 % を計算するには不十分です。ディスク使用率 % は次のように計算されますdisk_time_spent_in_io / elapsed_time
たとえば、ディスクが 1 秒間に IO を実行するのに 0.25 秒を費やした場合、ディスクの使用率は 25% になります。

使用率 % に関しては、操作数は意味がありません。ディスクと、実行している IO の種類 (バルクとランダム) に応じて、10 IOPS または 10000 IOPS で 100% 使用される可能性があります。それを知る唯一の方法は、ディスクがそれらの IOPS を実行するのにどのくらいの時間がかかるかを確認することです。

答え2

解決策を探しているすべての人のために、iostat は からパーセンテージを計算します/sys/block/sda/stat。式はおおよそ次のようになります。

{now,past}_tot_ticks = total time this block device has been active (/sys/block/sda/stat)
{now,past}_uptime = uptime in /proc/uptime (first value)

percentage = (now_tot_ticks - past_tot_ticks) / (now_uptime - past_uptime) / 10

1 秒間の IO 負荷をパーセンテージで取得するコマンド:

$ cat \
    <(cat /sys/block/sda/stat && cat /proc/uptime)            \
    <(sleep 1 && cat /sys/block/sda/stat && cat /proc/uptime) \
    | awk -v RS="" '{printf "%.2f%\n", ($27-$10)/($33-$16) / 10}';

さらに読む:
[1]https://www.kernel.org/doc/Documentation/block/stat.txt
[2]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-uptime
[3]https://github.com/sysstat/sysstat/blob/v11.4.3/iostat.c

関連情報