Hola,

Una vez pasadas estas fiestas tan entrañables volvemos a la carga con más contenido en el blog que esperamos sea de vuestro interés.

En esta ocasión y aprovechando un caso real, quería hacer hincapié en una premisa que puede llevarnos a errores de configuración o cuando menos a confusión.

Los entornos virtuales que administramos diariamente nos dan la posibilidad de asignar recursos a las máquinas virtuales con una facilidad antes nunca vista, a golpe de ratón hacemos y deshacemos a nuestro antojo.

Sin querer podemos caer en el dicho popular de «ande o no ande, burro grande», asignando recursos desmesurados a las máquinas virtuales del entorno, mermando recursos de los hosts físicos que tal vez en un futuro nos sean necesarios para desplegar nuevos servicios a usuarios.

Puede ser incluso peor el resultado y con mayor inmediatez si se trata de asignación de vCPU.

En el asistente de creación de una nueva máquina se nos pregunta por el número de sockets que queremos asignar a esta máquina. Ya desde la versión vSphere 5.0, el mismo asistente incorpora la opción de asignar cores virtuales a esos sockets asignados.

4a1.png


4 sockets / 1 core


2a2.png

2 sockets / 2 cores


La configuración que aquí escojamos va a tener repercusión en el comportamiento de la máquina virtual dentro del entorno. Lo veremos luego en una gráfica a modo de ejemplo.

Vamos a poder valorar el comportamiento adecuado o no de esa máquina virtual y la asignación de recursos establecidos mediante unas métricas llamadas Ready y Usage. Estas las podemos ver en la pestaña Performance.

Antes de continuar comentamos a qué hacen referencia estas métricas y el por qué de su importancia

Ready – The % of time a “world” is ready to run and awaiting the CPU Scheduler for approval. In vSphere a “world” is a process. The larger CPU Ready is, the more your virtual machines (and applications) aren’t doing what they are supposed to do.

Usage – VM – Amount of actively used virtual CPU, as a percentage of total available CPU.

Interpretando las definiciones anteriores, concretamos que el valor de Ready, hace referencia al tiempo que la máquina virtual tiene que esperar para realizar sus operaciones de CPU pero no puede al no haber recursos libres disponibles. Están ocupados por otros procesos de otras máquinas del entorno. El valor Usage hace referencia al uso real de CPU por parte de esa máquina virtual en un momento dado.

Se puede establecer una régla de oro donde un valor de Ready por debajo del 5% es normal, un valor  entre un 5% y un 10% significaría que debemos permanecer atentos a esa máquina virtual y a su comportamiento. Un valor sostenido superior al 10% durante largos períodos de tiempo nos avisa que pronto tendremos que tomar acciones.

Bien podrán ser quitando recursos a esta máquina si el Usage es bajo, moviendo máquinas de ese host a otro para liberar recursos físicos o incluso sopesando la compra de nuevo hardware más capaz.

En la siguiente gráfica se muestra el comportamiento a nivel de uso de CPU (%) de una máquina virtual a lo largo de un mes de uso y la variación del mismo en función de la configuración de las vCPU asignadas a esta.

month-graph.png

Ready (amarillo) vs Usage (azul)


Antes de hacer las valoraciones de la gráfica, mencionar que hay que tener muy en cuenta los recursos físicos disponibles en el host. No se comportará así una o varias máquinas virtuales si estas comparten un hardware moderno, con últimas generaciones de CPU (con o sin Hyperthreading) y memoria RAM de alta velocidad que si por contra, disponemos de unos equipos más modestos.

En cuanto a la gráfica

Tramo rojo:  Se aprecia claramente el momento en que peor rendimiento ofreció, correspondiendo a la configuración de 2 sockets con 2 cores cada uno. Hay un valor de Ready tremendamente alto, más incluso que el Usage. Esto daba una sensación de lentitud acusada por el usuario.

Tramo verde: Tras la modificación a 4 sockets con 1 core cada uno, el valor de Ready bajó drásticamente, manteniéndose el valor de Usage y mejorando el comportamiento de cara al servicio ofrecido al usuario final.

Tramo azul: Para tratar de reducir todavía más el valor de Ready y viendo que el Usage no era muy elevado, se decidió ahora sí, quitar recursos, bajando la configuración a 2 sockets con 1 core. Se puede ver como desaparece el Ready y el Usage aumenta al tener que hacer mayor uso de las 2 vCPU asignadas. De todas formas no se sobrepasa el 80% del uso, con lo que todavía queda margen para realizar operaciones a nivel de CPU.

Tramo negro: Por último se modificó nuevamente la asignación de recursos para asignar 3 sockets con 1 core. Repuntando un poco el valor de Ready pero dando mayor energía al Usage para mejorar la ejecución de procesos en el servidor.

Otra consecuencia de la asignación de un número u otro de vCPU a las máquinas virtuales va a ser el consumo EXTRA de ram física del host para virtualizar esos recursos asignados. A este valor se le llama Host Memory Overhead Consumption y se puede ver en la pestaña Resource Allocation de una máquina virtual.

Captura+de+pantalla+2012-12-21+a+la(s)+11.13.56.png


Overhead Consumption


A más vCPU y vRAM asignada a la máquina virtual mayor valor de Overhead consumption.

Captura+de+pantalla+2012-12-21+a+la(s)+11.37.29.png


Tabla valores Memory & vCPU vs Overhead


Esperando que os pueda servir de utilidad me despido hasta el próximo post, no sin antes dar las gracias a Andreu C. Su aportación ha sido clave para documentar este caso real.

Saludos,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Post Relacionados: