Analiza tu disco y su velocidad en Linux con Fio

Analiza tu disco y su velocidad en Linux con Fio

Anteriormente os he hablado de un conjunto de herramientas que os permitían medir el rendimiento de vuestro equipo en Linux, dicha suite se llama Sysbench y, aunque el artículo hacía especial énfasis en la Raspberry Pi y su sistema operativo Raspbian, es comúmente utilizado en muchas distribuciones desde hace tiempo.

Hoy traigo algo más especifico y que os servirá para analizar el rendimiento del disco de forma detallada, para de paso poder diagnosticar no solo velocidad del mismo, sino posibles problemas de configuración o salud que provoquen un rendimiento pobre o irregular.

Analiza tu disco en Linux con Fio

Esta herramienta se llama Fio y es un software open source diseñado para verificar el hardware. Soporta gran cantidad de motores de lectura/escritura, como libaio, sync, nmap, syslet, slice y otros. Soporta múltiples distribuciones como Linux, OpenSolaris, OpenBSD, HP-UX, Android e incluso Windows. Trabaja tanto con archivos como con dispositivos.

Fio se traduce como Flexible Input / Output. Más información en el repositorio Ubuntu.

 

Vamos a ver a continuación como trabajar con Fio, lanzando algunas tareas de cálculo de lectura, escritura y, antes de nada, vamos a ver los pasos de instalación.

Instalación de Fio

Ubuntu

Basta con lanzar el siguiente comando, ya que Fio está disponible en el repositorio oficial de Ubuntu por defecto:

sudo apt-get install fio -y

Debian 9

Del mismo modo que ocurre con Ubuntu, Fio está disponible en el repositorio predeterminado de Debian. Basta con poner lo siguiente:

sudo apt-get install fio -y

CentOS 7

Al no estar disponible en el repositorio predeterminado de CentOS, necesitaremos instalar el repositorio EPEL en nuestro sistema antes de continuar:

sudo yum install epel-release -y

Una vez concluido el paso anterior, instalaremos la herramienta:

sudo yum install fio -y

Requisitos de sistema

  • Ubuntu 16.04 o alguno de los sistemas operativos anteriormente citados
  • Cuenta de usuario con permisos para hacer sudo (cambiar a super-usuario o administrador)

Utilización de la herramienta Fio

Test de escritura aleatorio

Empezaremos por el test de escritura con el comando siguiente , que lanza escrituras de un total de 2 GB divididas en 4 tareas de 512 MB cada una (una para cada núcleo del procesador) al mismo tiempo:

sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting

Deberíamos ver una salida similar a esta cuando comience el proceso:

sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting
sudo: unable to stat /etc/sudoers.d/README: Permission denied
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1
...
fio-2.2.10
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)

A continuación tenemos los resultados del test una vez finalizado:

randwrite: (groupid=0, jobs=4): err= 0: pid=3121: Fri Aug 4 00:37:47 2017
 write: io=326988KB, bw=1362.3KB/s, iops=340, runt=240038msec
 slat (usec): min=3, max=3022.7K, avg=11732.00, stdev=81022.61
 clat (usec): min=0, max=56316, avg= 4.28, stdev=233.24
 lat (usec): min=4, max=3022.7K, avg=11738.09, stdev=81023.77
 clat percentiles (usec):
 | 1.00th=[ 1], 5.00th=[ 1], 10.00th=[ 1], 20.00th=[ 1],
 | 30.00th=[ 1], 40.00th=[ 1], 50.00th=[ 2], 60.00th=[ 2],
 | 70.00th=[ 2], 80.00th=[ 3], 90.00th=[ 3], 95.00th=[ 4],
 | 99.00th=[ 10], 99.50th=[ 12], 99.90th=[ 69], 99.95th=[ 111],
 | 99.99th=[ 6048]
 bw (KB /s): min= 5, max=27145, per=33.97%, avg=462.73, stdev=2353.60
 lat (usec) : 2=40.72%, 4=51.82%, 10=6.43%, 20=0.69%, 50=0.18%
 lat (usec) : 100=0.09%, 250=0.03%, 500=0.01%, 1000=0.01%
 lat (msec) : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
 lat (msec) : 100=0.01%
 cpu : usr=0.02%, sys=0.39%, ctx=4802, majf=0, minf=37
 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=81747/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
 latency : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
 WRITE: io=326988KB, aggrb=1362KB/s, minb=1362KB/s, maxb=1362KB/s, mint=240038msec, maxt=240038msec

Disk stats (read/write):
 sda: ios=2707/53905, merge=3192/23052, ticks=8832/618200, in_queue=626972, util=88.75%

Test de lectura aleatorio

De forma similar a lo anterior, lanzaremos 4 procesos de lectura de disco (cada uno con 512 MB) para un total de archivo de 2GB.

El pase de diapositivas requiere JavaScript.

sudo fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting

Y esta es la salida que tenemos al finalizar:

root@ubuntu:~# sudo fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting
sudo: unable to stat /etc/sudoers.d/README: Permission denied
randread: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=16
...
fio-2.2.10
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): [r(4)] [100.0% done] [3430KB/0KB/0KB /s] [857/0/0 iops] [eta 00m:00s]
randread: (groupid=0, jobs=4): err= 0: pid=3400: Fri Aug 4 00:49:02 2017
 read : io=824080KB, bw=3433.7KB/s, iops=858, runt=240004msec
 slat (usec): min=846, max=108007, avg=4636.19, stdev=1341.72
 clat (usec): min=12, max=174325, avg=69880.01, stdev=5797.63
 lat (msec): min=4, max=178, avg=74.52, stdev= 6.00
 clat percentiles (msec):
 | 1.00th=[ 64], 5.00th=[ 67], 10.00th=[ 68], 20.00th=[ 69],
 | 30.00th=[ 69], 40.00th=[ 70], 50.00th=[ 70], 60.00th=[ 71],
 | 70.00th=[ 71], 80.00th=[ 72], 90.00th=[ 73], 95.00th=[ 74],
 | 99.00th=[ 96], 99.50th=[ 105], 99.90th=[ 147], 99.95th=[ 169],
 | 99.99th=[ 174]
 bw (KB /s): min= 574, max= 924, per=25.01%, avg=858.65, stdev=29.85
 lat (usec) : 20=0.01%
 lat (msec) : 10=0.01%, 20=0.01%, 50=0.03%, 100=99.36%, 250=0.60%
 cpu : usr=0.07%, sys=5.27%, ctx=206487, majf=0, minf=94
 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.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.1%, 32=0.0%, 64=0.0%, >=64=0.0%
 issued : total=r=206020/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
 latency : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
 READ: io=824080KB, aggrb=3433KB/s, minb=3433KB/s, maxb=3433KB/s, mint=240004msec, maxt=240004msec

Disk stats (read/write):
 sda: ios=205962/90, merge=0/70, ticks=881032/344180, in_queue=1310388, util=92.64%

Estos son dos ejemplos básicos de uso de Fio para medir la velocidad de nuestros discos en equipos Linux, pero tiene muchas más opciones, así que o sugiero probar y leer la documentación para ver todas sus capacidades.

Deja tu comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s