domingo, 22 de julio de 2012

Centos 5.x: Herramientas de desempeño de disco y elevadores

Ahora vamos a ver como esta eso de los famosos elevadores, cuando esta armando maquinas virtuales algo muy importante es que tu sistema de archivos sea lo mas rapido posible para poder soportar la carga que las  vm(Virtual Machine=Maquinas Virtuales) le van a dar.

Aqui no voy a meterme con las vm, ya que estamos hablando solo del host donde se van a montar la vm, lo que voy a tocar son correrle ciertas utlilerias a mi disco y usando los 4 elevadores que son los que controlan los accesos a nuestros discos duros para saber si estamos con el elevador correcto.

Va a ver mucha info hacerca de los elevadores, pero vamos viendo como se comportan cada uno, tampoco voy a cambiar sus parametros, asi como los carga les vamos a correr las siguientes herramientas:

  • bonnie
  • bonnie++
  • dd
  • hdparm

Para empezar y ademas vamos a ver si los parametros extras que podemos agregarle a nuestras particiones cuando las montamos afecta el desempeno como:

  • noatime
  • nodiratime
  • data=writeback (peligrosa)

Estas tareas son muy tediosas, asi que si lo repiten haganlo cuando tengan tiempo.

Otra cosa, como en mi caso voy a trabajar con Xen voy a ver si si host tiene mejor desempeno con 2 cores, que con 1, xen dice que el host requiere solo 1 core, pero vamos a ver que dicen las pruebas.

Nuestras particiones son estas:


mount
/dev/mapper/VolGroup00-ROOT on / type ext3 (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/mapper/VolGroup00-VAR on /var type ext3 (rw)
/dev/mapper/VolGroup00-TMP on /tmp type ext3 (rw)
/dev/mapper/VolGroup00-OPT on /opt type ext3 (rw)
/dev/mapper/VolGroup00-USR on /usr type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)


Como podran ver es la instalacion comun, utilizando el elevador por defecto: cfq.


Entonces vamos a empezar con esta configuracion:


Core = 1
Memoria: 1024MB=1GB
DDR3 1333 No ECC.

Hemos deshablitado servicios que no necesito, solo los necesarios para que Xen funcione.

Vamos a atacar la particion donde tengo mis vm's /opt, vamos a empezar.

NOTA: Que su equipo no este en produccion y sobre todo que no esta ejecutando ningun servicio como apache, mysql, etc.

==Caso A==

Bonnie: Bonnie por default creo un archivo de 100MB lo cual no es conveniente ya que dice el manual que no estamos en realidad atacando el disco si no la memoria, por ello vamos a ejecutar el comando asi:

bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun

-d = directorio temporal donde crear el archivo
-s = Tamaño del archivo, regla doble de memoria.
-m= Nombre de la maquina.

Vamos a ejecutar la tarea 3 veces continuas para sacar un promedio.

Ejecucion
(1)

Bonnie 1.5: File '/opt/bonnie//Bonnie.3091', size: 2147483648, volumes: 1
Writing with putc()...
[root@localhost opt]# bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /                                                                                                                    opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun                                                                                                                     


Bonnie 1.5: File '/opt/bonnie/Bonnie.3093', size: 2147483648, volumes: 1
Writing with putc()...         done:  63964 kiB/s  85.9 %CPU
Rewriting...                   done:  35605 kiB/s   2.2 %CPU
Writing intelligently...       done:  78111 kiB/s  23.5 %CPU
Reading with getc()...         done:  53584 kiB/s  60.3 %CPU
Reading intelligently...       done:  81520 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.161ms, eff 3.964ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63964 85.9 78111 23.5 35605  2.2 53584 60.3 81520  0.4  240.4  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1


(2)



Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1
Writing with putc()...         done:  65973 kiB/s  88.3 %CPU
Rewriting...                   done:  34359 kiB/s   2.2 %CPU
Writing intelligently...       done:  76424 kiB/s  24.4 %CPU
Reading with getc()...         done:  39146 kiB/s  71.7 %CPU
Reading intelligently...       done:  81498 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.095ms, eff 3.898ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 65973 88.3 76424 24.4 34359  2.2 39146 71.7 81498  0.5  244.2  0.0

(3)

Bonnie 1.5: File '/opt/bonnie/Bonnie.3123', size: 2147483648, volumes: 1
Writing with putc()...         done:  66193 kiB/s  88.4 %CPU
Rewriting...                   done:  36434 kiB/s   2.2 %CPU
Writing intelligently...       done:  77621 kiB/s  23.3 %CPU
Reading with getc()...         done:  57385 kiB/s  63.7 %CPU
Reading intelligently...       done:  75734 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.239ms, eff 4.027ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 66193 88.4 77621 23.3 36434  2.2 57385 63.7 75734  0.4  235.9  0.0

Promedios
Writing:(63964+65973+66193)/3=65376=66MB/s
Writing Intelligently:(78111+76424+77621)/3=77385=77MB/s
Rewriting:(35605+34359+36434)/3=35466=36MB/s
Reading with getc:(53584+39146+57385)/3=50038=50MB/s
Reading Intelligently:(81520+81498+75734)3=79584=80MB/s

Bonnie++: Es una version mejorada de bonnie, tiene mas parametros, vamos a usar estos:

bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon1.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon2.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon3.html

NOTA: Vamos a mandar la salida a HTML.

