sábado, 28 de mayo de 2011

Vmware vSphere: Optimización de uso de memoria

Hola a todos,

En este articulo profundizaremos en las distintas tecnicas que utiliza VMware para optimizar el uso de memoria.

VMware tiene funcionalidades que permiten sobreaprovisionar los recursos de memoria, o sea asignar más memoria de la que realmente existe en nuestros hosts ESX/ESXi.

La administración de memoria es uno de los puntos más destacados en VMware, y donde se diferencia fuertemente de su competencia. Al mismo tiempo, el sobreaprovisionamiento de recursos es una de las razones de que la virtualizacion pueda utilizar el hardware de manera más eficiente que los servidores fisicos.
Esta administración de memoria esta basada en el hecho de que no todas las máquinas virtuales utilizan completamente su memoria RAM asignada en todo momento.

Al estar libre la memoria, el hypervisor podria hacer uso de esta memoria para distribuirla entre las máquinas virtuales que más lo necesitan.

Administración de Memoria

VMware utiliza una serie de metodos para administrar la memoria, los cuales detallaremos a continuación, en el orden en que estos son aplicados:

Transparent Page Sharing


Transparent Page Sharing, o TPS, es el proceso de eliminar los bloques de memoria identicos, remplazandolos con apuntadores logicos a una unica copia. El proceso es similar a como los productos de almacenamiento utilizan la deduplicación para disminuir los costos de almacenamiento.

El uso de TPS permite reducir el uso de la memoria en los hosts, y por lo tanto nos da la posibilidad de consolidar más maquinas virtuales en un host. TPS no compara cada byte, sino que usa un hash de cada pagina de 4KB para identificar paginas que necesiten una revisión más precisa. Estas ultimas son finalmente comparadas para confirmar si son identicas, luego de lo cual se eliminan todas las paginas duplicadas, dejando solo uno en memoria, creando los apuntadores logicos respectivos.

Todo este proceso es totalmente transparente para las máquinas virtuales, las cuales no son concientes de que esta compartiendo paginas de memoria.

Finalmente, TPS solo considera las paginas de memoria de 4KB, ya que es muy poco probable encontrar paginas de memoria de 2MB que sean identicas, sumado al hecho de que su escaneo es más costoso en termino de uso de recursos.

Ballooning



Cuando las VMware Tools están instaladas en una máquina virtual, junto con estas se instalan un driver de un dispositivo "falso" llamado "Ballon Driver", el cual es utilizado para "inflar" la memoria utilizada. El nombre preciso para este dispositivo es "vmmemctl".

Normalmente, el hypervisor no es consciente de cuales sectores de la memoria son más importantes para la máquina virtual, y la máquina virtual no sabe si el host está sufriendo escazes de memoria.

El "Balloon Driver" es un mecanismo que el hypervisor puede utilizar para pedirle al sistema operativo de la máquina virtual, que elija que paginas de memoria pueden ser liberadas. El sistema operativo entiende cuales paginas estan siendo usadas, y para que propositos, y puede tomar la mejor decision acerca de liberar cierta cantidad de memoria, impactando lo menos posible a la performance de la máquina virtual.

Cuando el VMKernel necesita que la MV libere memoria, "infla" el "Globo" o Balloon diciendole al "Balloon Driver" que intente consumir más memoria como un proceso en el sistema operativo de la máquina virtual. El Sistema Operativo decide entonces que paginas de memoria puede liberar para asignarselas a este "proceso". Si la MV tiene mucha memoria libre, esta es entregada al "Balloon Driver", y el Driver puede decirle al hypervisor que paginas de memoria liberar. Si la MV no tiene memoria libre, el Sistema Operativo elige que paginas de memoria pasarlas a la memoria Swap usando su propio archivo de paginación (Windows) o particion Swap (Linux). Luego de esto, el hypervisor puede hacer uso completo de la memoria recolectada con el Balloon Driver, pudiendo esta ser traspasada a otra máquina virtual que requiera más memoria.

El proceso de Ballooning traspasa las restricciones de memoria del host al sistema operativo de la MV, la cual puede tomar mejores decisiones acerca de que paginas debieran ser mantenidas en la RAM, y cuales en disco (Swap).

Por defecto el Balloon Driver solo trata de liberar un maximo de 65% de la memoria asignada a la MV. El sistema operativo debe tener un archivo de paginación o particion Swap al menos del mismo tamaño de la memoria RAM asignada.

Compresion


vSphere 4.1 incluye un algoritmo de compresion de memoria, que analiza cada pagina de 4KB y determina si puede ser comprimida al menos a un tamaño de 2KB. Si la pagina no puede ser comprimida a dicho tamaño, la pagina queda marcada para ser pasada al archivo Swap de la MV (a nivel de VMware), si es que asi se requiere.

