vscsistats

VCAP – Sección 1 – Analizar comportamientos de I/O para determinar los requerimientos de almacenamiento

Que tal gente, continuando con los temas de VCAP nos toca hablar sobre el como analizar los comportamientos o workloads a nivel del almacenamiento, para esto estaremos primero entendiendo ciertos conceptos y factores que componen estos workloads.

Es importante conocer el comportamiento que tienen nuestras aplicaciones para poder hacer un correcto diseño de nuestra infraestructura, en este caso nos estamos enfocando al almacenamiento parte fundamental del performance que tendrán nuestras aplicaciones virtualizadas.

¿Que elementos determinan el performance de nuestro almacenamiento?

  • IOPS: I/O per second, básicamente la cantidad de lecturas y escrituras que un disco puede realizar en un segundo, esto básicamente nos dirá la capacidad del disco o del tipo de disco que estaremos utilizando para responder a nuestras operaciones. Existen valores aceptados y utilizados como base para cada tipo de disco:

  • Latencia: básicamente es la cantidad de tiempo que nuestro disco o almacenamiento tarda en responder a nuestras solicitudes en disco, este valor se mide en ms,  un valor aceptable estaría entre 5 ms a 10 ms dependiendo los requerimientos de las aplicaciones virtualizadas.
  • Ancho de banda o capacidad del arreglo/disco/interfaz (Mbps): este ancho de banda depende de que interfaz estaremos utilizando, existen varias interfaces actualmente, IDE, SATA,SCSI,SAS y FC.  Estas interfaces son vistas de distinta manera en el lado de un almacenamiento central (SAN, NAS), ya que ahí estaríamos hablando de 2 tipos de interfaces, back-end y front-end. En el caso de back-end es la interconexión entre los distintos controladores o storage processors de dicho almacenamiento aquí generalmente hablamos de interfaces SAS y FC. Finalmente en el caso de Front-end hace referencia a la interfaz que tiene contacto directamente con los servidores o clientes de este almacenamiento, aquí demos interfaces de FC y ethernet (ISCSI , NFS ,CIFS).

  • RAID: en un post anterior tocamos el tema de los niveles de RAID, aquí tenemos que tener en cuenta que el nivel de RAID implica cierta implicación al performance en cuanto a escritura se refiere , para ser más claro, debido a la paridad que se tenga dependiendo del nivel de RAID para poder hacer la escritura de un bloque tiene que también escribir los bloques de su paridad es por eso que debemos tener en consideración este punto en el momento de hacer el calculo de nuestro almacenamiento. Aquí les dejo el link a mi post anterior sobre los niveles de RAID:

http://hispavirt.com/2010/10/11/vcap-%e2%80%93-seccion-1-%e2%80%93raid-y-vms/

  • Cache: En los sistemas de almacenamiento central, incluso en los mismos discos que utilizamos día a día existe un factor clave para mejorar el performance, el cache, por cache entendemos escencialmente memoria RAM que actua como buffer almacenando las operaciones de I/O, existen 2 tipos de caches , volatiles y no volatiles estos se diferencian simplemente en si se pierde o no la información almacenada en el caso de perdida de energía. Generalmente el cache para operaciones de escritura es no volatil es decir no se pierde en el caso de perdida de energía al contrario del cache para lecturas. Al ser memoria RAM es mucho más veloz que cualquier sistema de disco con esto mejoramos significativamente el performance de nuestro almacenamiento debido a que las operaciones son almacenadas temporalmente en estos caches y después escritas a disco, con esto ganamos la capacidad de aceptar mas operaciones concurrentes y en el caso de lectura almacena las lecturas anteriores a disco y en casos de almacenamientos avanzados existen algoritmos que predicen que información será leída y se almacena en dicho cache para ser entregada mas rápido.
  • Queuing: con esta capacidad del almacenamiento se encolan las operaciones de I/O para poder ser procesadas después, esto puede ser a nivel del almacenamiento y directamente en las HBAs de nuestros servidores.
  • Coalescing: esta capacidad de algunos almacenamientos lo que realiza es ordenar las operaciones de I/O almacenadas en cache  en el caso que tengamos un comportamiento “random” con esto se busca reducir la cantidad de actividad en disco ya que los comportamientos de escritura serán uniformes.

¿Que tipos de comportamientos o workloads existen? ¿Que debo tener en cuenta?

Existen 2 principales tipos de comportamientos en cuanto a operaciones a disco se refiere, secuencial y random. En el caso de un comportamiento secuencial las operaciones de I/O se llevan a cabo de manera más rápida debido a que se necesita un menor numero operaciones de “seek” que básicamente lo que se realiza es un posicionamiento de la aguja del o los discos en el correcto sector donde reside la información. Al contrario en el caso de un comportamiento random o al azar las operaciones de I/O estarán tratando de acceder a distintos sectores del almacenamiento, aumentando así las operaciones de seek a este tiempo se le llama “seek latency”.

