Cómo medir el rendimiento del disco usando Fio en Linux
Fio es una herramienta gratuita y de código abierto que se puede utilizar para pruebas comparativas y verificación de hardware. Es compatible con muchos motores de E / S, incluidos libaio, sync, nmap, syslet, network, slice y muchos más. También es compatible con muchas distribuciones como Linux, OpenBSD, OpenSolaris, HP-UX, Android y Windows. Puede funcionar tanto en archivos como en dispositivos de bloque.
En este tutorial, aprenderemos cómo instalar Fio en Linux, también aprenderemos cómo usar Fio con algunos ejemplos.
Requisitos
- Ubuntu 16.04 de escritorio o posterior instalar en su sistema.
- Un usuario normal con privilegios de sudo.
Instalar Fio
Aquí, instalaremos Fio en todas las principales distribuciones de Linux, como CentOS 7, Ubuntu 16.04 y Debian 9.
Instalar Fio en Ubuntu 16.04
De forma predeterminada, Fio está disponible en el repositorio predeterminado de Ubuntu, por lo que puede instalarlo fácilmente ejecutando el siguiente comando:
sudo apt-get install fio -y
Instalar Fio en CentOS 7
De forma predeterminada, Fio no está disponible en el repositorio predeterminado de CentOS. Por lo tanto, deberá instalar el repositorio EPEL en su sistema. Puede instalarlo ejecutando el siguiente comando:
sudo yum install epel-release -y
Una vez que el repositorio de EPEL está instalado, puede instalar Fio ejecutando el siguiente comando:
sudo yum install fio -y
Instale Fio en Debian 9
De forma predeterminada, Fio está disponible en el repositorio de Debian, puede instalarlo simplemente ejecutando el siguiente comando:
sudo apt-get install fio -y
Trabajando con Fio
Ahora, Fio está instalado en su sistema. Es hora de ver cómo usar Fio con el ejemplo.
Ejemplo 1: prueba de escritura aleatoria
Comencemos ejecutando el siguiente comando. Este comando escribe un total de archivos de 2GB [4 jobs x 512 MB = 2GB] ejecutar 4 procesos a la vez:
sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting
Debería ver el siguiente resultado:
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 fio-2.1.3 Starting 4 processes randwrite: Laying out IO file(s) (1 file(s) / 512MB) randwrite: Laying out IO file(s) (1 file(s) / 512MB) randwrite: Laying out IO file(s) (1 file(s) / 512MB) randwrite: Laying out IO file(s) (1 file(s) / 512MB) Jobs: 1 (f=1): [__w_] [-.-% done] [0KB/27032KB/0KB /s] [0/6758/0 iops] [eta 00m:00s] randwrite: (groupid=0, jobs=4): err= 0: pid=28810: Tue Jul 25 20:28:20 2017 write: io=2048.0MB, bw=297722KB/s, iops=74430, runt= 7044msec slat (usec): min=9, max=47469, avg=38.13, stdev=488.37 clat (usec): min=1, max=10595, avg= 2.26, stdev=30.99 lat (usec): min=11, max=47478, avg=40.74, stdev=489.66 clat percentiles (usec): | 1.00th=[ 1], 5.00th=[ 2], 10.00th=[ 2], 20.00th=[ 2], | 30.00th=[ 2], 40.00th=[ 2], 50.00th=[ 2], 60.00th=[ 2], | 70.00th=[ 2], 80.00th=[ 2], 90.00th=[ 2], 95.00th=[ 2], | 99.00th=[ 3], 99.50th=[ 4], 99.90th=[ 16], 99.95th=[ 61], | 99.99th=[ 454] bw (KB /s): min=10626, max=244432, per=32.42%, avg=96530.07, stdev=85594.86 lat (usec) : 2=4.28%, 4=95.15%, 10=0.44%, 20=0.03%, 50=0.03% lat (usec) : 100=0.04%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01% cpu : usr=11.91%, sys=27.58%, ctx=4646, majf=0, minf=104 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=0/w=524288/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): WRITE: io=2048.0MB, aggrb=297721KB/s, minb=297721KB/s, maxb=297721KB/s, mint=7044msec, maxt=7044msec Disk stats (read/write): sda: ios=129/2495, merge=0/1599, ticks=11520/91476, in_queue=143340, util=78.35%
Ejemplo 2: prueba de lectura aleatoria
El siguiente comando leerá un total de 2 GB de archivos, ejecutando 4 procesos a la vez.
sudo fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting
Debería ver el siguiente resultado:
randread: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=16 ... randread: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=16 fio-2.1.3 Starting 4 processes randread: Laying out IO file(s) (1 file(s) / 512MB) randread: Laying out IO file(s) (1 file(s) / 512MB) randread: Laying out IO file(s) (1 file(s) / 512MB) randread: Laying out IO file(s) (1 file(s) / 512MB) Jobs: 4 (f=4): [rrrr] [100.0% done] [467KB/0KB/0KB /s] [116/0/0 iops] [eta 00m:00s] randread: (groupid=0, jobs=4): err= 0: pid=14521: Tue Jul 25 22:01:24 2017 read : io=117912KB, bw=503032B/s, iops=122, runt=240028msec slat (usec): min=93, max=1178.5K, avg=32554.59, stdev=45398.62 clat (usec): min=12, max=2611.2K, avg=487669.64, stdev=288615.07 lat (msec): min=49, max=2667, avg=520.23, stdev=303.69 clat percentiles (msec): | 1.00th=[ 167], 5.00th=[ 217], 10.00th=[ 247], 20.00th=[ 289], | 30.00th=[ 330], 40.00th=[ 367], 50.00th=[ 404], 60.00th=[ 445], | 70.00th=[ 502], 80.00th=[ 603], 90.00th=[ 898], 95.00th=[ 1057], | 99.00th=[ 1614], 99.50th=[ 1811], 99.90th=[ 2245], 99.95th=[ 2376], | 99.99th=[ 2573] bw (KB /s): min= 4, max= 318, per=25.59%, avg=125.65, stdev=59.18 lat (usec) : 20=0.01% lat (msec) : 50=0.01%, 100=0.02%, 250=10.45%, 500=59.10%, 750=15.73% lat (msec) : 1000=8.21%, 2000=6.23%, >=2000=0.25% cpu : usr=0.05%, sys=0.17%, ctx=29816, majf=0, minf=165 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=99.8%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=29478/w=0/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): READ: io=117912KB, aggrb=491KB/s, minb=491KB/s, maxb=491KB/s, mint=240028msec, maxt=240028msec Disk stats (read/write): sda: ios=29552/2717, merge=0/2735, ticks=969368/97672, in_queue=1067872, util=100.00%
Ejemplo 3: Prueba de rendimiento de lectura y escritura
El siguiente comando medirá el rendimiento de lectura / escritura aleatoria de la memoria USB (/ dev / sdc1):
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Debería ver el siguiente resultado de la prueba:
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 fio-2.1.3 Starting 1 process Jobs: 1 (f=1): [m] [98.0% done] [191KB/95KB/0KB /s] [47/23/0 iops] [eta 00m:03s] test: (groupid=0, jobs=1): err= 0: pid=24800: Tue Jul 25 22:10:38 2017 read : io=15512KB, bw=107237B/s, iops=26, runt=148123msec write: io=4968.0KB, bw=34344B/s, iops=8, runt=148123msec cpu : usr=0.08%, sys=0.18%, ctx=5080, majf=0, minf=24 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=0.3%, 32=0.6%, >=64=98.8% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued : total=r=3878/w=1242/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): READ: io=15512KB, aggrb=104KB/s, minb=104KB/s, maxb=104KB/s, mint=148123msec, maxt=148123msec WRITE: io=4968KB, aggrb=33KB/s, minb=33KB/s, maxb=33KB/s, mint=148123msec, maxt=148123msec Disk stats (read/write): sdc: ios=3506/1203, merge=372/28, ticks=7386380/1400600, in_queue=8796700, util=100.00%
El comando anterior escribirá datos de 20 MB en la memoria USB y realizará lecturas y escrituras de 4 KB utilizando tres lecturas para cada relación de escritura (rwmixread = 75).
Fio es una herramienta muy útil que puede brindar información sobre el estado de la velocidad y la latencia del disco. Ahora puede probar fácilmente el rendimiento del disco con Fio.