LinuxParty

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

No sé si os ha pasado alguna vez que cuando nos dan un nuevo servidor para poner en producción la aplicación X resulta que siempre os toca el técnico tacaño en el departamento de aprovisionamiento y os ofrece un entorno de risa.

Lo más habitual (por desgracia) es que cuando nos faciliten un servidor virtual éste esté bastante limitado en cuanto a I/O y en concreto velocidad de disco. En la mayoría de las veces nos podría igual, pero en entornos serios esto se vuelve un gran problema y conviene determinar desde primer momento qué velocidades de disco (lectura y escritura) tiene nuestro entorno.

Voy a comentar el uso de tres herramientas para determinar el rendimiento de los discos duros. Existen muchas otras maneras de determinarlo, pero personalmente considero que con emplear estas tres herramientas tenemos más que suficiente para usarlo como referencia y quejarnos para aumento de recursos (aunque luego nos ignoren…)

Comando fio

(La prueba que podrás hacer en servidores virtuales)

"fio" es una herramienta de E/S que genera un número de hilos o procesos haciendo un tipo particular de acción de E/S como se especifica por el usuario. Fio toma número de parámetros globales, cada uno heredado por el hilo anterior, a menos que dichos parámetros sean anulandos de esa configuración se les dará por defecto.
El uso típico de fio es escribir un archivo de trabajo que coincida con el de carga io se quiere simular.

Creamos un archivo por ejemplo: test.fio

Que contendrá:

[random-read]
rw=randread
# Las pruebas pueden ser 128, 256 o 512 m
size=256m
# Haremos una prueba de rendimiento de la partición montada
# que queremos.
directory=/var/www/html

Ejecutaremos la prueba:

fio test.fio

Y la salida será:

 random-read: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.0.13 Starting 1 process Jobs: 1 (f=1): 
 [r] [96.8% done] [2576K/0K/0K /s] [644 /0 /0 iops] [eta 00m:04s] random-read: (groupid=0, jobs=1): err= 0: pid=17076: Sat Sep 
 19 15:59:22 2015
  read : io=131072KB, bw=1093.9KB/s, iops=273 , runt=119829msec
    clat (usec): min=83 , max=1878.6K, avg=3651.50, stdev=15990.11
     lat (usec): min=83 , max=1878.6K, avg=3651.78, stdev=15990.11
    clat percentiles (usec):
     |  1.00th=[ 183], 5.00th=[ 205], 10.00th=[ 233], 20.00th=[ 972], 30.00th=[ 1704], 40.00th=[ 2352], 50.00th=[ 2960], 
     | 60.00th=[ 3536], 70.00th=[ 4128], 80.00th=[ 4704], 90.00th=[ 6304], 95.00th=[ 8160], 99.00th=[14528], 99.50th=[23168], 
     | 99.90th=[59136], 99.95th=[333824], 99.99th=[651264]
    bw (KB/s) : min= 71, max= 4509, per=100.00%, avg=1119.92, stdev=468.90
    lat (usec) : 100=0.02%, 250=13.21%, 500=4.75%, 750=0.84%, 1000=1.43%
    lat (msec) : 2=14.33%, 4=33.18%, 10=29.89%, 20=1.74%, 50=0.50%
    lat (msec) : 100=0.04%, 250=0.02%, 500=0.03%, 750=0.01%, 1000=0.01%
    lat (msec) : 2000=0.01%
  cpu : usr=0.24%, sys=1.07%, ctx=34490, majf=1, minf=24
  IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued : total=r=32768/w=0/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs):
   READ: io=131072KB, aggrb=1093KB/s, minb=1093KB/s, maxb=1093KB/s, mint=119829msec, maxt=119829msec

Lo que está marcado en negrita, es de lo que nos tendremos que fijar.

También tenemos que tener en cuenta, que un servidor virtual nunca dará el mismo rendimiento que nuestro ordenador o un servidor físico.

Puedes borrar el fichero creado por la prueba, descrito en test.fio, y volver a ejecutar la prueba (para este caso en /var/www/html/), hazlo siempre cuando tenga menos tráfico para que te muestre una estadística más real.


NO TODAS LAS PRUEBAS DESCRITAS ABAJO PUEDEN HACERSE EN ALGUNOS SERVIDORES VIRTUALES.


Comando iostat

iostat es una de esas utilidades de GNU/Linux que todo administrador debería de conocer y comprender perfectamente. iostat permite monitorizar los parámetros de entrada/salida de los diferentes dispositivos del sistema, para observar los diferentes ratios de transferencia.
Una de las típicas salidas de iostat es la siguiente:
root@shell> iostat
Linux 2.6.32-5-686 (desktop)   03/31/13   _i686_ (2 CPU)

