Skip to main content

Usando ioping en Ubuntu Server 12.04 LTS

En un servidor web dedicado o en un servidor privado virtual el rendimiento de entrada / salida (input / output, io), principalmente el de acceso al disco duro es muy relevante. En la generación de una página web dinámica, se hacen multitud de accesos al disco duro. Se leen los diferentes archivos con el código que forman la aplicación, los archivos de configuración del servidor y del interprete, se rebusca entre los archivos de las bases de datos, los diferentes elementos estáticos de la web como pueden ser las imágenes, y otros elementos más. Como se ve multitud de accesos al sistema de archivos se suceden para construir lo que en un instante se muestra en el navegador.

Por eso, poder medir para comparar el rendimiento de nuestro servidor en lectura y escritura es definitivamente muy importante. Para este propósito existe una aplicación, que en Ubuntu Server 12.04 LTS esta disponible en sus repositorios, llamada ioping.

Para instalar ioping en nuestro servidor simplemente debemos ejecutar en un terminal la siguiente orden:

sudo aptitude install ioping

Esto dejará ioping instalado y listo para uso en nuestro sistema.

Modo de empleo

Podemos indicarle que ponga a prueba el sistema de ficheros local con una cuenta de 10 con el siguiente comando. Al finalizar nos dará un resumen de las pruebas. El comando es:

ioping . -c 10

Mostrará algo semenjante a:

4096 bytes from . (ext3 /dev/xvda1): request=1 time=26.5 ms
4096 bytes from . (ext3 /dev/xvda1): request=2 time=14.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=3 time=0.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=4 time=33.2 ms
4096 bytes from . (ext3 /dev/xvda1): request=5 time=21.9 ms
4096 bytes from . (ext3 /dev/xvda1): request=6 time=12.5 ms
4096 bytes from . (ext3 /dev/xvda1): request=7 time=15.8 ms
4096 bytes from . (ext3 /dev/xvda1): request=8 time=20.0 ms
4096 bytes from . (ext3 /dev/xvda1): request=9 time=20.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=10 time=17.3 ms

--- . (ext3 /dev/xvda1) ioping statistics ---
10 requests completed in 9121.8 ms, 84 iops, 0.3 mb/s
min/avg/max/mdev = 0.3/11.9/39.9/13.3 ms

Un rendimiento que como se ve ha de considerarse pobre para en sistema de ficheros en producción.
El mismo sistema de ficheros probado de otra forma:

ioping . -R
--- . (ext3 /dev/xvda1) ioping statistics ---
962 requests completed in 3005.4 ms, 334 iops, 1.3 mb/s
min/avg/max/mdev = 0.2/3.0/73.5/6.3 ms

Más información

En la página del manual se muestran todas la opciones disponibles en ioping y una explicacion detallada de ellas. Además podemos acceder al código fuente en Google Code.

Cómo medir el rendimiento de un servidor Apache con ab

Si queremos poner a prueba un servidor web disponemos de la herramienta ab (Apache Benchmarking tool) que nos permite lanzar una simulación de carga. Esta herramienta permite simular la solicitud simultanea de múltiples usuarios contra el servidor. Ciertamente una prueba sintética no es como una situación real, pero nos ayuda a conocer las prestaciones de nuestro servidor.

Instalación

La utilidad ab se encuentra en el paquete apache2-utils. Podemos instalarlo en cualquier equipo linux que tenga acceso a nuestro servidor. No requiere por tanto de la instalación de todo el servicio Apache. Para instalarlo en sistemas tipo Ubuntu usaremos el siguiente comando:

sudo apt-get install apache2-utils

Tras unos segundos la aplicación se instalará y quedará lista para su uso.

Utilización básica

El modo de utilización básico de la herramienta ab tan solo requiere que le indiquemos la url destino a revisar. El numero de conexiones y cuantas de ellas se realizaran simultáneamente. Con el parámetro -n indicamos las conexiones, con el parámetro -c la concurrencia y posteriormente indicamos la url. Vamos el ejemplo:

ab -n 100 -c 10 http://192.168.1.129/

En 192.168.1.129 tengo una servidor LAMP sobre Ubuntu Server 10.04 ejecutándose en una máquina virtual. Con -n 100 le pedimos 100 conexiones y con -c 10 una concurrencia de 10.

Interpretación de los resultados

Hay que tener claro que lo que estamos poniendo a prueba es el documento o aplicación alojada en la url que le indicamos. Si en la url tan solo hay con pequeño index.html describiendo el típico ¡Hola Mundo!, no es para nada comparable con un CMS como WordPress que ejecuta un denso código php y hace varias llamadas a la base de datos Mysql. Además, la prueba es sobre la entrega del documento html y no sobre la multitud de otros elementos que se cargarían posteriormente para generar la presentación en un navegador, como podrian ser css, javascript, imágenes, etc.

