Memoria en Maquinas Virtuales

De Departamento de Informatica
Saltar a: navegación, buscar

Las maquinas virtuales, son un tipo de virtualización, en donde a partir de recursos físicos, se pueden crear uno o mas recursos virtuales, estos recursos virtuales para un usuario no cambia, es decir, para el usuario es una copia exacta. La virtualización tiene varios retos para un rendimiento aceptables minimizando la sobrecarga u 'overhead'. (Para mayor información podemos visitar la sección de Máquinas Virtuales).

El sistema operativo es quien administra recursos para que un sistema en particular funcione bien, pero la gestión de recursos para sistemas en los cuales se trabaja a gran escala y el numero de usuarios y la diversidad de aplicaciones va en aumento es complicada y ademas hay que considerar otros aspectos como por ejemplo cuando los recursos se saturan y los usuarios no cooperan, entre otros. Una buena solución a aquello es la virtualización de recursos, dentro de estos recursos tenemos a la memoria, que es la que nos centraremos.

Ejemplo: En Cloud computing se utiliza maquinas virtuales en algunos de sus servicios y es vital la administración de memoria en sistemas como estos.

Las Maquinas virtuales necesitarán suficiente memoria como para ejecutar normalmente el sistema operativo huesped y para poder correr los procesos que se deseen, la memoria es tan importante para la maquina virtual como para cualquier equipo físico. Por lo general la memoria asignada a las maquinas virtuales no debe superar a la memoria real del host.

Contenido

Memoria "independiente"

La memoria de cada máquina virtual, a pesar incluso si comparte HW con otras máquinas virtuales, es "independiente" de las otras, esto es para proteger la integridad de las máquinas, lo cual requiere un gran trabajo, pues muchas veces todas ellas comparte la misma RAM y el mismo HDD, este esfuerzo es realizado por la VMM (Virtual Machine Monitor), esto nos permite tener por ejemplo un solo servidor para mantener servicios que obligatoriamente deben ser independientes, ya que manejan información crítica, produciendo ademas un notorio ahorro de energía, costo de HW y espacio fisico.

Esquema de XEN, ejemplo de VMM

Algunas consideraciones

  • Podemos crear y virtualizar varias máquinas virtuales en un mismo sistema físico, tenemos que separar y asignar recursos de una muy buena manera. Es necesario un nivel de virtualización de la memoria para lograr un excelente desempeño
  • Hay que destacar que la memoria de cada maquina virtual, en suma no puede superar el tamaño de la memoria física que exista, ya que al referirnos al termino memoria virtual, lo que queremos decir es que para la maquina virtual esa es la memoria existente, pero para el host, es solo una "partición virtual de memoria", esto significa que el host cede una parte de su memoria para que la maquina virtual trabaje y maneje sus procesos, pero también hay que considerar el tipo de maquina virtual, ya que la JVM (java virtual machine), "sabe" que se ejecuta en un host, y por tanto mediante llamadas a sistema pide y libera recursos dinámicamente a medida que se crean o que ya no se necesiten objetos por ejemplo, por el contrario, un S.O virtualizado en un host, no "sabe" que este siendo virtualizado, para el los recursos virtuales que le entrego él host son recursos físicos.

.

Virtualización

La virtualización simula la interfaz de un objeto físico por cualquiera de estos tres medios:

  1. Multiplexación: crea varios objetos virtuales de una instancia de un objeto físico. Por ejemplo, un procesador se multiplexa en un número de procesos o hebras.
  2. Agregación: crea un objeto virtual de múltiples objetos físicos. Por ejemplo, un número de discos físicos se agregan en un disco RAID.
  3. Emulación: se construye un objeto virtual a partir de un objeto físico. Ejemplo, un disco físico emula una memoria de acceso aleatorio.

También se pueden aplicar la Multiplexación y la emulación en paralelo. Las ventajas de la virtualización es que abstrae los recursos y simplifica su uso, aísla a los usuarios una de la otra, y soporta la replicación, aumentando indirectamente la elasticidad del sistema. La virtualización es un aspecto crítico en lo que respecta al "cloud computing", es igualmente importante para los proveedores y consumidores de los "cloud services", y desempeña un papel importante para

  1. Sistemas de seguridad, ya que permite el aislamiento de los servicios que se ejecutan en el mismo hardware.
  2. Rendimiento y fiabilidad, ya que permite a las aplicaciones migrar de una plataforma a otra
  3. Desarrollo y gestión de los servicios ofrecidos por un proveedor.
  4. Rendimiento aislado.

