Dec 16, 2008

Herramientas de benchmark en Linux

Benchmark es una palabra procedente de la lengua inglesa que puede traducirse como "comparativa". El benchmark hace referencia a un conjunto de técnicas que persiguen el objetivo de medir el rendimiento de un sistema hardware o software, o ambos a la vez.

El rendimiento de un sistema se puede medir en base a los resultados de funcionamiento ofrecidos por varios de sus componentes: memoria RAM, memoria caché, disco duro, procesador, tarjeta gráfica, etc. A continuación se van a presentar una serie de herramientas de software libre que nos van a ayudar a obtener estos indicadores en sistemas operativos pertenecientes a la familia GNU/Linux.

Lmbench

Lmbench es un conjunto de scripts que permiten desarrollar distintos tipos de análisis y medidas:

  • Ancho de banda: copia, lectura y escritura en memoria, pipes y TCP.
  • Latencias: cambios de contexto, conexiones TCP/UDP, creación y borrado de archivos, creación de procesos, tratamiento de señales, llamadas al sistema y acceso a memoria.

Una vez instalada la aplicación en la máquina a testear (están disponibles tanto los fuentes como los paquetes instalables para cualquier tipo de repositorio), se creará un directorio con un conjunto de archivos binarios encargados de realizar las medidas comentadas:

# ls -l /usr/lib/lmbench/bin/i686-pc-linux-gnu/
total 3332
-rwxr-xr-x 1 root root 30264 2008-09-21 14:32 bw_file_rd
-rwxr-xr-x 1 root root 34344 2008-09-21 14:32 bw_mem
-rwxr-xr-x 1 root root 30272 2008-09-21 14:32 bw_mmap_rd
-rwxr-xr-x 1 root root 30252 2008-09-21 14:32 bw_pipe
-rwxr-xr-x 1 root root 30296 2008-09-21 14:32 bw_tcp
-rwxr-xr-x 1 root root 30256 2008-09-21 14:32 bw_unix
-rwxr-xr-x 1 root root 153240 2008-09-21 14:32 cache
-rwxr-xr-x 1 root root 30260 2008-09-21 14:32 disk
...

Podremos utilizar cada uno de estos binarios de forma individual para realizar una medida concreta, o se podrá emplear el comando lmbench-run a través del cual, un asistente nos guiará en la configuración de las distintas pruebas de benchmark, las ejecutará y nos presentará un informe del transcurso de las mismas (este comando hará uso de cada uno de los binarios anteriormente citados, cuyo formato y especificación pueden ser consultados a través del man).

Por ejemplo, para comprobar la velocidad de lectura de la memoria RAM ejecutaríamos el siguiente comando:

/usr/lib/lmbench/bin/i686-pc-linux-gnu# ./bw_mem 256m rd
268.44 3913.68

En el ejemplo anterior le hemos dicho a lmbench que lea 256 MB de memoria RAM. Como resultado nos dice que ha leído 268.44 MB, y el ancho de banda correspondiente ha sido de 3913.68 MB/s.

Hardinfo

Hardinfo es una utilidad que proporciona información sobre un determinado sistema operativo, así como del hardware que lo alberga. Además, es capaz de realizar distintos tipos de benchmarks sobre la propia CPU:

  • CPU Zlib: compresión de 64 MB de datos.
  • CPU Fibonacci: cálculo del número 42 de Fibonacci.
  • CPU MD5: obtener el MD5 de un fichero de 312 MB.
  • CPU SHA1: obtener el SHA1 de un fichero de 312 MB.
  • CPU Blowfish: cifrado de un fichero mediante el algoritmo Blowfish.

Dd

Dd es una herramienta integrada en los sistemas Linux que permite el copiado bit a bit, independientemente del sistema de archivos origen y destino. Esta utilidad te muestra la velocidad de lectura o escritura con la que se ha realizado la operación. Por lo tanto, podrá ser empleada para medir la velocidad de acceso al disco duro.

  • Escritura: copia de XXXX · YYYY bytes desde el dispositivo origen /dev/zero al fichero /tmp/output.

     dd if=/dev/zero of=/tmp/output bs=XXXX count=YYYY

  • Lectura: lectura de XXXX · YYYY bytes desde el disco /dev/sda al dispositivo /dev/null.

     dd if=/dev/sda of=/dev/null bs=XXXX count=YYYY

Recordar que /dev/zero es un archivo especial que cuando se lee de él, provee caracteres NULL, es decir, su tiempo de lectura es prácticamente nulo, o dicho de otra forma, su acceso posee un ancho de banda que tiende a infinito. De esta forma al aplicar el primer comando, el único tiempo de cómputo se invertirá en la escritura de los datos.

El otro dispositivo especial utilizado es /dev/null, que tiene la peculiaridad de descartar toda la información volcada en él de forma instantánea (latencia prácticamente igual a cero). De esta forma al aplicar el segundo comando, el único tiempo de cómputo se invertirá en la lectura de los datos.

Para las pruebas de benchmark para el disco duro, emplearemos dos valores para el bloque de datos a copiar (bs), 8 KB y 1 MB, repitiéndose esta transferencia (count) 16384 y 128 veces respectivamente, para un flujo total de datos de 128 MB.

2 comments:

  1. Hay otra herramienta GNU muy comun a parte del dd usada para benchmarking: es el comando time. Te dice el tiempo de ejecucion en user-space y en kernel-space del binario pasado como argumento. Combinando el uso de esta herramienta con alguna carga sintética como Dhrystone o Whetstone, puedes comparar el rendimiento de dos sistemas informáticos.

    Aunque mucho ojo con el benchmarking porque los resultados nunca son 100% fiables, ya que el scheduler del kernel puede gastarte malas pasadas...

    Por último, la bíblia sobre temas de benchmarking: R. Jain, "The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling," Wiley- Interscience, New York, NY, April 1991, ISBN:0471503361

    ReplyDelete
  2. Cada vez que ejecutas un test, suele variar ligeramente el resultado. Lo apropiado es realizar la prueba varias veces y obtener una media.

    Para los benchmarks de memoria o disco, es interesante probar con distintos tamaños de datos, así como jugar con su disposición (lineal o no lineal).

    En Linux hecho en falta alguna herramienta gráfica completa que aglutine todas estas posibles pruebas. Para Windows por ejemplo se tiene a Everest.

    ReplyDelete