Означает ли использование SSD-диска около 100%, что диск работает медленно?

Проблемное явление

Уровень использования io ssd-диска (как кэш-диска) близок к 100% в кластере, и необходимо определить, достигнуто ли узкое место диска.

Расследование проблемы

Обратитесь к документации iostat, как упоминалось в блогах других людей, о том, что утилиты iostat не отражают новые устройства, поддерживающие параллелизм, такие как ssd, raid и т. Д .:

  %util
         Percentage  of  elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is
         close to 100% for devices serving requests serially.  But for devices serving requests in parallel, such as RAID arrays  and  modern  SSDs,  this  number  does  not
         reflect their performance limits.

Кроме того, вы можете обратиться к статье «Две ловушки в iostat:% util и svctm» https://brooker.co.za/blog/2014/07/04/iostat-pct.html

Также пробовал на x86, прочитав кеш-диск:

fio -name test -rw randread -filename /dev/sdr -runtime 60  -time_based=1 -direct=1 -ioengine libaio -numjobs=1 -iodepth=1 -eta-newline=1

read: IOPS=7872, BW=30.8MiB/s (32.2MB/s)(236MiB/7671msec)
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     9.00 7524.00  394.00    29.59     2.37     8.27     0.42    0.18    0.13    1.14   0.12  95.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     0.00 8305.00   82.00    32.66     0.96     8.21     0.01    0.12    0.11    0.26   0.12  99.80

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     0.00 8379.00   62.00    32.80     0.60     8.10     0.02    0.11    0.11    0.10   0.12  99.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     8.00 7720.00  195.00    30.53     1.67     8.33     0.15    0.14    0.12    0.86   0.12  98.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     4.00 8021.00   87.00    31.33     0.72     8.10     0.02    0.12    0.12    0.17   0.12  99.20

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     5.00 7502.00  374.00    29.31     1.89     8.11     0.31    0.16    0.13    0.92   0.12  96.00

Вы можете видеть, что iops составляет около 7000, а utils уже составляет 100%; но если вы увеличите iodepth:

fio -name test -rw randread -filename /dev/sdr -runtime 60  -time_based=1 -direct=1 -ioengine libaio -numjobs=1 -iodepth=128 -eta-newline=1

read: IOPS=129k, BW=505MiB/s (530MB/s)(18.1GiB/36746msec)
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00    22.00 125637.00  667.00   491.68    13.65     8.19    10.29    0.35    0.34    1.90   0.01 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     9.00 131418.00  136.00   513.60     1.39     8.02     1.59    0.24    0.24    0.52   0.01 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     0.00 131817.00   43.00   514.91     0.34     8.00     0.23    0.21    0.21    0.19   0.01 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     1.00 132226.00   81.00   517.15     1.23     8.02     0.67    0.23    0.23    0.63   0.01 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdr               0.00     0.00 130618.00   37.00   510.23     0.32     8.00     0.12    0.21    0.21    0.65   0.01 100.00

Вы можете видеть, что iops 12w и utils тоже на 100%.

Я также протестировал устройство nvme, соответствующее 4k-1-1, только чтение 1 Вт, если 4k-1-128 чтение имеет 25 Вт, но их утилиты 100%.

причины проблемы

%util, it means "Percentage of CPU time during which I/O requests were issued to the device".

Параметр util означает «процент процессорного времени, в течение которого на устройство отправляются запросы ввода-вывода». Это значение может отражать загруженность устройства для последовательных устройств (например, механических жестких дисков). Если оно работает долгое время больше 90 %, это может быть медленным. Для параллельных устройств (таких как твердотельные накопители, твердотельные диски), если один ввод-вывод занимает 100% времени ЦП в определенный период времени, то 100 операций ввода-вывода за тот же период времени также могут занимать 100% времени ЦП, поэтому нельзя считать, что устройство достигло узкого места.

Чтобы оценить конкретное дисковое устройство, необходимо проанализировать другие параметры, такие как значение ожидания, avgqu-sz и так далее.

краткое изложение проблемы

Эталонное значение io util% является точным только для жесткого диска, потому что жесткий диск не является параллельным и не может отражать возможности SSD (параллельного устройства).

рекомендация

отblog.51cto.com/wendashuai/2551080
рекомендация