La virtualización ha sido utilizada con éxito desde finales de 1950: una memoria virtual se implemento por primera vez en el equipo Atlas de la Universidad de Manchester, en el Reino Unido, en 1959. En el contexto del "cloud computing" un Monitor de máquina virtual se ejecuta sobre hardware físico y lo exporta a un nivel abstracto de hardware a mas sistemas operativos huéspedes. El sistema operativo huésped interactúa con el hardware virtual de la misma manera como lo haría con el hardware físico, pero bajo la mirada de la VMM que captura todas las operaciones privilegiadas y actúa como mediador en las interacciones del sistema operativo huésped. Un VMM puede controlar operaciones de Entrada/Salida en dos discos virtuales implementando como dos conjuntos diferentes de las pistas de un disco físico. Se pueden añadir nuevos servicios sin la necesidad de modificar un sistema operativo. En general la comodidad para el usuario que le da una máquina virtual es mucho mas significativa que un sistema operativo tradicional. Sin embargo el coste de hardware de una máquina virtual es mayor que el coste de un sistema que ejecuta un sistema operativo tradicional porque el hardware físico es compartido entre un conjunto de SO huéspedes, por ende estos son típicamente configurados con procesadores más rápidos y/o multi-core, discos mas grandes, e interfaces de red adicionales en comparación con un SO tradicional.

Virtualización y paravirtualización

En 1974, Gerald J. Popek y Robert P. Goldberg dieron una serie de condiciones suficientes para la arquitectura de un computador para soportar la virtualización y permitir operar eficientemente una VMM:

  • Un programa que se ejecuta bajo la VMM debe exhibir un comportamiento esencialmente idéntico cuando se ejecuta en la máquina directa. El VMM debe tener el control completo de los recursos virtualizados.
  • Una fracción significativa de instrucciones de máquina debe ser ejecutada sin la intervención de la VMM.

Otra forma de identificar una arquitectura adecuada para una máquina virtual es distinguir dos clases de instrucciones de la máquinas, las que requieren precauciones especiales en tiempos de ejecución y las que no (sensibles y no sensibles respectivamente). Entre las instrucciones sensibles tenemos por ejemplo:

  • Control sensible: son instrucciones que intentan cambiar ya sea la asignación de memoria, o el modo privilegiado de la VM.
  • Modo sensible: son instrucciones cuyo comportamiento es diferente en modo privilegiado.

Las condiciones para la virtualización eficaz puede basarse en la clasificación de instrucciones de la máquina: una VMM para un equipo de tercera generación o posterior puede ser construido si el conjunto de instrucciones confidenciales es un subconjunto de instrucciones privilegiadas de esa máquina. Para manejar instrucciones no virtualizables se pueden recurrir a estas dos estrategias:

  • Traducción binaria: El VMM supervisa la ejecución de los sistemas operativos huéspedes; instrucciones no virtualizables ejecutadas por un SO huésped se sustituyen con otras instrucciones.

Paravirtualización: El sistema operativo huésped se modifica para utilizar únicas instrucciones que pueden ser virtualizadas. Entonces hay dos enfoques básicos para la virtualización del procesador: la virtualización completa, cuando cada VM se ejecuta en una copia exacta del hardware real, y la virtualización de una máquina virtual cuando se ejecuta una copia ligeramente modificada del hardware real. Por lo general la paravirtualización se utiliza con mayor frecuencia por:

  1. Algunos aspectos del hardware no pueden ser virtualizados
  2. Para mejorar el rendimiento
  3. Para presentar una interfaz mas sencilla
Virtualización vs Paravirtualización

VMware VMM son ejemplos de virtualización completa. Intel hasta hace poco ha realizado modificaciones a Xen para soportar Windows sin tener que modificarlo. Denali es un ejemplo de paravirtualización. La virtualización completa requiera una arquitectura virtualizable, el hardware esta totalmente expuesto para el sistema operativo huésped que se ejecuta sin cambios y eso asegura que el modo de ejecución sea eficiente. Por otro lado, la paravirtualización se hace porque algunas arquitecturas, tales como x86 no son fácilmente virtualizables. Esta requiere que el sistema operativo huésped se pueda modificar para ejecutarse bajo la VMM; también el código del sistema operativo invitado debe ser portado por un hardware unico. Sistemas como VMware Ex Server soportan una virtualización completa sobre arquitecturas x86. La virtualización de la MMU (Memory Managment Unit) y el hecho de que instrucciones privilegiadas ejecutadas por el So invitado fallen hace plantear algunos desafíos, por ejemplo, hacer frente al problema de que se pueden insertar trampas sobre las instrucciones privilegiadas desde un SO invitado. El sistema también debe mantener las estructuras de control del sistemas, tales como tablas de páginas, y atrapar todos los eventos que afectan el estado de estas estructuras de control; la sobrecarga de muchas operaciones es sustancial. El rendimiento de las aplicaciones en una VM es crítico, generalmente la virtualización añade un cierto nivel de sobrecarga que afecta negativamente al rendimiento, aplicándose la política llamada aislamiento de cache. La memoria caché generalmente no se particiona equitativamente entre los procesos que están corriendo bajo un SO clásico: un proceso puede utilizar el espacio de caché mejor que otro. Por ejemplo, en el caso de los procesos writte-intensive y read-intensive, el caché puede ser agresivamente llenado por el primero. Bajo la política de aislamiento de la caché, este es dividido entre las máquinas virtuales y es beneficioso para ejecutar cargas de trabajo que compiten por el caché en dos máquinas virtuales diferentes.

Hypervisor o VMM

Esquema Virtual Machine Monitor

¿Qué es VMM?

Los Hypervisor o Monitores de maquinas virtuales (VMM) es el Software asegura las particiones de los recursos asignados en una o mas maquinas virtuales (VM), es decir, la diferencia del sistema operativo Huésped con el Host, es que el Huésped se ejecuta bajo el control del monitor de la maquina virtual y el Host directamente en el Hardware. Hay que notar además que la VMM se ejecuta en modo Kernel y el S.O Huésped en modo usuario. Como podemos tener mas de una VM dentro de un sistema, la VMM también debe encargarse de aislar estos sistemas de los otros y con eso debe controlar la seguridad, es decir la VMM controla como los sistemas operativos invitados utilizan los recursos de Hardware.

Relación con memoria

La VMM, garantiza el principio de seguridad y encapsulación (aislamiento entre varias maquinas virtuales), y toma las decisiones correctas para que no baje el rendimiento. En cuanto a memoria la VMM puede tomar copias de las paginas de la VM desde la memoria real y las lleva al disco y con esto deja memoria real disponible para la por ejemplo la paginación de otras maquinas virtuales.

El VMM se encarga de virtualizar la CPU y la Memoria (dependiendo del tipo de virtualización). El VMM tiene una tabla de paginas 'sombra' para cada sistema operativo huésped, en esta tabla de páginas sombra se guarda todos los cambios realizados por el sistema operativo huésped, esta tabla de 'sombra' apunta a la tabla de página actual del sistema y es usado por la Memory Management Unit (MMU), para la traducción de direcciones dinámicas.


Implicancias Virtualización memoria

La virtualización de memoria cuando se usan maquinas virtuales es algo muy importante para el rendimiento de las VM. La VMM tiene varias técnicas para lograr este objetivo. Los sistemas de 'VMware' evitan que se creen duplicaciones de paginas entre diferentes maquinas virtuales, es decir, mantener una sola copia de de una pagina compartida usando el método de 'copy-on-write', hay otros sistemas que no permiten compartir páginas, aislando las máquinas virtuales. Entonces la VMM puede controlar la gestión de la memoria y si lo hace puede decidir que páginas modificar. Algunos servidores que usan esta técnica para intercambiar páginas para el uso de procesos muy pesados y por tanto se realiza swapping de otros procesos que se estén ejecutando dentro de la maquina virtual y finalmente se induce a que el proceso mas pesado ceda el control de los 'free page frames'.

Tamaños de Memorias en MV

Los tamaños de memoria RAM y/o disco duro varian según el tipo de virtualización que se realiza, ademas de cuanta memoria puede manejar la maquina virtual, pero en general, los tamaños maximos son 64[GB] de RAM y unos 2[TB] de disco duro, manejar tamaños mayores a estos resulta complicado por la cantidad de bites necesarios para referenciar la memoria.

MEB Balanceador de memoria dinámica para maquinas virtuales

Una motivación clave para la la virtualización, es mejorar la utilización de recursos de hardware, manteniendo una calidad del servicio. Esto se logra con una gestión eficiente de los recursos, hay que tener en cuenta que la mayoría de los recursos físicos tales como el núcleo del procesador, dispositivos E/S, se comparten con las maquinas virtuales y se pueden programar de tal manera de que se utilicen mediante prioridades. Pero para la asignación de memoria es mucho mas difícil, esto es puesto que distintas aplicaciones usan de variadas forma la memoria, incluso 'asignándose' durante la ejecución. Por lo tanto se necesita asignar/ajustar dinámicamente la memoria para cada maquina virtual. Es en donde aparece el concepto de MEB (traducido al español como 'Balanceador de memoria') que controla dinámicamente el uso de la memoria, además utiliza un modelo de predicción para el uso y necesidades de esta memoria para luego reasignar esta memoria al host.

Referencias

  • Cloud Computing: Dan C. Marinescu, "Theory and Practice" (November 13, 2012).
  • Silberschatz, Abraham (2009) Operating Systems Concepts (Eight Edition). John Wiley & Sons
  • Weiming Zhao & Zhenlin Wang, "Dynamic Memory Balancing for Virtual Machines"

Enlaces externos

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas