sysstat-iostatを使ってみた。

# 1.はじめに
性能問題が発生して、「CPU/メモリみたけど、問題なさそう。。残るはディスクだけ。」となったらこのコマンド！iostatさんの登場です！

ちょうど最近、iostatの出番があったので、備忘録としてここに記す。
# 2.iostatとは
「iostat」は、CPUの使用率とI/Oデバイスの使用状況を確認するコマンド。
早速、インストールしてみましょう。

```bash
(root)# yum install sysstat
================================================================================
 パッケージ Arch   バージョン                      リポジトリー           サイズ
================================================================================
インストール:
 sysstat    x86_64 11.7.3-7.el8                    InstallMedia-AppStream 425 k
依存関係のインストール:
 lm_sensors-libs
            x86_64 3.4.0-23.20180522git70f7e08.el8 InstallMedia-BaseOS     59 k

トランザクションの概要
================================================================================
インストール  2 パッケージ

合計サイズ: 484 k
インストール後のサイズ: 1.5 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_   1/2
  scriptletの実行中: lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_   1/2
  インストール中   : sysstat-11.7.3-7.el8.x86_64                            2/2
  scriptletの実行中: sysstat-11.7.3-7.el8.x86_64                            2/2
  検証             : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_   1/2
  検証             : sysstat-11.7.3-7.el8.x86_64                            2/2

インストール済み:
  lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64
  sysstat-11.7.3-7.el8.x86_64

完了しました!
```
一瞬です。ここでインストールしたsysstatの中にiostatが含まれています。
他にも性能監視用のコマンドであるsarとかmpstat、pidstatが含まれています。別の機会に紹介できれば・・・

ではコマンド打ってみましょう。

```bash
(root)#iostat
Linux 4.18.0-373.el8.x86_64    2022年06月01日  _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.01         0.00      29758          0
sda               0.14        12.45         1.99   42545645    6787996
dm-0              0.14        12.40         1.89   42356824    6456128
dm-1              0.03         0.04         0.09     151620     300400
dm-2              0.00         0.00         0.00       1388       2084
loop0             0.00         0.01         0.00      23593          0
```
こんな感じで表示できればOK！
見方はこの後で。

# 3.iostat主なオプション
iostatコマンドには、様々なオプションが用意されています。
|オプション  |説明  |
|---|---|
|-c |CPU使用率のみを出力する |
|-d | デバイス使用率のみを出力する |
|-h | 読みやすい表示形式で出力する（デバイス名の行と統計行の情報の2行に分かれる）|
|-p デバイス|表示対象のデバイスを指定する。パーティションごとの情報を出力したい場合は「-p /dev/sda」のように指定するか、または「-p ALL」と指定する。|
|-t|計測した時刻を出力する|
|-x|拡張ディスク統計情報を出力する  ※これだけ覚えて※|
|-z|表示対象の期間に使用されていないデバイス（入出力がゼロのデバイス）は表示しない|

では各コマンドを実行しましょう。
```bash:iostat(オプションなし)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.01         0.00      29758          0
sda               0.14        12.45         1.99   42557261    6788812
dm-0              0.14        12.39         1.89   42367352    6456944
dm-1              0.03         0.04         0.09     152708     300400
dm-2              0.00         0.00         0.00       1388       2084
loop0             0.00         0.01         0.00      23593          0
```
```bash:iostat -c
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88
```
```bash:iostat -d
Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.01         0.00      29758          0
sda               0.14        12.45         1.99   42557281    6788812
dm-0              0.14        12.39         1.89   42367352    6456944
dm-1              0.03         0.04         0.09     152728     300400
dm-2              0.00         0.00         0.00       1388       2084
loop0             0.00         0.01         0.00      23593          0
```
```bash:iostat -d
# 4.iostat実行結果の見方
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.1%    0.0%    0.1%    0.0%    0.0%   99.9%

      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
     0.00         0.0k         0.0k      29.1M       0.0k scd0
     0.14        12.4k         2.0k      40.6G       6.5G sda
     0.14        12.4k         1.9k      40.4G       6.2G dm-0
     0.03         0.0k         0.1k     149.2M     293.4M dm-1
     0.00         0.0k         0.0k       1.4M       2.0M dm-2
     0.00         0.0k         0.0k      23.0M       0.0k loop0
```
```bash:iostat -p ALL
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.01         0.00      29758          0
sda               0.14        12.45         1.99   42557473    6789012
sda1              0.00         0.00         0.00       7456          0
sda2              0.00         0.00         0.01      16112      29384
sda3              0.13        12.44         1.98   42526581    6759628
dm-0              0.14        12.39         1.89   42367352    6457144
dm-1              0.03         0.04         0.09     152920     300400
dm-2              0.00         0.00         0.00       1388       2084
loop0             0.00         0.01         0.00      23593          0
```
```bash:iostat -p /dev/sda
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.14        12.45         1.99   42579133    6789188
sda2              0.00         0.00         0.01      16112      29384
sda3              0.13        12.44         1.98   42548241    6759804
sda1              0.00         0.00         0.00       7456          0
```
```bash:iostat -x
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
scd0             0.00    0.00      0.01      0.00     0.00     0.00   0.00   0.00    0.90    0.00   0.00    63.86     0.00   0.80   0.00
sda              0.06    0.08     12.45      1.99     0.00     0.04   6.55  34.01    7.09    9.81   0.00   203.00    24.49   3.06   0.04
dm-0             0.04    0.10     12.40      1.89     0.00     0.00   0.00   0.00    3.92    9.62   0.00   334.06    19.08   3.12   0.04
dm-1             0.01    0.02      0.04      0.09     0.00     0.00   0.00   0.00    0.80   16.54   0.00     4.05     4.00   0.19   0.00
dm-2             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.29    1.50   0.00    12.29   208.40   0.44   0.00
loop0            0.00    0.00      0.01      0.00     0.00     0.00   0.00   0.00    0.27    0.00   0.00    14.44     0.00   0.22   0.00
```
```bash:iostat -z
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.01         0.00      29758          0
sda               0.14        12.45         1.99   42579133    6789672
dm-0              0.14        12.40         1.89   42388360    6457720
dm-1              0.03         0.04         0.09     153572     300484
dm-2              0.00         0.00         0.00       1388       2084
loop0             0.00         0.01         0.00      23593          0
```

