Saltar al contenido

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.

Analizar velocidad de 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)

Benchmark de disco duro en Linux

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.

Aprende másRealizar benchmark en Linux con Sysbench

Alejandro Ver todo

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

4 comentarios sobre “Analiza tu disco y su velocidad en Linux con Fio Deja un comentario

  1. Hola
    He llegado a esta comunidad vía g+,te comento que soy usuario básico en SO dese le secundaria q me ha lamido la
    Atención los distri tía sirena operativos, he usado Mac Os9 sonata , Windows 98 hacia adelante, xubunto. Entre otros, estudie armado y configuración de Compuatdoras y diseño gráfico inconcluso.
    Siempre me ha llamado la atención Linux .
    Actúalmente. Tengo instalado Mint, en un descktop de escritorio con las siguiente caractwristicas: Intel penrhuim 4. 1 g en RAM .
    El paquete de ofimatica no anda bien..!
    Que me recomiendas.?
    Saludos
    Desde Chile
    Sergio

    Me gusta

    • Hola Sergio, gracias por venir.
      Dado que tienes un problema de hardware anticuado (extremadamente diría yo) con hardware lo debes solucionar. No hay atajos ni soluciones milagrosas si quieres que te vayan bien aplicaciones actuales. Mint es bastante liviano, de los mejores para este caso, pero entiendo que el resto de programas que tienes en tu equipo y el propio sistema operativo lo dejan renqueante cuando inicias la ofimática. Intenta cerrar aplicaciones en segundo plano, deshabilita servicios de inicio y…compra nuevo hardware.

      Cualquier otra cosa me cuentas.
      Saludos.

      Me gusta

  2. Seria bueno explicar tambien cuales son los valores mas importantes de la salida de comando fio ya que da un monton arroja un monton de información pero no consigo ver los MB/s

    Me gusta

    • Hola Luis,

      Por ejemplo, para los valores del test de escritura deberemos fijarnos en el siguiente apartado.

      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

      El valor «io» en primer término se refiere al total de bytes escritos durante la prueba.
      El valor «bw» se refiere a la tasa de bytes escritos por segundo (bytes written)
      El valor iops se refiere a Input/Output operations per second y es uno de los valores más importantes, representando las operaciones de entrada y salida que es capaz de manejar el disco cada segundo, un valor que será muy superior en un SSD.
      El valor «runt» se refiere al tiempo transcurrido.
      Los términos «lat» hacen referencia a latencias
      El valor «slat» hace referencia a submit latency o el tiempo demorado en enviar los bytes a escribir al kernel para su proceso.
      El valor «clat» se refiere a «completion latency» o tiempo que se tarda desde el envío al kernel hasta la finalización del procesamiento de información. Es uno de los mejores parámetros para determinar el rendimiento con aplicaciones de cada disco.

      Espero haberte ayudado.
      Saludos.

      Me gusta

Deja tu comentario (puedes hacerlo de forma anónima)

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.