Aclarado esto vemos los resultados del comando usado anteriormente.

Document Path: /
Document Length: 36 bytes

Concurrency Level: 10
Time taken for tests: 0.602 seconds
Complete requests: 100
Failed requests: 54
 (Connect: 0, Receive: 0, Length: 54, Exceptions: 0)
Write errors: 0
Total transferred: 24641 bytes
HTML transferred: 3541 bytes
Requests per second: 166.05 [#/sec] (mean)
Time per request: 60.224 [ms] (mean)
Time per request: 6.022 [ms] (mean, across all concurrent requests)
Transfer rate: 39.96 [Kbytes/sec] received

Connection Times (ms)
 min mean[+/-sd] median max
Connect: 0 1 0.5 1 2
Processing: 6 58 33.5 55 157
Waiting: 6 46 29.5 37 157
Total: 7 59 33.6 56 159

En los resultados podemos ver datos interesantes como el tiempo que emplea en realizarse el test o la cantidad de datos que se transmiten. Destacable me parecen los datos de la tabla Connection Time, donde podemos ver el tiempo empleado en conectar con el servidor contra el tiempo empleado para generar el documento.

Conclusiones

Esta es una pequeña aproximación al comando ab. En la página del manual de ab encontramos una descripción de las decenas de opciones disponibles. 

Comprobar el rendimiento (Benchmark) de un sistema en Linux

Habrá ocasiones en las que queramos comprobar el rendimiento de un PC o de una máquina virtual. En los repositorios podemos encontrar una poderosa aplicación que nos permite precisamente hacer esto. Su nombre es sysbench y podemos instalarla desde consola en sistemas debian – ubuntu linux con la siguiente orden:

sudo apt-get install sysbench

Test de CPU

Para comprobar el rendimiento de la CPU basta con el siguiente comando:

sysbench --test=cpu --cpu-max-prime=20000 run

En este comando le indicamos que calcule 20000 números primos. Podemos indicarle un número mayor o menor para hacer más o menos precisa la prueba. El resultado del test nos muestra el tiempo que emplea en calcularlos.

Test de ficheros

En este test se comprueba el rendimiento de nuestro sistema de ficheros. Este test depende de 3 etapas. La primera preparamos los ficheros con los que haremos el test. Después haremos el test propiamente dicho. Y finalmente borraremos los ficheros de la prueba.

Creamos los ficheros con:

sysbench --test=fileio --file-total-size=100G prepare

Ejecutamos el test:

sysbench --test=fileio --file-total-size=100G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run

Y finalmente borramos los ficheros:

sysbench --test=fileio --file-total-size=100G cleanup

En esta prueba el valor relevante es la velocidad de acceso indicado en KB/sec. Señalar que se usa un valor alto de 100Gb del disco para evitar el uso de la cache del sistema. Pero podemos usar otros valores que consideremos oportunos. El tiempo de ejecución de la prueba sería de 300 segundos aunque podemos cambiarlo por lo que consideremos.

Test de BB.DD.

Esta prueba me parece muy valiosa ya que pone a prueba la base de datos MySQL. Al igual que en la prueba del sistema de ficheros aquí requerimos de tres pasos. Primero la creación de la base de datos. Luego la prueba propiamente dicha. Y finalmente el borrado de la base de datos usada. Aquí deberemos aportar los datos de acceso a la base de datos, como usuario (en el ejemplo root) y su contraseña.

Creamos la bb.dd.:

sysbench --test=oltp --oltp-table-size=1000 --mysql-db=test --mysql-user=root --mysql-password=contrasena prepare

Después nos disponemos a hacer la prueba con el comando:

sysbench --test=oltp --oltp-table-size=1000 --mysql-db=test --mysql-user=root --mysql-password=contrasena --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run

Y borramos la base de datos con:

sysbench --test=oltp --mysql-db=test --mysql-user=root --mysql-password=contrasena cleanup

En esta prueba el valor relevante es el número de transacciones totales y cuantas realiza el servidor en un segundo.

Conclusiones

Con la aplicación podemos valorar el rendimiento de nuestro sistema o mejor, el de un servidor remoto, sea físico o virtualizado. Esta herramienta permite también probar otros componentes del sistema, pero estos, la cpu, disco y base de datos, creo son los más interesantes para un servidor de aplicaciones web.

Debemos recordar que si el sistema que pretendemos poner a prueba esta en producción, con la carga de otras funciones los resultados no serán nada concluyentes.

Disponemos de la documentación accesible en el manual del sistema mediante el cual podemos conocer la totalidad de opciones disponibles en la herramienta.

man sysbench

Los comandos mostrados han sido probados en un pequeño servidor virtual con Ubuntu Server 12.04.