avg-cpu:  %user       %nice     %system   %iowait    %steal  %idle
           4,25        0,00        1,01      0,51      0,00  94,22

Device:     tps  Blk_read/s  Blk_wrtn/s  Blk_read  Blk_wrtn
sda        7,32       66,51      112,61    835334   1414278
Aunque aquí nos muestra también el consumo de CPU del sistema, la parte más importante está a continuación y es la que se refiere a los discos. De hecho, si llamamos a iostat para que nos saque información continuada de los discos, vemos que se suprime la información relativa a la carga de CPU:
root@shell> iostat -d 2 3
Linux 2.6.32-5-686 (desktop)   03/31/13   _i686_ (2 CPU)

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda       11,79      210,97       95,91   1171053    532364

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda        2,79       80,45        0,00       144         0

Device:     tps   kB_read/s   kB_wrtn/s   kB_read   kB_wrtn
sda       24,16        0,00      191,01         0       340
Pero el problema de iostat no está en conseguir hacer funcionar el comando, sino en saber interpretar la salida. Saber qué significa tps, kB_wrtn, etc. Esto es muy sencillo,
  • tps
    Es la transferencia a disco por segundo.
  • Bls_read/s (kB_read/s, MB_read/s)
    Es la cantidad de bloques leídos por segundo.
  • Bls_wrtn/s (kB_wrtn/s, MB_wrtn/s)
    Representa la cantidad de bloques escritos por segundo.
  • Blk_read (kB_read, MB_read)
    Bloques totales leídos.
  • Blk_wrtn (kB_wrtn, MB_wrtn)
    Bloques totales escritos.

Comando ioping

El comando ioping permite obtener el rendimiento del acceso a disco de un equipo al igual que si estuviésemos ejecutando un ping a la red.

En sistemas operativos Ubuntu se encuentra en repositorios y en caso de Debian de momento sólo en la rama testing, sin embargo es una herramienta bastante simple y si no podemos obtenerlo por repositorios la compilación del programa es tan simple que ni siquiera necesita explicaciones adicionales, y como una imagen vale más que mil palabras os muestro un ejemplo de uso:

root@shell> ioping -c 10 -s 1M -D /tmp
1048576 bytes from /tmp (ext4 /dev/sda1): request=1 time=34.0 ms
1048576 bytes from /tmp (ext4 /dev/sda1): request=2 time=23.0 ms
1048576 bytes from /tmp (ext4 /dev/sda1): request=3 time=23.2 ms
...
--- /tmp (ext4 /dev/sda1) ioping statistics ---
10 requests completed in 9268.4 ms, 37 iops, 37.4 mb/s
min/avg/max/mdev = 23.0/26.7/34.0/4.4 ms

Por tanto, ioping permite obtener la latencia de entrada/salida de disco pudiéndonos ser útil para saber la potencia de lectura o escrita que el disco ofrece, empleando o no la caché. Las principales opciones que presenta son:

  • -c count
    Se ejecuta count veces y luego termina ofreciendo una estadística de resultados.
  • -s size
    Establece el tamaño de la lectura/escritura que realizará.
  • -L
    Realiza las operaciones de forma secuencial y no aleatorias.
  • -C
    Comprueba la latencia del disco empleando la caché.
  • -D
    Comprueba la latencia escribiendo en disco directamente.

Para más información, consultar la página de su manual.
Página oficial de ioping: code.google.com/ioping

Comando hdparm

El comando hdparm (que se encuentra ya instalado en la mayoría de las distribuciones Linux) es muy versátil, nos permite obtener información general acerca de nuestro disco duro y también permite realizar ajustes de configuración.

Sólo voy a hacer referencia a una combinación de parámetros que se puede usar para sacar estadísticas del rendimiento de nuestro disco duro, los que queráis saber todo lo que puede ofrecer este comando os sugiero que echéis un vistazo al manual de uso (man hdparm).

Para realizar la prueba de rendimiento tenemos que escribir lo siguiente:

root@shell> hdparm -tT /dev/sda
/dev/sda: 
 Timing cached reads: 7864 MB in 2.00 seconds = 3935.41 MB/sec 
 Timing buffered disk reads: 204 MB in 3.00 seconds = 67.98 MB/sec

Bien, espero que vuestras pruebas de rendimiento den buenos resultados y estos comandos os sean de utilidad.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política