Virtualización: Optimización del uso de memoria de Hyper-V
La memoria dinámica puede ser una característica útil, pero hay que tener mucho cuidado al configurar las máquinas virtuales y el servidor host.
Brien M. Posey
Cuando se trata de hospedar cargas de trabajo virtuales, probablemente ningún recurso de hardware sea tan importante para el rendimiento global como la memoria física. Resulta imprescindible asignar la memoria de tal forma que cada máquina virtual cuente con la memoria que necesita, pero sin derrochar memoria en este proceso. He aquí algunas medidas clave para asignar la memoria para usarla con Microsoft Hyper-V.
Consideraciones del NUMA
La administración de la memoria para Hyper-V es algo así como un arte. Tenemos que asegurarnos de asignar una cantidad suficiente de memoria para cada una de las máquinas virtuales. Al mismo tiempo, también debemos evitar asignarles más memoria de lo realmente necesario.
Las razones son bastante evidentes. Al asignar un exceso de memoria a una máquina virtual se limita la cantidad de memoria disponible para las otras máquinas virtuales en el mismo servidor. Pero a veces un exceso de memoria en una máquina virtual incluso puede limitar su rendimiento.
La mayoría de los servidores emplean memoria del tipo acceso a memoria no uniforme (NUMA). La memoria de NUMA está diseñada para mejorar el rendimiento al asignarla a cada procesador. Cada bloque de memoria dedicada se conoce como nodo NUMA. Una CPU puede obtener acceso al nodo NUMA local (la memoria asignada directamente a esa CPU) en forma más rápida de la que puede acceder a los nodos NUMA no locales.
Las versiones de Hyper-V para Windows Server 2008 y 2008 R2 no son directamente compatibles con la afinidad de memoria basada en los nodos NUMA. En otras palabras, no permiten configurar directamente una máquina virtual para un nodo NUMA determinado. Nos informan que esta funcionalidad estará disponible en la versión para Windows Server 8 de Hyper-V. Pero a pesar de esto podemos tomar medidas para reducir las posibilidades de usar los nodos NUMA que no son locales.
El truco está en calcular el tamaño de los nodos NUMA. Por ejemplo, supongamos que el servidor está equipado con dos procesadores de ocho núcleos y 128 GB de memoria RAM. Para calcular el tamaño de los nodos NUMA dividimos el tamaño de la memoria (128 GB) por el número de núcleos (16). En este caso, el tamaño de un nodo NUMA sería 8 GB.
Hyper-V todavía no nos permite asignar un nodo NUMA determinado a una máquina virtual específica. Pero como sabemos que este servidor concreto cuenta con un tamaño de nodo NUMA de 8 GB, podemos deducir que cualquier máquina virtual con más de 8 GB asignados inevitablemente tendrá que usar memoria que provenga de varios nodos NUMA. Al limitar la memoria asignada a una máquina virtual a 8 GB o menos (en este caso) aumentan las probabilidades de que la máquina virtual use la memoria de un único nodo NUMA, lo que es beneficioso para el rendimiento.
Sobrecarga de Hyper-V
Los nodos NUMA no son lo único que hay que tomar en cuenta al realizar la administración de la memoria. Al planificar la forma en que usamos la memoria del servidor host, es extremadamente importante tomar en cuenta la sobrecarga relacionada con la virtualización. Existen dos consideraciones principales respecto a esta sobrecarga. Primero, tenemos que reservar memoria para la partición principal.
Tendremos que reservar al menos 300 MB para el hipervisor y 512 MB para el sistema operativo en la partición raíz. Sin embargo, la mayor parte de los procedimientos recomendados indican que debemos reservar al menos 2 GB para la partición principal.
No debiéramos usar la partición host para nada a excepción de Hyper-V (aunque podemos ejecutar software de seguridad e infraestructura, tales como agentes de administración, agentes para copias de seguridad y firewalls). Por lo tanto, esta recomendación de los 2 GB supone que no vamos a ejecutar aplicaciones ni roles de servidor extra en la partición principal.
Hyper-V no permite asignar directamente la memoria en la partición host. En esencia, simplemente usa la memoria que queda. Por lo tanto, tenemos que recordar dejar 2 GB de la memoria del servidor host sin asignar para que quede a disposición de la partición principal.
Asignación de memoria en las máquinas invitadas
La otra cosa que debemos tener en cuenta con respecto a la sobrecarga de la virtualización es que las máquinas virtuales usan una pequeña cantidad de memoria para los servicios de integración y otros procesos relacionados con la virtualización. Como esa cantidad de memoria es bastante trivial, normalmente no tenemos por qué preocuparnos de asignar memoria extra para esto, a menos que tengamos la intención de proporcionar a cada máquina virtual sólo la cantidad estrictamente necesaria de memoria virtual.
Las máquinas virtuales con 1 GB o menos de memoria RAM sólo gastan unos 32 MB de memoria para la sobrecarga relacionada con la virtualización. Por cada gigabyte de memoria adicional debemos agregar 8 MB. Por ejemplo, una máquina virtual con 2 GB de memoria RAM usaría 40 MB (32 MB más 8 MB) de memoria para la sobrecarga de la virtualización. Asimismo, una máquina virtual con 4 GB de memoria perdería 64 MB de memoria debido a la sobrecarga.
Memoria dinámica
Windows Server 2008 R2 SP1 lanzó una nueva característica de memoria dinámica que permite a las máquinas virtuales consumir la memoria en forma dinámica de acuerdo con las cargas de trabajo actuales. Esto también nos permite asignar más memoria de la que está disponible físicamente en el servidor para ejecutar más máquinas virtuales de las que serían posibles de otra forma. A pesar de las ventajas de la memoria dinámica, es muy importante seguir algunas prácticas recomendadas para evitar agotar completamente la memoria de las máquinas virtuales.
Primero, el uso de la memoria dinámica no es siempre la mejor opción. La memoria dinámica se puede habilitar o deshabilitar para cada una de las máquinas virtuales por separado. Es importante habilitar la memoria dinámica sólo en aquellas máquinas virtuales que realmente pueden beneficiarse de esta característica.
Uno de los aspectos más importantes que hay que tener en cuenta es la carga de trabajo en las máquinas virtuales. Si una aplicación en una máquina virtual está diseñada para usar una cantidad fija de memoria, entonces es mejor entregarle a esa máquina virtual la cantidad exacta de memoria requerida en vez de usar la memoria dinámica.
Lo mismo vale para las aplicaciones que requieren mucha memoria. Algunas aplicaciones están diseñadas para consumir toda la memoria que tienen a disposición. Estas aplicaciones pueden agotar rápidamente toda la memoria física de un servidor si se les permite usar la memoria dinámica. En este caso, es preferible asignar una cantidad fija de memoria a las máquinas virtuales que ejecutan este tipo de aplicaciones.
Por último, el rendimiento de un servidor puede sufrir si las máquinas virtuales intentan usar la memoria de nodos NUMA diferentes. Por lo tanto, si el servidor usa memoria NUMA y el rendimiento es de gran importancia, entonces probablemente sea mejor evitar la memoria dinámica.
Memoria RAM inicial
Uno de los conceptos más importante con respecto a la memoria dinámica es la memoria RAM inicial. Al usar la memoria dinámica, debemos asignar a cada máquina virtual un valor para la memoria RAM inicial. Este valor refleja la cantidad de memoria física que usará la máquina virtual al arrancar. Más importante aún, la memoria RAM inicial también representa la cantidad mínima de memoria física que va a consumir la máquina virtual. Las máquinas virtuales no pueden consumir menos memoria que el valor de memoria RAM inicial asignado.
Siendo ese el caso, Microsoft recomienda evitar asignar cantidades grandes de memoria RAM inicial a las máquinas virtuales. Es mejor basar la memoria RAM inicial en el sistema operativo que se ejecuta en la máquina virtual. Microsoft recomienda 512 MB de memoria RAM inicial para las máquinas virtuales con Windows 7, Windows Vista, Windows Server 2008 y Windows Server 2008 R2. En el caso de las máquinas virtuales con Windows Server 2003 y Windows Server 2003 R2, Microsoft recomienda 128 MB de memoria RAM inicial.
Para que las máquinas virtuales hagan uso de la memoria dinámica, el sistema operativo de la máquina virtual debe ser compatible con esta función. Windows XP no reconoce la memoria dinámica. Al intentar ejecutar Windows XP en una máquina virtual configurada para un uso dinámico de la memoria, el sistema operativo sólo tiene acceso a la memoria RAM inicial.
Es importante que antes de pasar a otras tareas de configuración, nos aseguremos de que la memoria RAM inicial combinada de todas las máquinas virtuales no supere la memoria física instalada en el servidor. De lo contrario, tendremos que eliminar algunas máquinas virtuales o agregar memoria RAM.
También podemos ajustar el valor de memoria RAM máxima. Este valor representa la cantidad máxima de memoria física que puede usar una máquina virtual. En forma predeterminada, Hyper-V establece la memoria RAM máxima de todas las máquinas virtuales en 64 GB. Podemos establecer este valor en una cantidad menor cuando no necesitamos tanta memoria física en algunas de las máquinas virtuales.
Ponderación de la memoria
El objetivo de la memoria dinámica es permitir asignar más memoria de la disponible. Así las máquinas virtuales pueden acceder a la memoria que necesitan cuando la necesitan. La gran desventaja de asignar los recursos de hardware en exceso es que puede terminar por agotar el recurso. En el caso de la memoria dinámica, es perfectamente posible que las máquinas virtuales consuman toda la memoria física disponible y sigan necesitando más.
La solución a largo plazo es equipar el servidor con la memoria suficiente para satisfacer las necesidades de las máquinas virtuales. Una solución a corto plazo, sin embargo, es establecer prioridades en el uso de la memoria.
Prácticamente todos los servidores host tienen algunas máquinas virtuales que son más importantes que las demás. Hyper-V nos permite darles prioridad, de modo que en el caso de escasez de memoria física, la memoria se asigna primero a las máquinas virtuales de mayor prioridad. Para asignar prioridad a una máquina virtual para el uso de la memoria virtual podemos ajustar la ponderación de su memoria. Las máquinas virtuales con una ponderación de memoria mayor tienen prioridad sobre aquellas con ponderaciones menores.
El otro valor que tenemos que configurar en todas las máquinas virtuales que usa la memoria virtual es el búfer de memoria. El valor del búfer de memoria controla la cantidad de memoria que debe tratar de reservar cada máquina virtual como búfer. Este valor se expresa en forma de porcentaje. Por ejemplo, si una máquina virtual usa 4 GB de memoria asignada y el búfer de memoria está establecido en 50 por ciento, entonces la máquina virtual podría consumir hasta 6 GB de memoria.
El búfer de memoria no garantiza que la memoria del búfer vaya a estar disponible para una máquina virtual. Simplemente controla la cantidad de memoria que la máquina virtual debiera intentar reclamar. Vale la pena mencionar que como el búfer de memoria se expresa como porcentaje, la cantidad de memoria en búfer cambia en respuesta a la cantidad de memoria que la máquina virtual está usando en cada momento dado. Todas las máquinas virtuales que emplean memoria dinámica comienzan por usar una cantidad mínima de memoria. Después ajustan el uso de la memoria dinámicamente según la presión ejercida por las cargas de trabajo en la memoria.
Configuración de la memoria
El proceso de configurar el uso de memoria en la propia máquina virtual es relativamente sencillo. Abra el Administrador de Hyper-V y haga clic con el botón secundario en una máquina virtual (ya que la memoria se administra en forma independiente para cada máquina virtual). Seleccione el comando Configuración del menú contextual. Una vez que desaparezca el cuadro de diálogo Configuración, haga clic en Memoria.
Hyper-V permite asignar una cantidad estática de memoria a la máquina virtual o usar la memoria dinámica (consulte la Figura 1). Al optar por la opción dinámica, podemos ajustar la cantidad de RAM inicial, RAM máxima, Búfer de memoria y Ponderación de la memoria directamente mediante el cuadro de diálogo Configuración.
Figura 1 El cuadro de diálogo Configuración permite ajustar la asignación de memoria para una máquina virtual.
Si un servidor host cuenta con recursos limitados de memoria física, generalmente hay que sopesar los pros y los contras entre la memoria estática y la memoria dinámica. La memoria estática normalmente ofrece un rendimiento general mejor (siempre cuando se haya asignado la cantidad suficiente de memoria). Puede que la memoria dinámica sea un poco más complicada, pero generalmente permite una densidad mayor de máquinas virtuales.
Brien Posey, MVP, es escritor técnico independiente con miles de artículos y docenas de libros a su haber. Puede visitar su sitio web en brienposey.com.