Test de IOPS en Linux con Fio
La necesidad aviva el ingenio o por lo menos eso dicen. La cuestión, en mi día a día me piden realizar diferentes pruebas, ya sea de uso de memoria, CPU o uso disco en los servidores que administro. Ya sabéis las típicas pruebas de Benchmark. Ahí es donde entra la herramienta de la que vamos a hablar hoy llamada Fio, que nos servirá para realizar pruebas de rendimiento de lectura y escritura de disco.
Fio, acrónimo en inglés de «Flexibe I/O Tester«, es una herramienta que genera varios subprocesos o procesos que realizan un tipo específico de acción de Entrada/Salida, según lo especificado por el usuario. Su uso típico es escribir un archivo de trabajo que coincida con la carga de E/S que se desea simular.
Además, si queremos dar una vuelta más, podemos generar gráficas, utilizando en este caso la herramienta fio-plot, para que nuestro estimado responsable fan de las «gráficas en verde y ascendente a la derecha» pueda presumir de ellas.

Imagen generada por IA con indicaciones del autor
Instalación de Fio
Este paquete suele estar en la mayoría de repositorios principales de las distribuciones más populares.
Instalación de Fio en Debian, Ubuntu, LinuxMint y derivadas
sudo apt install fio
Instalación de Fio en RHEL, Rocky Linux, Alma Linux y derivadas
Este paquete se encuentro dentro del repositorio EPEL
sudo yum -y install epel-release sudo yum -y install fio
Jugando un poco con Fio
El uso de Fio puede ser algo complejo, ya que debemos indicar al detalle lo que queramos que haga, podemos consultar su documentación, como siempre consultando su página de man.
Un ejemplo de uso sería el siguiente:
sudo fio \ --ioengine=libaio \ --direct=1 \ --randrepeat=0 \ --refill_buffers \ --end_fsync=1 \ --filename=$HOME/.fiotest \ --name=fio-read-test \ --rw=read \ --size=1GB \ --bs=1M \ --numjobs=1 \ --iodepth=8 \ --runtime=60
Veamos un poco al detalle lo que hemos hecho:
--rw=readEn este caso usaremos las pruebas de lectura, pero podemos hacer de escritura u otra:read,write,randread,randwrite,readwriteyrandrw--size=1GBUtilizamos un archivo de prueba de 1GB, la cantidad definida debe ser siempre múltiple de 1MB--bs=1MBDefinimos el valor máximo de bloque, que debe ser múltiple de 4k--iodepth=1Para lecturas/escrituras asíncronas, el sistema operativo retornará inmediatamente y la herramienta no necesita esperar a que se complete la operación de E/S. Esta opción establece cuántas operaciones de E/S están en curso o en segundo plano por el sistema operativo. Esta configuración requiere direct=1 y el uso de un motor de E/S asíncrono como libaio.--numjobs=1Número de trabajos paralelos que generará para la prueba.--runtime=60Número de segundos durante los cuales se ejecutará la prueba comparativa.--randrepeat=0Aquí podemos indicar si queremos que «resiembre» el generador aleatorio de forma diferente para cada ejecución--refill_buffersRellenar los buffers garantiza que los buffers se reescriban y no se almacenen en caché--end_fsync=1Garantiza que el contenido del archivo se sincronice antes de que finalice el trabajo--direct=1Utiliza E/S sin buffer
Podemos ver un ejemplo de resultado:

Resultado de utilizar fio más parámetros sobre un Ubuntu 24.04 virtual
Un poco de magia con Fio-plot
Se trata de una herramienta basada en Python que ayuda a ejecutar varios puntos de referencia de Fio y luego visualizar los resultados en varios gráficos.
Instalación de Fio-plot
Antes de nada en nuestro sistema debemos tener instalado la herramienta pip3, de la que ya hemos hablado en la web. Para instalar es así de fácil:
pip3 install fio-plotSi queremos instalar la herramienta solo para nuestro usuario:
pip3 install --user fio-plot
Instalación en Ubuntu 24.04 con pipx
En Ubuntu 24.04 he tenido que utilizar un método diferente, utilizando pipx, así:
sudo apt update sudo apt install pipx pipx ensurepath
Y finalmente:
source ~/.bashrc pipx install fio-plot pipx inject fio-plot setuptools
Uso de Fio-plot
A diferencia de Fio, con esta herramienta debemos utilizar un fichero de configuración donde definiremos todos los parámetros.
Para ello creamos un fichero llamado «benchmark.ini», con nuestro editor favorito:
[benchfio] target = /home/davidochobits/ output = resultados-test type = directory mode = read,write,randread,randwrite size = 1M iodepth = 1,2,4,8,16,32,64 numjobs = 1,2,4,8,16,32,64 direct = 1 engine = libaio precondition = False precondition_repeat = False runtime = 60 destructive = True block_size = 1024k
Y ahora, ejecutamos:
bench-fio benchmark.ini
Al lanzarlo nos mostrará esta información:
Generar los gráficos puede ser un poco complejo, para ello he encontrado un magnífico script en bash de ejemplo, en la web de leo.leung.xyz, que he adaptado para mis necesidades:
#!/bin/bash set -ex FIO_PLOT="/home/davidochobits/.local/bin/fio-plot" FIO_RESULTS="/home/davidochobits/resultados-test" for type in iops bw lat ; do for test in read write randread randwrite ; do $FIO_PLOT -i $FIO_RESULTS/1024k/ -r $test \ -L -t $type \ -T "Filesystem $type / $test (1024k)" -o results_1024k_$type_$test.png done done
De esta manera, si todo ha ido bien, ya podemos ver los resultados:

Resultados de las pruebas IOPS , en este caso de escritura.
Las posibilidades que ofrecen estas herramientas son muy grandes, os animo a probarlas.



Comentarios Recientes