システムパフォーマンス入門

パフォーマンスに詳しいインフラに憧れて

ユーザ用ツール

サイト用ツール


· 最終更新: 2024/02/13 by kurihara


Linux Disk IO状況確認(コマンド比較 sar, iostat, iotop, dstat)

IOの知識

I/O Wait

  • I/O waitは、ディスクがボトルネックになっていて、CPU処理待ちが発生しているかです。
  • I/O Waitの単位は、tick
  • 1core 100 ticks
  • 8コアサーバだと、Maxが 800 ticksで、800job処理できる。
    そのサーバで、IO Waitが80 ticksだと、10%(1割)がIO待ちなので、遅い目安となる。
    1%以内が目安。
  • 1 tick = 10ms
Core数 Coreで処理できる数 注意する数
(Coreで処理できる数の10%)
2core 200 ticks 20 ticks
4core 400 ticks 40 ticks
8core 800 ticks 80 ticks
16core 1600 ticks 160 ticks
32core 3200 ticks 320 ticks
64core 6400 ticks 640 ticks


IOPS

1秒当たりにディスクが処理できるI/Oアクセスの数のことです

IOPSの目安

項目 IOPS 備考
SATA/SAS HDD 7200 RPM(回転) 75-100
SATA/SAS HDD 10000 RPM(回転) 125-150
SATA/SAS HDD 15000 RPM(回転) 175-300
SATA/SAS SSD 1万~10万
NVMe SSD 44万
項目 IOPS 備考
RAID 10 0.5倍 増やした台数の半分増加
RAID 5 0.2-0.5倍 増やした台数の半分以下増加
RAID 6 0.1-0.4 ほとんど増えない

ディスクの接続方式

IDE 133MB/s
SATA 150MB/s
SATA III 600MB/s
NVMe 4000MB/s


IO調査のためのLinuxコマンド

sar -bでIO確認

$ sar -b 1
Linux 3.10.0-327.10.1.el7.x86_64 (centos7)       2018年07月10日  _x86_64_        (2 CPU)

01時03分54秒       tps      rtps      wtps   bread/s   bwrtn/s
01時03分55秒      0.00      0.00      0.00      0.00      0.00
01時03分56秒      0.00      0.00      0.00      0.00      0.00
01時03分57秒      0.00      0.00      0.00      0.00      0.00
01時03分58秒      2.00      0.00      2.00      0.00     16.00
01時03分59秒      0.00      0.00      0.00      0.00      0.00
01時04分00秒      0.00      0.00      0.00      0.00      0.00
01時04分01秒      5.00      4.00      1.00    144.00      8.00
01時04分02秒     36.00     35.00      1.00   1048.00      8.00
01時04分03秒      0.00      0.00      0.00      0.00      0.00
01時04分04秒      0.00      0.00      0.00      0.00      0.00
01時04分05秒      0.00      0.00      0.00      0.00      0.00
^C

01時04分06秒      0.00      0.00      0.00      0.00      0.00
平均値:       3.65      3.31      0.34    101.10      2.71

tps 秒間I/Oリクエスト 数の合計。
rtps 秒間読み込みIOリクエスト数の合計。
wtps 秒間書き込みIOリクエスト数の合計。
bread/s blocks read per second
一秒あたりに read されたブロック数
bwrtn/s blocks written per second
一秒あたりに written されたブロック数


iostatでディスクごとのIO確認【オススメ】

iostatが、ディスクにボトルネックがあるかが分かりやすいです。

オプション
-x 通常の統計に加えて、拡張統計を表示
-t 時刻を出力
-k 表示をブロック数(512バイト)からkbに変更
実行例

$ iostat -xtk  1
Linux 3.10.0-327.10.1.el7.x86_64 (centos7)       2018年07月10日  _x86_64_        (2 CPU)

2018年07月10日 00時52分22秒
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.68    0.00    0.20    0.03    0.01   99.08

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.76     0.84    3.40    0.82    47.78    13.97    29.25     0.00    0.85    0.44    2.55   0.23   0.10
scd1              0.00     0.00    0.00    0.00     0.00     0.00     7.28     0.00    0.60    0.60    0.00   0.60   0.00
dm-0              0.00     0.00    3.22    0.83    44.02    10.86    27.12     0.00    0.98    0.44    3.04   0.21   0.09
dm-1              0.00     0.00    0.94    0.78     3.76     3.11     8.00     0.01    2.99    0.44    6.07   0.06   0.01

2018年07月10日 00時52分23秒
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.55    0.00    0.00    0.00    0.00   95.45

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

2018年07月10日 00時52分24秒
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.96    0.00    1.00    0.00    0.00   91.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

iostat結果の見方
r/s 秒間の読み込み回数
w/s 秒間の書き込み回数
avgrq-sz 平均 I/O サイズ
avgqu-sz 平均待ち行列長
await 重要 レスポンスタイム
要求が発行されてからI/Oの応答が終わるまでの時間
I/O応答平均時間(ミリ秒) ドライバの要求キーで待っている時間と実際のI/O応答時間を合わせたもの
r_await awaitデータの読み込み処理のみのデータ(ミリ秒)
w_await awaitデータの書き込み処理のみのデータ(ミリ秒)
svctm サービスタイム。1回のI/Oに要する時間 (ミリ秒)。
%util 重要 使用率
デバイスがI/O処理をしていたことによるビジー状態の時間の割合
複数ディスクからなる仮想デバイス環境ではあまり参考にならない
100に近いほどディスクの限界
IOPS (秒間のI/O回数) = (r/s + w/s)
svctm = 1000(ミリ秒) / IOPS
%util = IOPS * svctm / 1000 (ミリ秒)
参考

iotopでプロセスごとのIOを確認【オススメ】

  • 実行にroot権限が必要

# iotop

Total DISK READ :     204.84 K/s | Total DISK WRITE :      19.70 K/s
Actual DISK READ:     204.84 K/s | Actual DISK WRITE:      24.62 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
  644 be/4 ntp        47.27 K/s    0.00 B/s  0.00 %  0.35 % ntpd -u ntp:ntp -g
27382 be/4 nginx     137.87 K/s   15.76 K/s  0.00 %  0.23 % php-fpm: pool www
15165 be/4 nginx      19.70 K/s    3.94 K/s  0.10 %  0.00 % nginx: worker process
  512 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events_power_ef]
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 21
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcuob/0]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcuob/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
   12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcuos/0]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcuos/1]
   14 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
   15 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
   16 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
(略)


dstatでIOPSを確認

read, write 個別に表示

$ dstat -tr
----system---- --io/total-
     time     | read  writ
03-08 01:51:59|0.72  4.43
03-08 01:52:00|   0     0
03-08 01:52:01|   0     0
03-08 01:52:02|   0     0
03-08 01:52:03|   0     0
03-08 01:52:04|   0     0
03-08 01:52:05|   0     0
03-08 01:52:06|   0     0
03-08 01:52:07|   0  14.0
03-08 01:52:08|   0     0
03-08 01:52:09|   0  2.00

read, writeと合計を表示

$ dstat -tr | awk -F '|' 'NR>2{split($2,arr," ");sum=arr[1]+arr[2];print $0,sum}'
03-08 01:51:14|0.72  4.43  5.15
03-08 01:51:15|   0  7.00  7
03-08 01:51:16|   0  17.0  17
03-08 01:51:17|   0  2.00  2
03-08 01:51:18|   0  2.00  2
03-08 01:51:19|   0  2.00  2
03-08 01:51:20|   0  4.00  4
03-08 01:51:21|   0  23.0  23
03-08 01:51:22|   0  2.00  2
03-08 01:51:23|   0  2.00  2
03-08 01:51:24|   0  2.00  2
03-08 01:51:25|   0  2.00  2
03-08 01:51:26|   0  32.0  32
03-08 01:51:27|   0  2.00  2





· 最終更新: 2024/02/13 by kurihara

ページ用ツール