Hyper-V. El uso de la Memoria
La Memoria, es uno de los aspectos más críticos que pueden existir en un entorno de virtualización, entender bien la arquitectura de memoria de Hyper-V, nos permitirá comprender mejor como aprovechar los recursos y obtener el mejor rendimiento posible, sin olvidar que junto con la CPU vs. Virtual Processor, la Red y el Almacenamiento, conforman un tanto por ciento muy grande de lo que es la virtualización.
Memoria Física del Host
Parece lógico pensar que la mayor cantidad de memoria es el parámetro más importante sobre la memoria, pero no olvidemos que la velocidad y la latencia de la memoria son siempre importantes en un host de virtualización, donde lo normal sería sacrificar si es necesario estos otros aspectos con el fin de obtener más cantidad de memoria al mismo precio, donde lo realmente importante es equilibrar la configuración del host para poder obtener el mejor coste por VM posible. Podemos obtener más memoria a menor precio con memoria más lenta y de igual forma podemos tener memoria más rápida al mismo precio reduciendo la cantidad de memoria.
¿Cómo se traslada esto al uso de la memoria en Hyper-V?,
Un ejemplo; Memoria DDR-3 a 1333 MHZ es capaz de mover 35 GB/ps, mientras que a 800 MHZ sería capaz de mover 25 GB/ps, sé que son cifras muy altas, y podemos encontrarnos con algunos otros buses en el sistema que serán cuello de botella más tarde y puede que finalmente estas cifras terminen rebajándose a 8GB/ps reales. Tengamos en cuenta en cualquier caso que en un servidor físico toda esa velocidad está al servicio de un único sistema, mientras que en un servidor de virtualización estará al servicio de hasta 384 VMs por servidor con Hyper-V.
La recomendación parece clara, evaluar cuidadosamente la elección de memoria, porque la elección que hagamos puede tener impacto en el rendimiento de la memoria, ya que por ejemplo algunos módulos de memoria pueden forzar al sistema a rebajar la velocidad del bus para todos los módulos y por tanto seria tirar el dinero mezclar memoria rápida con memoria lenta.
Si estás pensando en ampliar la memoria del servidor, ten en cuenta los bancos de memoria que quedan libres en el servidor, con la configuración de memoria que necesites para tu entorno de virtualización. Es muy posible que sea mejor negociar con tu proveedor la recompra de la memoria que tienes y adquirir la misma memoria con las prestaciones que necesitas.
Máximos de Memoria en Hyper-V
Hyper-V se presenta en dos sabores: 1.- Versión dedicada y gratuita “Hyper-V Server” que contiene todas las funcionalidades de Hyper-V pero ningún derecho de licencias. 2.- Como un rol del OS que activaremos sobre una instalación full o core. El principal benefio son las ventajas de licenciamiento, Hyper-V como rol en versión Datacenter licencia por socket todas las VMs que montes con los derechos de Windows Server incluidos. Y aunque una VM puede tener 64GB de memoria, el uso que haga de ellos dependerá del sistema operativo que corra en la VM.
En Windows Server 2008 R2 cada VM puede acceder hasta 4 procesadores virtuales, hasta 64 GB de memoria por VM y pueden estar activas por host hasta 384 máquinas virtuales. El Host, soporta 64 procesadores lógicos, 1 TB de memoria física y 512 VP por host. En CLuster CSV, 16 nodos y 1000 VM
En Windows Server 2012 cada VM puede acceder hasta 64 procesadores virtuales, hasta 1 TB de memoria por VM y pueden estar activas por host hasta 1024 máquinas virtuales. El Host, soporta 320 procesadores lógicos, 4 TB de memoria física y 2048 VP por host. En Cluster CSV, 64 nodos y 4000 VM
La reserva de memoria del host
El host y la partición padre requieren de memoria para funcionar y es muy importante asegurarnos que tienen la memoria que requieren. A parte de la propia memoria requerida por el sistema operativo de la partición padre, tenemos que tener en cuenta la memoria que consuma en pico de los agentes de antivirus, monitorización ó backup. Ya que menciono tema antivirus, asegúrate de añadir las excepciones necesarias para entornos de hyper-v y/o CSV. Hay que considerar como mejor solución que paginen las VM a que pagine el host, pese a que la paginación es un enemigo natural de la consolidación de VMs.
Ésta sería la fórmula a aplicar;
• Hyper-V requiere 300MB como hypervisor
• El sistema en la partición padre se llevará 512MB, (mejor 1024MB)
• Suma la memoria máxima de todos tus agentes instalados en el servidor, antivirus, monitorización, backup…
• Por cada VM suma 32 MB
• Por cada GB que tenga una VM por encima del primero suma otros 8MB
• Suma toda la memoria y será la cantidad a reservar para el host.
Con el resto de memoria que quede en el host será la memoria que podrás usar para las VMs, esto es así porque la memoria de las VM es de un tipo especial denominado “non-paged-pool memory” esto supone una garantía de rendimiento dado que nos garantiza que las VM siempre usaran RAM y no paginación en disco. El host puede paginar pero no por la RAM que usen las VMs.
La memoria de Paginación en las VMs
Partimos de la premisa que si un sistema operativo página es porque le falta memoria RAM y tendrá como resultado consumo en operaciones de entrada y salida (I/O) en disco Cuando virtualizamos muchas VMs en un mismo servidor y sistema de almacenamiento las I/O deben de ser de las cosas que más nos preocupen. Si una VM página en disco tendremos un impacto pequeño, pero si tenemos 1000 VDIs ó VMs y se ha dimensionado mal la memoria y un porcentaje grande de estas VMs página, el rendimiento general será bastante malo.
Un buen aliado puede ser la memoria dinámica pero no quita que tengamos cuidado a la hora de calcular la memoria real que necesitamos, si no calculamos bien puedes quedarte sin memoria y entonces veras cifras negativas de memoria disponible en las VMs y estarás sufriendo paginación. Para ello, monitoriza adecuadamente tus VM. Si el rendimiento de la paginación es crítico en tu entorno para una VM, puedes usar un VHDX fijo adicional para la paginación.
Los ficheros .bin
En cualquier momento puede ser necesario realizar operaciones que tienen repercusiones con respecto a la memoria de una VM, como por ejemplo pausar una VM o sacar una instantánea. Hyper-V es un sistema tremendamente protector que intenta a toda costa evitarte problemas especialmente los de estabilidad. Por esto Hyper-V reserva en el disco espacio para poder respaldar la memoria de la VM en disco y esto lo hace a través del fichero .BIN que en ocasiones ocupa tanto como la memoria asignada a la máquina virtual.
Entender la Memoria Dinámica
Cuando configuramos una máquina virtual hay dos formas de configurar su memoria, de forma estática o dinámica.
Configuración de memoria estática Cuando se configura una VM con memoria estática será necesario contar con toda esa memoria RAM libre en el host para poder arrancar la máquina virtual, si el host no tiene suficiente memoria RAM recibiremos un error que nos impedirá arrancar la VM en este host, pudiéndolo intentar en otro nodo del cluster si es que estamos en un cluster. De esta forma si configuramos todas las VM de un host con memoria estática la suma de la cantidad de memoria RAM de todas las VM más la memoria RAM no paginada usada por el HOST nunca podrá superar la RAM total del HOST.
Configuración de memoria dinámica
Normalmente los servidores o escritorios virtualizados no usan el 100% de la memoria asignada durante todo el tiempo, de hecho a ninguno nos gusta que ninguna de nuestras maquinas este al 90% de uso de memoria de forma constante. Hyper-V a través de la memoria dinámica nos permite aprovechar de forma inteligente la memoria no usada en las máquinas virtuales redistribuyendo esta memoria a las máquinas virtuales que la necesitan dentro del host.
Lo mejor de este sistema es que no afecta al rendimiento de forma perceptible, no entraña riesgos y no te requiere de ningún cambio de configuración en el sistema operativo de la VM para aprovechar todo su potencial. Podéis usar DM en servidores Windows Server 2008 R2 SP1 con Hyper-V o con la versión gratuita de Hyper-V; Hyper-V Server 2008 R2 SP1 y por supuesto en las versiones Windows 2012.
Las maquinas virtuales en las que activéis DM pueden ser Windows Server 2003, 2008, 2008 R2, 2012, 2012 R2, tanto en 32 como en 64-bit. Y en la parte cliente Windows 7 en versión Enterprise y Ultimate en 32 y 64-bit, Windows 8 y 8.1.
Cosas importantes sobre la DM Hyper-V nunca paginara para crear RAM de donde no hay por lo que nunca tendréis problemas de rendimiento.
Cuando configuramos una VM con memoria dinámica indicamos 3 parámetros iniciales:
La memoria de arranque será la cantidad de memoria que la VM reclamara al HOST para arrancar y una vez la VM arranque estará completamente bloqueada para su uso. Hay dos formas de tomar la decisión de cuanta memoria asignar como memoria de arranque:
1.- Usar la tabla de memoria mínima necesaria por sistema operativo de acuerdo a fabricante.
2.- Desde mi punto de vista es mejor tomar la decisión basándonos en los datos de la monitorización, si sabemos que un servidor emplea habitualmente 2 GB no tiene sentido configurarlo con una memoria mínima de 512 MB, será mejor configurar una memoria mínima cercana al uso real.
Creo que esto nos permite un mejor y más realista dimensionamiento de los sistemas a la vez que evita al host operaciones innecesarias.
El siguiente parámetro a configurar es la memoria máxima, si bien en algunos sitios se ha leído que lo mejor es configurar la memoria máxima al máximo permitido por Hyper-V (64GB) o bien al máximo permitido por el sistema operativo de la VM si es menos de 64GB, tenemos que configurar un valor que consideramos apropiado a la carga que existe dentro de la VM y al coste que queramos repercutir a ese servicio.
El siguiente parámetro es el buffer, podemos entender esta parámetro fácilmente viéndolo como el que especifica a Hyper-V que cantidad de memoria tiene que darle de una sola vez a la VM cada vez que es necesario. Si configuramos el buffer a un 10% y una VM que tiene ocupados 1GB requiere más RAM, Hyper-V tratara de darle 100MB si están disponibles bien como memoria libre en el host o bien como memoria que puede liberarse por falta de uso en otras VMs con DM.
Si ponemos el buffer a un valor muy bajo se le entregara memoria a la VM en bloques pequeños por lo que la VM no tendera a tener mucha memoria libre, sin embargo un buffer mayor dejara holgura en la VM lo que puede ser beneficioso para algunas cargas que usan caches en RAM. Hyper-V atiende una solicitud de memoria de forma activa e inmediata en cuanto una VM lo solicita.
¿Cómo añade y quita memoria Hyper-V?
Gracias los componentes de integración (IC) que sabéis que tenéis que instalar en todas las VM que ponéis en Hyper-V por eso cuando actualizáis vuestros Hyper-V 2012 a Hyper-V 2012 R2 tenéis que actualizar siempre los IC de todas las VM para que puedan usar DM y el resto de componentes de integración.
Dentro de los IC de la VM hay un elemento que se encarga de comunicar a Hyper-V la presión de memoria que hay dentro de la VM, a este componente le llamamos “Dynamic Memory VSC” donde VSC significa Virtual Service Consumer.
Hyper-V tiene otro componente análogo llamado “Dynamic Memory VSP” donde VSP significa Virtual Service Provider este componente se encarga de escuchar la información de los VSC sobre la presión de memoria dentro de las VMs.
Finalmente Hyper-V tiene otro componente denominado “Memory Balancer” este componente se encarga de seguir la presión de memoria de todas las VMs con la información que le pasa el VSC y si es necesario y se puede reclamar la memoria no usada y también asigna memoria a las maquinas que lo necesiten.
Al añadir memoria se usa una funcionalidad que aportan los IC para añadir memoria en caliente lo que dispara el sistema de Plug and play para detectar la nueva memoria dentro del sistema operativo de la VM. DM funciona en sistemas operativos que no soportan de serie la funcionalidad de añadir memoria en caliente, esto es gracias a los IC.
Quitar memoria es un poco más difícil de entender, principalmente porque DM en realidad si lo vemos desde el punto de vista del sistema operativo de la VM nunca quita la memoria aunque en realidad la memoria física ya no está disponible para la VM. La DM en Hyper-V a la hora de quitar memoria usa una técnica denominada “balloning” o balón de memoria.
Cuando Hyper-V decide quitarle memoria a una VM por que no la usa esta memoria libre se prepara dentro de la VM y entonces gracias a un driver introducido por los IC Hyper-V hincha el balón de memoria dentro de la VM usando memoria no paginada, este balón indica al sistema operativo que esa memoria está siendo usada por el driver de forma que el sistema operativo ya no la usa para nada mas e Hyper-V puede por detrás retirar esa memoria física y asignársela a otra VM. Si usáis la herramienta rammap de sysinternals veréis lo bien que se ve como el driver bloquea la memoria.
La reclamación de la memoria no se realiza inmediatamente en cuanto la VM no la necesita salvo que otras VMs estén reclamando esa memoria y no haya más memoria libre en el sistema. Con el fin de optimizar el proceso y evitar esperas, Hyper-V recolecta la memoria libre cada 5 minutos. Otro parámetro que se puede configurar es la prioridad o peso que tendrá esta VM respecto a otras a la hora de reclamar memoria.
Presión de memoria y banda de presión
Para entender cuando una VM pide memoria tenemos que entender el concepto de presión de memoria Expresamos la presión de memoria como un %, este porcentaje se calcula dividiendo el valor de “current commit charge” por el valor de la memoria física, el porcentaje restante hasta el total de la memoria RAM física que ve la VM es el valor que llamamos “free buffer”
Cuando la presión es superior al 100% la VM estará paginando mucho y el “free buffer” será negativo.
Hyper-V ve la presión de memoria de la VM dentro del contexto de lo que denominamos banda de presión, esta banda tiene unas marcas de agua que establecen la presión mínima y máxima dentro de la VM, los datos de presión mínima y máxima se establecen en base a la información histórica de presión de memoria dentro de la VM. Si la presión actual se mantiene entre el mínimo y el máximo la memoria ni se quitara ni pondrá. La memoria se quita cuando la presión de memoria está por debajo de la presión mínima y se pide memoria cuando se excede la presión máxima.
Para que la DM funcione adecuadamente es necesario que la máquina virtual tenga bien configurada la paginación, si el fichero de paginación no es suficientemente grande Hyper-V no podrá añadir más memoria a la VM. Un ejemplo: una VM tiene en este momento 2GB asignado, está usando 1950MB y un proceso pide 100MB, lo primero que es necesario es que el sistema operativo dentro de la VM le de esos 100MB y para eso tendrá que paginar los 50 que faltan, justo después Hyper-V detectará la condición y le añadirá memoria a la VM, pero si no hay espacio en el fichero de paginación no será posible todo esto.
Otra cosa a tener en cuenta es que el sistema operativo dentro de la VM si está configurado para establecer dinámicamente el tamaño del fichero de paginación lo hará en función de la cifra de RAM que configuramos como memoria de arranque, esto implica que si queremos que dentro de una VM se pueda ejecutar un volcado de memoria completo será necesario configurar el tamaño del fichero de paginación manualmente al tamaño máximo de memoria que pueda tener la VM.
Es frecuente preguntarnos si debemos usar o no la DM en nuestras VMs, la respuesta seria que si en la gran mayoría de los casos, solo evitaremos su uso en aquellas VMs que tengan cargas donde el fabricante explícitamente no soporte este tipo de tecnológicas o donde no tengan sentido por ser cargas como bases de datos que tienden a usar toda la RAM disponible como cache de datos.
Hay un último aspecto que comentar sobre la memoria dinámica y es que el fichero .BIN puede crecer al incrementarse la cantidad de memoria debido a una operación de adición de memoria. Si no hay espacio para que el .BIN crezca no se podrá añadir más memoria http://support.microsoft.com/kb/2504962
Monitorizar la memoria
Básicamente tenemos dos grupos de contadores, los contadores del balanceador de memoria que nos hablan de la memoria que el host tiene disponible y de las operaciones de añadir y quitar memoria y por otra parte los contadores relativos a cada VM que nos hablan de la memoria que se quita y se pone y de la presión de memoria que experimenta la VM.
Para terminar
Mientras que puede parecer que la memoria es un concepto muy sencillo, hay muchos detalles interesantes de entender para poder implementar si queremos exprimir hyper-v 2.0 y 3.0 en nuestros entornos.
Comentarios recientes