# 4.コマンド実行結果の見方
ここでは、コマンド実行した後の各数値の見方を紹介します。
iostat -xを実行しました。

```bash:iostat -x
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.06    0.01    0.00   99.88

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
scd0             0.00    0.00      0.01      0.00     0.00     0.00   0.00   0.00    0.90    0.00   0.00    63.86     0.00   0.80   0.00
sda              0.06    0.08     12.45      1.98     0.00     0.04   6.55  34.01    7.09    9.81   0.00   202.99    24.49   3.06   0.04
dm-0             0.04    0.10     12.39      1.89     0.00     0.00   0.00   0.00    3.92    9.62   0.00   334.06    19.08   3.12   0.04
dm-1             0.01    0.02      0.04      0.09     0.00     0.00   0.00   0.00    0.80   16.54   0.00     4.05     4.00   0.19   0.00
dm-2             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.29    1.50   0.00    12.29   208.40   0.44   0.00
loop0            0.00    0.00      0.01      0.00     0.00     0.00   0.00   0.00    0.27    0.00   0.00    14.44     0.00   0.22   0.00
```
|列名  |説明  |
|---|---|
|r/s|1秒間に発行したリード要求数|
|w/s|1秒間に発行したライト要求数|
|rkB/s|1秒間に発行したリード要求のうち成功したkB数|
|wkB/s|1秒間に発行したライト要求のうち成功したkB数|
|rrqm/s|1秒間にマージされたリード要求の数|
|wrqm/s|1秒間にマージされたライト要求の数||
|%rrqm|1秒間にマージされたリード要求の割合%|
|%wrqm|1秒間にマージされたライト要求の割合%|
|r_await|リード要求の平均待ち時間|
|w_await|ライト要求の平均待ち時間|
|aqu-sz|デバイスに発行した要求の平均キュー長|
|rareq-sz|デバイスに発行したリード要求の平均サイズ (キロバイト)|
|wareq-sz|デバイスに発行したライト要求の平均サイズ (キロバイト)|
|svctm|デバイス⇔ディスク間にかかった時間（ミリ秒）|
|%util|デバイスの帯域幅の使用率|

## 「r/s、w/s」と「rrqm/s、wrqm/s」の違い

LinuxはI/O性能を高めるため複数のI/OオペをまとめてI/Oデバイスに発行します。ディスクシークに時間がかかるため、リクエストをマージしてディスクにコマンドを送っている。
つまり、プログラムが呼び出しているリクエスト数の論理的数値はr/s、w/sとなるが、実際の物理的なリクエスト数は、まとめられたオペレーションのrequest/secを表しているrrqm/s、wrqm/sということになる。
システムへの負荷を確認するという目的では、物理的なリクエスト数をみるべきなので、rrqm/s、wrqm/sに着目するといいらしい。

# 5.参考URL
https://atmarkit.itmedia.co.jp/ait/articles/1707/20/news021.html

https://www.greptips.com/posts/1131/