Cuando la MV necesita acceso a la pagina nuevamente, la pagina es descomprimida nuevamente y entregada a la memoria de la MV. A pesar de la latencia, y la sobrecarga de CPU inherente al proceso de comprimir y descomprimir las paginas de memoria, es una tecnica considerablemente más eficiente que el Swapping de la memoria en disco.

Por defecto el caché de compresion de memoria esta limitado al 10% de la memoria de la MV. Cuando el caché esta lleno, reemplaza las paginas comprimidas en orden de antiguedad, las paginas más antiguas son descomprimidas y enviadas a la memoria Swap, dejando espacio libre en el Caché para paginas más nuevas y utilizadas más frecuentemente.

Swapping


Cuando una MV es encendida, el hypervisor crea un archivo de Swap en el directorio de la MV, con la extension .vswp. Este es utilizado como un ultimo recurso para que el hypervisor libere memoria RAM adicional, cuando el host esta bajo un uso intenso de los recursos de memoria.

El VMkernel obliga a que ciertas paginas de memoria sean movidas desde la memoria RAM al disco, pero a diferencia del Balloon Driver, no puede apoyarse en la administración de memoria del sistema operativo de la MV, y envia paginas de memoria al archivo Swap en forma aleatoria.

El Swapping de memoria produce una degradación importante en la performance, debido a que el proceso no es selectivo, y sin lugar a dudas moverá paginas activas de memoria al archivo Swap. Adicionalmente, el procesos de Swapping impacta a la performance del host, ya que aumenta el uso de CPU para procesar el swapping de memoria.

Cuando es reclamada la memoria?

La memoria es reclamada solamente desde la memoria No Reservada.

Cada MV espa configurada con una cantidad de memoria. Si no hay ninguna reservacion de memoria configurada, entonces cuando la MV se encuentre encendida, el archivo .vswp es creado del mismo tamaño que la memoria asignada a la MV. Por ejemplo, si una MV tiene asignada 4GB de memoria, y no tiene reservaciones configuradas, el archivo .vswp de la MV es creado con un tamaño de 4GB.

Cualquier reservacion de memoria reduce el tamaño del archivo de Swap, ya que la memoria reservada esta siempre asegurada por la memoria fisica del host, y nunca será reclamada ante escazes de memoria. Esta es memoria garantizada y por lo tanto nunca será enviada a Swap por el host.

Por ejemplo, en una MV con 4GB de memoria asignada, con una reserva de 2GB, el archivo .vswp de la MV es creado con un tamaño de 2GB, que corresponde a la diferencia entre la memoria asignada y la reservada.

Los Shares de las MV solo aplican a la memoria asignada que no se encuentre reservada. La memoria fisica que recibe la MV, depende de su reservación de memoria, de cuanta memoria libre tenga el host, y la asignación de Shares entre todas las MVs.

Orden de aplicación de las tecnicas de administración de memoria.

El uso de las tecnicas de reclamacion de memoria detalladas anteriormente depende de la cantidad de memoria libre que tenga el host en determinado momento.

Algunos procesos se ejecutan en forma permanente, mientras que otros son activades cuando se alcanzan ciertos umbrales de memoria disponible.

Transparent Page Sharing se ejecuta constantemente, incluso cuando no existe contención de memoria en el host. Por defecto el host escanea cada 60 minutos para encontrar paginas redundantes. Una excepción es cuando se enciende una MV Windows, debido a que el Sistema Operativo chequea toda su memoria durante el encendido, por lo que TPS se ejecuta inmediatamente sobre esa MV, y no espera hasta el proximo ciclo.
  • Al llegar a un uso de memoria de un 94% (Estado High), el Hypervisor ejecuta el proceso de TPS inmediatamente. Idealmente esto logra que el uso de memoria del host baje de este umbral.
  • Al llegar a un uso de memoria de un 96% (Estado Soft), se activa el Ballooning, tratando de obtener memoria desde las máquinas virtuales, intentando que el uso de memoria del host baje del umbral del Estado High (94%).
  • Al llegar a un uso de memoria de un 98% (Estado Hard), el host comienza a forzar a que ciertas paginas de memoria sean enviadas desde la RAM al archivo de Swap. A la vez, el proceso de compresión de memoria comienza a trabajar, intentando reducir la cantidad de memoria que está siendo enviada al archivo Swap. Adicionalmente, las paginas largas de memoria (de 2MB), son divididas en paginas regulares de 4KB, para que ellas puedan ser compartidas utilizando TPS, evitando en lo posible que estas sean enviadas al archivo Swap.
  • Al llegar a un uso de memoria de un 99% (Estado Low), el host deja de crear nuevas paginas de memoria para las MVs y continua comprimiendo y haciendo Swapping de memoria, hasta que la memoria sea liberada y el host se recupere.


Espero que este articulo les haya sido de utilidad, y les haya ayudado a entender mejor las tecnicas de administración de memoria en vSphere.

0 comentarios:

Publicar un comentario