Recomendaciones sobre la asignación de memoria de VM General/Hyper-V

Recomendaciones sobre la asignación de memoria de VM General/Hyper-V

Tengo una pregunta básica sobre la configuración de VM. Estoy usando Hyper-V, pero creo que la pregunta es bastante genérica. Esto es para una oficina en casa, quiero obtener un rendimiento razonablemente bueno en las máquinas virtuales sin mucho trabajo. Utilizo las máquinas virtuales para probar/depurar mi software. Lo ideal sería tener todos los sistemas operativos iniciados, pero solo uno (probablemente cero la mayor parte del tiempo) estaría en uso activo a la vez.

¿Existen algunas pautas generales para la asignación de memoria a las máquinas virtuales? En un extremo, puede dividir la memoria total por la cantidad de VM (4 GB en total, 4 VM -> 1 GB cada una). En el otro extremo del extremo, podría darle a cada VM memoria completa y dejar que el sistema operativo arbitre. ¡Supongo que ambos están equivocados! Estoy buscando una "regla general" para un rendimiento razonable. No tengo idea de cómo el servidor de VM administra la memoria de las VM.

[editar] Hice esta pregunta porque supuse incorrectamente que Hyper-V (versión 2008 R2) podría proporcionar dinámicamente memoria adicional a las máquinas virtuales si hubiera más disponible. Pensé que podría sobreasignar la memoria, siempre y cuando mi uso solo alcanzara su punto máximo en una máquina virtual a la vez. Dado que Hyper-V quiere asignar la memoria fija para cada VM cuando se inician, necesito apagar algunas VM y ejecutar solo las que necesito, o configurar las VM para reducir las asignaciones de memoria y asegurarme de que la memoria física sea suficiente para todas las asignaciones más el proceso Hyper-V y (posiblemente) el sistema operativo host.

Parece que VMWare tiene más opciones en este sentido, como se indica en las respuestas proporcionadas. [/editar]

Gracias, Bret

Respuesta1

Como regla general, querrás saber que, en las peores condiciones, hay suficiente RAM física para que todas las funciones estándar funcionen de manera confiable desde la RAM. Cuál es ese número mágico varía de un sistema operativo a otro y varía ampliamente según los usos que le dé al sistema operativo invitado. Puede iniciar felizmente un servidor Windows 2003 con un par de cientos de megabytes de RAM, algunas distribuciones compactas de Linux con 30 megabytes o menos, etc., pero si desea ejecutar SQL Server en su invitado con bases de datos de varios gigabytes, entonces deberá Quiero asegurarme de que realmente tenga RAM real que respalde el par de Gigas de RAM que cree que tiene.

La forma en que el hipervisor maneja la RAM varía mucho entre proveedores y productos. Hyper-V no admite lo que se llama sobrecompromiso de memoria, por lo que está limitado a asignar RAM según lo que tenga físicamente disponible. ESX de VMware permite un compromiso excesivo, estableciendo reglas para el arbitraje de contención (acciones) para controlar lo que sucede cuando las máquinas virtuales están ocupadas y la cantidad total de RAM física es insuficiente para satisfacer la carga. En un entorno Hyper-V no tienes este nivel de control, por lo que debes asignar suficiente RAM por adelantado.

VMware tiene un par de trucos más para ayudar con el compromiso excesivo de la memoria; Uso compartido de páginas transparente y globos de memoria.

El uso compartido transparente de páginas es básicamente un almacenamiento de instancia única para RAM: el hipervisor monitorea los bloques de RAM asignados a cada VM y, si encuentra que existen bloques comunes en varias VM, solo conserva una única copia y apunta todas las VM a esa, si es que hay alguna VM posteriormente. intenta escribir en ese bloque, divide una copia para que no sucedan cosas malas. En un entorno de VM homogéneo, esto puede ahorrar una buena cantidad de RAM sin afectar el rendimiento.

Memory Ballooning es un mecanismo que permite al hipervisor "tomar prestada" la RAM asignada a una VM y entregársela a una más importante mediante el uso de un controlador de sistema operativo invitado en la primera que asigna una (gran) porción de memoria dentro de ese invitado. Una vez asignado, el hipervisor puede reasignar de forma segura la RAM física que respalda la memoria que le ha asignado el controlador del globo. La ventaja de hacer esto en comparación con el enfoque directo en el que el hipervisor simplemente cambia la memoria de la máquina virtual invitada al disco para reasignar la RAM es que el invitado que está perdiendo la RAM física sabe que algo está utilizando la memoria y que hay un riesgo significativamente reducido de que la RAM "prestada" se haya asignado a funciones importantes del sistema dentro del Guest.

Editado para agregar: Nunca he intentado ver qué sucede con Hyper-V cuando intentas iniciar máquinas virtuales que requerirán requisitos de memoria más allá de la cantidad de RAM física disponible. Toda la documentación que puedo encontrar indica que las máquinas virtuales obtienen toda la RAM que tienes. configurado para ellos y luego al hipervisor y al sistema operativo host se les asigna lo que queda. Hyper-V no tiene ningún mecanismo para aplicar una reserva mínima de RAM a una VM y luego asignar el resto desde un grupo, aunque sí proporciona dicho mecanismo para los recursos de la CPU. Nuevamente, ESX\ESXi de VMware ofrece esta opción.

Vale la pena recordar que también es necesario planificar la memoria física que necesitan tanto el hipervisor como el sistema operativo host (ignore este último si está ejecutando el servidor Hyper-V básico). Microsoftconsejos de ajuste de rendimiento para Hyper-Vestablece que además de los XGig de RAM que tienes en tus VM, debes tener:

  • 300 MB para el hipervisor
  • más 32 MB para el primer GB de RAM asignado a cada máquina virtual
  • más otros 8 MB por cada GB adicional de RAM asignado a cada máquina virtual
  • más 512 MB para el sistema operativo host que se ejecuta en la partición raíz

Si no tienes suficiente RAM física para estos, el rendimiento se verá seriamente afectado y posiblemente también la estabilidad.

Respuesta2

Hyper-V en Windows Server 2008 R2haceAdmite una función de memoria dinámica (estoy ejecutando SP1; no estoy seguro si estaba en la versión RTM). Me doy cuenta de que tu pregunta es bastante antigua, por lo que probablemente no era así cuando la formulaste.

Comencé asignando memoria estática a cada VM invitada, pero rápidamente maximicé mi servidor. La memoria dinámica le permite asignar una cantidad inicial (quizás baja) y una cantidad máxima por VM. Luego asignará memoria según demanda y también recuperará la memoria no utilizada. Debe editar la configuración de cada VM para configurar esto; no está disponible al crear una nueva VM. Acabo de reconfigurar un grupo de máquinas virtuales para usar memoria dinámica y reduje mi compromiso general de memoria a casi la mitad.

Captura de pantalla de Hyper-V Manager que muestra la memoria asignada

Las máquinas virtuales que he configurado para memoria dinámica muestran la demanda y el estado de la memoria actual. La máquina virtual resaltada todavía se está ejecutando dentro de su asignación inicial de 1 GB. El servidor Exchange (segundo desde arriba) es un cerdo gordo y ha desperdiciado su 1 GB inicial y se le han asignado un par más. La función permite un búfer configurable (20% de forma predeterminada), por lo que Hyper-V le ha dado a Exchange la cantidad que exige más algo adicional.

Respuesta3

No es una pregunta genérica porque Hyper-V no puede compartir páginas de memoria como lo hace VMWare, esa tecnología puede cambiar enormemente la forma en que se asigna la memoria de las VM. Si Hyper-V lo admite, le sugeriría que asigne a sus máquinas virtuales una cantidad inicial y luego observe el uso real a lo largo del tiempo por máquina virtual, alterando la asignación a medida que descubra más sobre su comportamiento.

información relacionada