-d = igual que bonnie
-s = Tamaño del archivo a crear
-n = bonnie -m
-r  = ram que tenemos, se supone que el detecta, pero mejor se lo digo.
-x =  cuantas pasadas van a ejecutar
-u = usuario que lo va a ejecutar.

Resultados
Figura 1: Corrida 1.
Figuar 2: Corrida 2.
Figura 3: Corrida 3.
Ya tenemos los datos de buscabamos, viendolos podran notar que son algo parecidos a los de bonnie. 

dd: Herramienta basica, genera archivos en forma secuencial pero tambien nos da informacion de como es el desempeño de nuestro disco duro.

Parametros:
dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096

Vamos a crear 1 archivo de 4GB de nombre Test.img dentro de la particion /opt, asi de simple.

Ejecucion
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 52.9619 seconds, 81.1 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.7946 seconds, 88.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.0801 seconds, 91.2 MB/s

hdparm: Otra herramiento basica, con esta podemos probar el cache de nuestro disco duro, y deben correr tambien la tarea mas de una vez, parametros:

-t=lecturas del disco.
-T=lectura de cache.

Ejecucion
/dev/sda:
 Timing cached reads:   11752 MB in  1.99 seconds = 5892.22 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.24 MB/sec

/dev/sda:
 Timing cached reads:   11892 MB in  1.99 seconds = 5962.68 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.23 MB/sec

/dev/sda:
 Timing cached reads:   11828 MB in  1.99 seconds = 5930.86 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.09 MB/sec

Notaran que cuando ejecuta la lecturas del cache, su led de disco no prende, es por que esta trabajando directamente el cache del disco duro.

Ya tenemos los primeros numeros, ahora viene la misma corrida pero vamos a empezar a modificar nuestra configuracion, vamos empezando por agregar los siguientes parametros a nuestros montajes:

/dev/VolGroup00/ROOT    /               ext3    defaults,noatime        1 1
/dev/VolGroup00/VAR     /var            ext3    defaults,noatime     1 2
/dev/VolGroup00/TMP     /tmp            ext3    defaults        1 2
/dev/VolGroup00/OPT     /opt            ext3    defaults,noatime     1 2
/dev/VolGroup00/USR     /usr            ext3    defaults,noatime        1 2

Reiniciamos y repetimos los mismos comandos...

Solo estamos agregando el parametro "noatime", que segun el libro si no lo especificamos seria "atime", que dice que por cada acceso a los inodos actualiza el tiempo de acceso, y segun los expertos mas vale que no lo haga y mas en sistemas que tienen constante acceso a el disco, yo hasta la fecha no he encontrado algun software que haga uso de esta informarcion por ello siempre la deshabilito con "noatime".

Empezamos de nuevo:

===Caso B===
Bonnie:

Bonnie 1.5: File '/opt/bonnie/Bonnie.3063', size: 2147483648, volumes: 1
Writing with putc()...         done:  71408 kiB/s  93.7 %CPU
Rewriting...                   done:  38015 kiB/s   1.9 %CPU
Writing intelligently...       done:  90543 kiB/s  25.0 %CPU
Reading with getc()...         done:  64227 kiB/s  71.3 %CPU
Reading intelligently...       done:  90323 kiB/s   0.3 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.007ms, eff 3.830ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 71408 93.7 90543 25.0 38015  1.9 64227 71.3 90323  0.3  249.6  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3078', size: 2147483648, volumes: 1
Writing with putc()...         done:  63999 kiB/s  88.4 %CPU
Rewriting...                   done:  38327 kiB/s   2.3 %CPU
Writing intelligently...       done:  90461 kiB/s  27.3 %CPU
Reading with getc()...         done:  60798 kiB/s  67.7 %CPU
Reading intelligently...       done:  88156 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.922ms, eff 3.740ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63999 88.4 90461 27.3 38327  2.3 60798 67.7 88156  0.5  255.0  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3092', size: 2147483648, volumes: 1
Writing with putc()...         done:  67461 kiB/s  90.3 %CPU
Rewriting...                   done:  38401 kiB/s   1.9 %CPU
Writing intelligently...       done:  87783 kiB/s  26.4 %CPU
Reading with getc()...         done:  67832 kiB/s  74.8 %CPU
Reading intelligently...       done:  82805 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.751ms, eff 3.557ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 67461 90.3 87783 26.4 38401  1.9 67832 74.8 82805  0.5  266.6  0.0


Comparen los valos con el caso A, hemos ganado desempeño el algunos puntos se incremento nuestro desempeño con este cambio. Ahora vamos a ver la siguiente prueba.

Bonnie++: Resultados.

Figura 4: Corrida 1.
Figura 5: Corrida 2.
Figura 6: Corrida 3.
dd: Resultados.


4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 51.8139 seconds, 82.9 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.2685 seconds, 89.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.1664 seconds, 91.1 MB/s

hdparm: Lo muestro pero esto ya es mas cuestion del disco duro.


/dev/sda:
 Timing cached reads:   11772 MB in  1.99 seconds = 5902.72 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.22 MB/sec


/dev/sda:
 Timing cached reads:   11976 MB in  1.99 seconds = 6005.53 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.33 MB/sec


/dev/sda:
 Timing cached reads:   11824 MB in  1.99 seconds = 5928.42 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.05 MB/sec


Ya pueden hacer comparaciones.

Ahora viene la opcion de agregarle el 2do core...


No hay comentarios: