En esta seria serie de post voy a intentar aclarar las típicas dudas sobre la gestión de la memoria en plataformas de virtualización VMWare & Hyper-V.
Es un requisito saber como gestiona nuestro hypervisor la memoria física disponible y conocer todas las técnicas de supervisión y gestión.
Vamos a empezar con razonamientos razonables :-).
Imagina que eres el administrador de una empresa en la que existen 8 servidores de 2 gb Ram, sobre un servidor físico de 16gb. Vas a adquirir un almacenamiento compartido y un segundo servidor para proporcionar a tu organización redundancia a fallos. Tus requisitos de memoria Ram, a priori, son 16 gb Ram. Comprarías un segundo servidor de 16 Gb de Ram o bien para tener preparado para ante un fallo del primer servidor, poder migrar las máquinas, o bien migrarías la mitad de las máquinas y tener en cada servidor 8gb usados/16 gb disponibles. Cuando recuerdas que el pre-venta del proyecto de virtualización no paraba de decirte que el ahorro de costes eran brutal, no paras de pensar que tienes un segundo server, con el mismo rendimiento que tenías antes, y has multiplicado por dos la inversión en servidores de tu empresa+ el almacenamiento compartido. Todo esto por tener la garantía de la continuidad de negocio... Bien, si lo ves razonable, no serás de los que un día, en uno de esos 8gb usados/16gb disponibles creas un par de máquinas virtuales para pruebas, o para una pequeña aplicación...
Todo lo anteriormente dicho es discutible, pero lo que es innegable es que debemos controlar el consumo de recursos de nuestros sistemas ( físicos o virtuales) para hacer ahorrar dinero a la empresa !!!
La estimación de los informes suele indicar que en el mundo físico, la carga de los servidores suele estar en torno a un 35% de la memoria RAM que tiene instalada. El mundo de la virtualización nos permite jugar con esos valores medios estimados, valores en una ventana de gran actividad y cruzarlos en el tiempo. Por ejemplo, si tenemos servidores que no necesitan estar por la noche encendidos porque tienen cero actividad de usuarios, pero tenemos una aplicación de backup, o un proceso OLAP que requiere de mucho calculo y que lanzamos por las noches, el sistema de virtualización bien configurado debería ser capaz de realizar lo que estáis pensando: Bajar los recursos asignados a las máquinas con poca actividad y dejar "rienda suelta" a la máquina virtual que alberga la aplicación que consume más recursos, y queremos que lo haga automático !!!
Una cosa curiosa en los sistemas Windows es la del consumo de memoria en su arranque. Los típicos 5 minutos una vez iniciado el sistema mientras que carga librerías y el malware que tengamos instalado :-) el consumo se dispara. Esto debemos tenerlo en cuenta en nuestras estrategías de gestión de la memoria.
Vas pensando en todo el juego que ofrece la gestión de la memoria de la virtualización verdad !! Vamos a por ello.
En los sistemas Hyper-V podemos configurar de la memoria virtual:
Ram de inicio sería la cantidad de memoria que indicamos para la máquina virtual. La máquina virtual tendrá esa reserva, y aunque necesite más recursos en momentos puntuales, seguirá en esos parámetros.
***Debemos tener en cuenta que para virtualizar una máquina, necesitamos tener al menos, en el equipo físico, 300 mb que consume Hyper-v en memoria, y el consumo de la máquina. A esto debemos sumarle el consumo de los servicios de integración con las herramientas que requiere 32mb por 1gb inicial de ram de la máquina virtual, y 8mb por cada 1g de ram adicional. Una máquina de 8 gb necesitaría:
300 mb Hyper-v
8 gb de la máquina
32+64mb
8gb de la máquina y medio giga (redondeando xD) para la gestión.***
Si usamos la tecnología de gestión dinámica de la memoria:
Memoria de inicio es la cantidad mínima de memoria con la que la máquina debe arrancar. Por ejemplo un servidor 2012 invitado, con menos de 512mb de RAM no arranca, aunque su consumo estable puede verse por debajo de ese valor.
Importante saber que el sistema operativo Windows Xp e inferiores no es capaz de gestionar esta memoria, por lo que si una máquina virtual corriendo Xp está configurada con memoria dinámica, su memoria RAM será siempre la que indiquemos para el momento de su arranque.
Debemos tener la memoria de inicio definida disponible al arrancar, sino no podremos.
La memoria máxima será la cantidad máxima disponible que podrá usar la máquina virtual en caso de necesidad. OJO con este caso. Una máquina Windows corriendo una base de datos SQL Server, en un momento dado de necesidad de recursos, por la ejecución de un trabajo, puede intentar consumir toda la memoria RAM que le vayamos pasando, pudiendo la máquina virtual colapsar al resto de máquinas.
Aquí podéis ver un caso en el que se establece la memoria dinamicamente, y la máquina está demandando un poco más aún, insaciable.
El buffer de memoria indica mediante % el valor estimado de sobrecarga (Respecto a la memoria inicial) que una máquina debe tener. Hyper-V intentará siempre reservar este espacio de memoria, pero en el caso de tener otra máquina virtual consumiendo recursos, puede que este buffer no esté garantizado. Por eso es dinámico y no un valor fijo. Una máquina con 8 GB de ram y un buffer de memoria del 50% intentará tener siempre 12 gb de ram disponible. En el caso de necesitar esos recursos, la máquina estaría consumiendo 12 gb pero como tiene un buffer del 50, intentará reservar 18gb de ram... si la máquina tiene carga, hasta el infinito...
La ponderación de memoria establece las prioridades de consumo entre distintas máquinas virtuales.
Imaginamos una situación en la que tenemos una máquina con 2gb asignados para el inicio, gestión de memoria dinámica configurada entre 1gb y 8gb. Una configuración típica para garantizar que la máquina arranca "bien", pero que podemos aprovechar momentos de poca actividad ( menos consumo de 2gb) mediante la memoria dinámica. Trabajando con nuestro sistema, esa máquina virtual se consolida en un 1gb de consumo. Tenemos más máquinas virtuales funcionando en el servidor que consumen el 100% de los recursos restantes. Si reiniciamos la máquina virtual, que estaba consumiendo 1gb, pero que necesita 2gb para arrancar, pero el servidor no tiene más memoria, que pasaría?. Hyper-V Smart Paging usará memoria en disco swap para ofrecer el 1gb necesario para el arranque de esa máquina. Esta será la UNICA vez que Hyper-V usará lo que se denomina OverCommit, manejar más memoria ram en las máquinas virtuales que la instalada físicamente. De esta manera reducimos el uso del Swap a mínimos.
Por hoy creo que es suficiente. En el siguiente episodio entraremos en detalle en estos mismos conceptos pero en el mundo Vmware.
Como siempre, espero que os guste y gracias por leerme !!!