Fenómeno problema
La tasa de uso del disco ssd (como disco de caché) io util está cerca del 100% en el clúster y es necesario determinar si se alcanza el cuello de botella del disco.
Investigación de problemas
Consulte la documentación de iostat, como se menciona en los blogs de otras personas, de que las utilidades de iostat no reflejan los nuevos dispositivos que admiten la concurrencia, como ssd, raid, etc .:
%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.
Además, puede consultar el artículo https://brooker.co.za/blog/2014/07/04/iostat-pct.html "Dos trampas en iostat:% util y svctm"
También lo probé en x86, leyendo el disco de caché:
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
Puede ver que iops está alrededor de 7000, y utils ya está al 100%; pero si aumenta 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
Puede ver que iops 12w y utils también son 100%.
También probé el dispositivo nvme, correspondiente a 4k-1-1, la lectura es solo 1w, si es 4k-1-128 la lectura tiene 25w, pero sus utilidades son 100%.
causas del problema
%util, it means "Percentage of CPU time during which I/O requests were issued to the device".
El parámetro util significa "el porcentaje de tiempo de CPU durante el cual se envían solicitudes de E / S al dispositivo". Este valor puede reflejar el nivel de ocupación de un dispositivo para dispositivos en serie (como discos mecánicos HDD). Si se ejecuta durante un tiempo prolongado superior a 90 %, puede ser lento. Para dispositivos en paralelo (como SSD, discos de estado sólido), si una E / S ocupa el 100% del tiempo de la CPU en un cierto período de tiempo, entonces 100 E / S en el mismo período de tiempo también pueden ocupar el 100% del tiempo de la CPU, por lo que no se puede considerar que el dispositivo haya alcanzado un cuello de botella.
Para juzgar un determinado dispositivo de disco, se deben analizar otros parámetros como el valor de espera, avgqu-sz, etc.
resumen de un problema
El valor de referencia de io util% solo es preciso para HDD, porque HDD no es concurrente y no puede reflejar la capacidad de SSD (dispositivo concurrente).