Una vez que sabemos que tipo de comportamiento tiene nuestra aplicación sea secuencial o random es importante tener en cuenta los siguientes elementos:

  • tamaño de las operaciones I/O (I/O request size):  el tamaño de la información leída o escrita a nuestro almacenamiento, entre más grande el tamaño de nuestra operación ej. 64k será más eficiente de procesar y decrece el uso de procesador. Existen distintos tamaños, podemos ver 2k, 4k, 8k, etc. En el caso que quisiéramos virtualizar servidores Windows podemos determinar el tamaño de nuestras operaciones utilizando perfmon y ejecutando el siguiente counter “Avg. Disk Bytes/Read”.
  • porcentaje de escritura y/o lectura: importante para determinar el nivel de RAID a utilizar, ej. en el caso de aplicaciones que requieran un alto nivel de escritura se benefician de un raid 10.

¿Como puedo obtener todos estos datos?

 


Revoluciones por minuto (RPM)

IOPS

SSD

6000

15 K

175

10 K

125

7200

75

5400

50

Paso-a-paso – vscsiStats

Que tal gente, hoy lunes después de una semana pasada algo ocupada  y de no haber podido postear nada decidí regresar con información que a mi parecer es muy interesante y les va servir mucho, este día les voy a hablar de una utilidad de VMware con la cual podemos monitorear directamente los adaptadores virtuales SCSI de nuestras vms, la información es recolectada al nivel del kernel de vmware, con esto tenemos la capacidad de ver el comportamiento de nuestros  VMDKs o RDMs sin importar que tipo de almacenamiento tengamos o mejor dicho el protocolo que manejamos(iSCSI, NFS, Fibra).

Para poder comenzar con el uso de esta herramienta tenemos que ir directamente a su directorio, esto porque no se encuentra directamente en el PATH, lo cual no nos permite invocarla desde cualquier ubicación .

Paso 1

Vamos al directorio :

/usr/lib/vmware/bin/

Paso 2

Ejecutamos la aplicación y pedimos que se nos enlisten las maquinas o procesos :

‘ ./vscsiStats  –l ’

Paso 3

Una vez enlistados los procesos, decidimos que proceso o vm es la que queremos monitorear,  el numero del proceso será identificado como  worldGroupID, en este caso el ID que monitorearemos será el 4292 , para ello ingresamos el comando :

‘./vscsiStats -s -w 4292 ’

“-s” nos indica que comienze el monitoreo, y  “-w” nos indica el proceso o vm a monitorear.

Paso  4

Una vez transcurrido el tiempo necesario o el tiempo que hayamos decidido para monitorear la vm exportamos la información directamente a un archivo CSV (comma delimited value) a nuestra carpeta temporal, para esto ingresamos el siguiente comando:

‘./vscsiStats -w 4292 -p all –c vscsi.csv > /tmp/vscsi.csv ’

en este caso “-p” nos indica el tipo de información que exportaremos (ioLength, seekDistance, outstandingIOs, latency, interarrival)

“-c” indica que esta información sera exportada en formato .csv.

Paso 5

Una vez exportado el archivo , cancelamos el monitoreo con el commando:

‘./vscsiStats –x’

Utilizamos una herramienta de scp para copiar el archivo de la ruta /tmp de nuestro servidor ESX , en mi caso WinSCP:

Graficar resultados de vscsiStats

Honestamente nunca me ha gustado estar leyendo números y el archivo CSV que generamos con vscsiStats es números y mas números,  navegando por internet me encontré con un muy buen macro de Excel para poder graficar estos datos y tener una manera mas “amigable” de leerlos, aquí les dejo el link a dicho macro:

http://www.gabesvirtualworld.com/wp-content/uploads/2010/02/vscsiStats-excel-macro.txt

Paso 1

Abrimos el archivo csv con Excel, y tecleamos  ‘Alt + F11’ , esto nos dará acceso a Visual Basic:

Paso 2

Copiamos el texto tal cual de el macro y tecleamos ‘F5´ esto nos generara una serie de worksheets con las graficas , estas serán nombradas basadas en el contenido de dichas graficas y del handleID de nuestro disco :

Aquí le dejo un ejemplo de las graficas generadas :

Usos de vscsiStats

1-. Identificar workloads o tipos de acceso a disco (secuencial o al azar).

2-. Tamaños de las operaciones de IO, ej.  4k 8k, etc

3-. Latencia de nuestro almacenamiento , recordemos que en el caso de vscsiStats el protocolo no importa, por lo cual podemos monitorear NFS cosa que con esxtop no es posible.