Dynamic Memory. Introducción y Recursos

Hola

Como ya sabréis todos los interesados en el mundo de la virtualización, el SP1 de Windows Server 2008 R2 y Windows 7 introducirá novedades en funcionalidades clave para la virtualización de servidores y escritorios. En este post vamos a hacer una introducción a la Memoria Dinámica en Hyper-V, y facilitar algunos enlaces indispensables para comprender su utilidad y funcionamiento.

Durante algunos meses, este pantallazo había sido fuente de diversos rumores tanto interna como externamente:

image

La tradicional asignación estática de memoria de las máquinas virtuales de Hyper-V, con la que durante el arranque de las mismas era directamente consumida y restada de la memoria física disponible, daba paso a la opción de especificar una horquilla de valores mínimo y máximo para cada una de ellas, permitiendo además la definición de un buffer de memoria libre disponible para cada máquina virtual y una prioridad relativa respecto a las demás. La posibilidad de que el rango máximo supere la cantidad de memoria disponible en el host daba pié a la comparación directa con los sistemas de gestión avanzada de la memoria implementados en otros hypervisores, agrupadas bajo el nombre de “Memory Overcommit”

Sin embargo la filosofía y funcionamiento es bastante diferente. Para verlo me vais a permitir que recurra a comentarlos sobre una magnifica serie de cinco posts publicados por nuestro compañero Jeff Woolsey en el blog del grupo de producto, donde estoy seguro que además de encontrar mucha de la información que buscáis disfrutareis de su lectura.

  1. Dinámica Memory Coming To Hyper-V: El anuncio oficial sobre la introducción de Dynamic Memory y Remote FX en el SP1 de Windows Server 2008 R2 y Windows 7. Y la declaración de intenciones con los objetivos de diseño de la funcionalidad de Memoria Dinámica. Aprovechar mejor los recursos de hardware para poder aumentar la densidad de máquinas virtuales con un impacto mínimo, predecible y consistente en el rendimiento del conjunto.
  2. Dynamic Memory Coming to Hyper-V Part 2…: En este post se reflexiona sobre un viejo paradigma del mundo “físico”, que en cierto modo arrastramos y trasladamos a el mundo virtual. ¿Cuanta memoria necesita realmente el conjunto formado por Sistema Operativo y aplicaciones para tener un rendimiento aceptable dentro de los diferentes parámetros que nos podamos marcar?. Realmente esta pregunta es la mejor manera que se me ocurre de introducir la utilidad de esta funcionalidad. Cuando se adquiere un cierto hardware para un uso específico, el dimensionamiento de la memoria debe hacerse a priori, con la base de lo que indique el fabricante, nuestra propia experiencia, o la de las demás. Pero la experiencia dicta que los patrones de uso de la memoria son ciertamente variables con picos y valles. Como veremos, la traducción de la memoria dinámica al mundo físico no sería otra cosa que la capacidad de poder agregar y quitar en caliente fracciones de módulo de memoria, pero basándonos en la información que nos dan herramientas de gestión de la memoria del propio sistema operativo, no en base a los caprichos arbitrarios de nuestro operador imaginario.
  3. Dynamic Memory Coming to Hyper-V Part 3…: Definición de Memory Overcommit y un análisis del funcionamiento de la técnica de Transparent Page Sharing. Como el mismo Jeff anuncia al principio, se ha mirado y remirado, se han analizado pros y contras y se ha decidido no invertir en esa línea al considerarla una especie de vía muerta. En el post se analiza la incidencia de novedades como el uso de paginas de memoria de 2MB (en lugar de 4KB) por parte del hardware y los sistemas operativos y su relación con funcionalidades de los procesadores como SLAT (EPT o NPT/RVI), o como evoluciona el uso de la memoria por parte de los últimos sistemas operativos (SuperFetch, ASLR, etc.)
  4. Dynamic Memory Coming to Hyper-V Part 4: Un complemento al anterior, con la introducción de algunas respuestas a preguntas y comentarios recibidos a raíz del mismo.
  5. Repost: Dynamic Memory Coming to Hyper-V Part : Este post está dedicado a las técnicas de doble paginación, es decir, a la posibilidad de que el Hypervisor resuelva el hecho de haber asignado más memoria de la que hay físicamente disponible mediante su propio esquema de paginación, adicional al que sucede de manera normal a nivel de sistema operativo invitado. La primara parte conforma un excelente resumen del funcionamiento del “Memory Manager” de un sistema operativo para la gestión de la memoria virtual, y su relación con el famoso fichero de paginación o swap. El hecho de que un hypervisor lleva a cabo a su vez este tipo de técnicas con la memoria asignada a una máquina virtual plantea una serie de problemas. Trivializando, en este caso, el hypervisor trata a la VM como un sistema operativo trata a una aplicación, retirando paginas de memoria virtual de la memoria física y enviándolas a un segundo fichero de paginación. Esto tiene un impacto importante en el rendimiento del sistema y además se lleva a cabo de manera descoordinada con la gestión de la memoria que se este llevando a nivel de guest. De nuevo, se analizan las razones por las que Hyper-V no implementa técnicas de doble paginación, de donde se deducen dos cosas. Que la suma de las cantidades de memoria asignadas en un momento dado a cada máquina virtual no puede superar la de la memoria física del host, y que el fichero de paginación que vemos en la partición padre de un host con Hyper-V no es utilizado en absoluto por el hypervisor. Las particiones padre e hijas tendrán cada una de ellas su propio patrón de uso del fichero de paginación, derivado de cómo gestione la memoria virtual el “Memory Manager” del sistema operativo invitado.

Aquí acaba la serie a fecha de hoy y nos quedamos con las ganas de conocer exactamente cómo funciona Dynamic Memory. Jeff promete explicarlo en el siguiente post de la serie, y mientras tanto Ben Armstrong ofrece bastantes detalles en los posts más recientes de su blog. Mientras tanto, aquí están los tres principales recursos técnicos para entender su funcionamiento:

Para cerrar el post de hoy, algunas consideraciones para probarlo con la Beta, recogidas en las guías anteriores, y que dan una idea de su funcionamiento y filosofía.

  • Dynamic Memory requiere que Hyper-V y los kernels de los sistemas operativos invitados trabajen de manera conjunta. Por tanto se necesitan unos Componentes de Integración (enlightments) específicos, que para la Beta del SP1 solo están disponibles para sistemas operativos que soporten de manera nativa la funcionalidad de agregar memoria en caliente (ver Hyper-V Dynamic Memory Evaluation Guide). Para la RTM, estos componentes de integración estarán disponibles para todos los sistemas operativos Microsoft soportados por Hyper-V, independientemente de si soportan o no memory hot-add.
  • Para poder probar la Memoria Dinámica, deberemos aplicar el SP1 a la partición padre de nuestro host con Hyper-V, y acto seguido actualizar los componentes de inegración de las máquinas virtuales, teniendo en cuenta el punto anterior. Como de costumbre, antes de realizar la migración deberemos asegurarnos de no tener snapshots ni saved states en las VMs
  • Las VMs configuradas con Dynamic Memory no podrán correr en un host que no tenga el SP1. Por tanto todos los nodos de los clusters deberán actualizarse
  • Aunque System Center Virtual Machine Manager 2008 R2 puede gestionar hosts con el SP1 aplicado, no podremos administrar desde aquí las nuevas funcionalidades, ni se tendrá en cuenta la memoria dinámica para la colocación inteligente de nuevas VMs, cálculos de capacidad en clusteres, PRO Tips, etc. Como viene siendo habitual, el grupo de producto de SCVMM trabaja con unas semanas de retraso respecto al ciclo de desarrollo de Windows Server e Hyper-V.

Pronto más sobre Dynamic Memory.

Saludos

David Cervigón