lunes, 22 de noviembre de 2010

Centos 5x: Herramientas de desempeño de disco duro

Tenemos 2 tipos de raid comunmente usados, Raid-5 y Raid-10. Ahora uno puede comprar una tarjeta controladora que soporta estos y muchos mas, el unico detalle es que muchas no tiene drivers para Linux/Unix y sus herramientas de monitoreo requieren modulo grafico para poder usarlas.

Bien desde que conoci a md en Linux o gmirror en FreeBSD he optado por llevar a cabo mis arreglos via software con estas 2 herramientas.

Ahora que herramientas tenemos a la mano Open Source que podamos usar para ver el desempeño de nuestros discos duros o arreglos?

Aqui muestro algunas de ellas y las herramientas que podemos usar para capturar la informacion para posteriormente analizarla y tomar una decision sobre cual de los arreglos nos proporciona el mejor desempeño.

Vamos empezando por las internas, las que siempre vamos a encontrar en Linux, especificamente hablando de Centos.

Antes de continuar vamos a ver que herramientas vamos a usar para monitorear, bueno yo estoy usando a dstat, ya que me permite capturar toda su informacion en un archivo csv para posteriormente analizar.

Estos son los parametros que uso:

dstat -c -C 0,1,total -d -i -g -m --noheaders --output=nombredearchivo.csv

Ahora en mi caso me interesa saber el desempeño de mi arreglo en especial donde van a estar operando mis maquinas virtuales ya que estoy trabajando sobre Xen y la particion se llama /vm -> /dev/md2, es donde voy a enfocarme.

Antes de arrancar la ejecucion de cada aplicacion, estoy ejecutando dstat con el nombre de cada programa que ejecuto como salida, para el final, cambiar los parametros de mi arreglo y volver a repetir los pasos, asi podre comparar manzanas con manzanas y saber cual me ofrece mejor desempeño.

Vamos procesos los voy a repetir porque si solo lo hacemos una vez tendemos a estar solo comparando el buffer del disco duro:
  • dd
  • hdparm
dd

Esta herramienta sencilla es lineal no hay nada de manera aleatoria, asi que vamos a ver como a vamos a ejecutar:

time dd if=/dev/zero of=/vm/bench/out.img bs=8k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=8k count=2048 && echo "borrando" time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=16k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=16k count=2048 && echo "borrando" time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=32k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=32k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=256k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=256k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=512k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=512k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=1024k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=1024k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=2048k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=2048k count=2048 && echo "borrando" && time rm -rf out.img

hdparm

time hdparm -Tt /dev/md2 && time hdparm -Tt /dev/md2 && time hdparm -Tt /dev/md2

Las que siguen con aplicaciones que no se encuentran en el sistema base asi que necesitamos instalarlas.

Bonnie
Con esta aplicacion hemos hecho varias corrida con distintos parametros, como sigue:

time bonnie -s 100 -m mbx-xenserver &&
time bonnie -s 100 -m mbx-xenserver -y &&
time bonnie -s 1024 -m mbx-xenserver &&
time bonnie -s 1024 -m mbx-xenserver -y &&
time bonnie -s 2048 -m mbx-xenserver &&
time bonnie -s 2048 -m mbx-xenserver -y

Bonnie++
Una version de bonnie mejorada.

time bonnie++ -d ./ -u root && time bonnie++ -d ./ -u root -s 32 -n 128 -r 16 && time bonnie++ -d ./ -u root -s 256 -n 16 -r 128 && time bonnie++ -d ./ -u root -s 1024 -n 8 -r 512 -b

dbench
Emula un samba.

time dbench -c /usr/share/dbench/client.txt 40

Fio

Aqui tenemos que crear un archivo y correr en una ejecucion varias tareas distintas, muy practico.

bench.fio:

[global]
directory=/opt/bench/fio

[test1]
rw=rw
size=128m
nrfiles=16
sync=0
bsrange=4k-8k,16k-32k
zero_buffers
file_service_type=random
ioengine=sync
iomem=malloc

[test2]
rw=write
size=512m
nrfiles=2
sync=0
bsrange=16k-32k,64k-128k
file_service_type=roundrobin
ioengine=psync
iomem=shm

[test3]
rw=randread
size=8m
nrfiles=256
bsrange=4k-8k,32k-64k
sync=1
zero_buffers
file_service_type=random
ioengine=libaio

[test6]
rw=randrw
size=1024m
nrfiles=2
bsrange=8k-32k,64k-128k
refill_buffers
file_service_type=roundrobin

Para entender lean el man page, para ejecutarlo:

time fio bench.fio

tiobench

Un sistema parecido a fio.

time tiobench -size 512 --size 1024 --size 2048 --numruns 2 --block 4096 --block 8192 --threads 2

Como mencione anteriormente, estoy usando dstat para capturar informacion de como esta trabajando el equipo para posteriormente analizarla.

Por que estoy siempre incluyendo el comando "time"? Aparte de ver como se comporta tanto el CPU como el arreglo, me interesa saber que tan rapido se estan llevando a cabo cada tarea, cuando decida por cual arreglo irme, voy a tomar en cuenta estos 3 parametros:
  • Mas I/O del disco
  • Menor uso de CPU
  • Menor tiempo de ejecucion
Por ello siempre la incluyo, la salida del "dstat" es larga aqui no puedo ponerla, pero ustedes veran la salida.