Virtualización


1.1. Introducción a las Máquinas Virtuales

Ventajas

  • Permite mantener estabilidad, confiabilidad y disponibilidad de los servicios del centro
  • Si un servidor cae, no falla todo el sistema
  • Fortalece la seguridad del sistema disminuyendo su vulnerabilidad, así en caso de un ataque, solo el servidor atacado se verá comprometido

Inconvenientes

  • Altos costos de mantenimiento (hardware duplicado)
  • Baja eficiencia en uso de recursos (CPU, discos, memoria, etc)
  • El hardware evoluciona rápidamente y muchas veces se desea mantener en funcionamiento software diseñado sobre arquitecturas actualmente obsoletas
  • En un equipo de desarrollo se desea probar software sobre un conjunto importante de sistemas operativos (y sus diferentes versiones)

Solución: Virtualización

  • Permite que un único equipo (hardware) soporte N máquinas virtuales (VM, Virtual Machine)
  • Ejecuta su propio SO
  • Maneja los recursos del sistema como si fuera una máquina independiente

Inicios de la Virtualización

  • Introducida en 1972 por IBM en el sistema VM/370
  •  Sistema Operativo: CMS (Conversational Monitor System)
  •  Cada CMS/App ejecuta sobre una máquina 370 virtual
  •  Cuando CMS intenta utilizar una instrucción privilegiada, ésta es atrapada por el Virtual Machine Monitor (VMM) i.e. VM/370
La imagen tiene un atributo ALT vacío; su nombre de archivo es 93OkvbQf7rbZllCs25XOzE0K2uvHozC-jXwaD6jodwUf0GsY5h_wIu1nTARk3djDTO_yPWLgWb1OCSK4ZA4hSR3oxYp1Cqm6Wg_pL8MilmDXMc4fSqNaY8icQFVV1qqgRISuMQpk0h4

1.2. Conceptos básicos

¿Qué es la virtualización?

  • Presente en todos los ámbitos de un sistema
    • Proceso virtualiza procesador
    • Mapa de memoria de proceso virtualiza memoria del sistema
    • Fichero virtualiza disco
    • Socket virtualiza red

  • Máquina virtual de sistema (VM)
    • Crea entorno de ejecución con mismo nivel de abstracción
    • En copia del hardware real
  • Virtual Machine Monitor (VMM) (aka Hipervisor)
    • Crea y gestiona las máquinas virtuales

¿Para qué sirve la virtualización?

  • Permite que un único equipo (hardware) soporte N máquinas virtuales (VM, Virtual Machine). Ahorro energético
  •  Cada máquina virtual es independiente y ejecuta su propio SO
  • Permite la coexistencia de varios SO  y facilita su administración
  •  Maneja los recursos del sistema como si fuera una máquina independiente
  •  Permite migrar datos fácilmente de un equipo a otro (ej: balanceo de carga)
  •  Permite ejecutar aplicaciones heredadas (legacy) en sistemas operativos que no funcionan en el hardware actual.
  • Uno de los pilares del Cloud computing

Requerimientos para la Virtualización

  • Fidelidad: SW mismo comportamiento sobre VM que en real, exceptuando aspectos vinculados con el tiempo
  • Seguridad: VMM tiene control total de recursos virtualizados
  • Rendimiento: mayoría de instrucciones ejecutadas por la máquina real
  • MV: duplicado eficiente y aislado de una máquina real
  • Técnica de nuevo en auge actualmente
    • Capacidad de procesamiento actual palia ineficiencia de MV
    • Procesadores incluyen soporte para MV
  • Una máquina virtualizada debe comportarse igual que una máquina real
  •  Debe tener dos modos: kernel y usuario
  •  Instrucciones sensibles:
    • Operaciones E/S
    • Configuración del administrador de memoria (Memory Management Unit MMU)
    • Administración de interrupciones
  •  Las instrucciones sensibles deben ejecutarse en modo kernel
  • Instrucciones privilegiadas: disparan una interrupción por excepción (trap ) si son ejecutadas en modo usuario

Nota

Un sistema operativo está diseñado para tener el control total del sistema. Pero cuando un sistema operativo se ejecuta como una máquina virtual en un hipervisor, algunas de sus instrucciones pueden entrar en conflicto con el sistema operativo del host. Entonces el hipervisor emula el efecto de esa instrucción o acción específica sin llevarla a cabo. De esta manera, el sistema operativo del host no se ve afectado por las acciones del huésped. Esto se llama atrapa (trap) y emula


Para que un sistema pueda soportar virtualización las instrucciones sensibles deben ser un subconjunto de las instrucciones privilegiadas

  • Intel 386 (486, Pentium, etc hasta 2005) NO cumple dicha propiedad
    • Se ignoran instrucciones sensibles en modo usuario (La instrucción POPF (Pop Flags) no modifica bit de habilitación de interrupciones)
    • Hay instrucciones que pueden leer el estado sensible en modo usuario sin producir una excepción (trap).
    • Ej: El SO virtualizado puede detectar que está en realidad en modo usuario
  • Intel con tecnología VT (Virtualization Technology) agrega soporte para generar trap al ejecutar instrucciones sensibles.

1.3. Tipos de Máquinas Virtuales

El término virtualización comprende la abstracción de los recursos de una máquina física con el objetivo de simular varias máquinas “lógicas” o virtuales. Este concepto se puede extender no sólo a máquinas físicas, y es aplicado en multitud de ámbitos tecnológicos: almacenamiento, networking, aplicaciones, etc.

Recordemos que un elemento fundamental es el hypervisor o virtual machine monitor VMM, que es la plataforma que se encarga de crear la capa de abstracción (pudiendo utilizar diferentes modelos de virtualización) que comunica la máquina física (también denominada anfitrión o guest) con las máquinas virtuales.

VIRTUALIZACIÓN A NIVEL DE SISTEMA OPERATIVO

Se realiza la virtualización mediante contenedores sobre el mismo sistema operativo de la máquina física, sin introducir capa intermedia de virtualización, haciendo que simplemente se aíslen dentro del sistema operativo. Esto limita el uso solo al mismo sistema operativo, por ejemplo si pensamos en Linux se podría virtualizar todas las distribuciones de Linux en el S.O, pero no Windows.

Ejemplos: OpenVZ, Docker, Virtuozzo, Chroot Jails, LXC, Snaps*, etc.

Virtualización a nivel del kernel

Este tipo de virtualización convierte el Kernel de Linux en el Hypervisor, permitiendo ejecutar máquinas virtuales con independencia del sistema operativo sin modificar, que se almacena en una imagen de disco. Cada máquina virtual tiene su propio hardware virtualizado: tarjetas de red, discos duros, gráfica, etc. Aunque también se puede hacer passthrough de dispositivos.

Emulación completa

En este caso la aplicación realiza una réplica una arquitectura de hardware al completo (procesador, juego de instrucciones, hardware, etc). Esto permite que sobre la emulación se pueda ejecutar tanto sistemas operativos como aplicaciones distintos al que ejecuta la máquina física. Un ejemplo es el emulador M.A.M.E, que emula el hardware utilizado en la ejecución de los juegos.

  • Intérprete emula juego de instrucciones del procesador
  • Procesador emulado puede ser distinto que real 
  • No cumple 3ª condición de P&G (rendimiento) • Ejemplo: Bochs emula x86 mediante interpretación 

1.4. Tipos de Hipervisores

Recordemos que un elemento fundamental es el hypervisor o virtual machine monitor VMM, que es la plataforma que se encarga de crear la capa de abstracción (pudiendo utilizar diferentes modelos de virtualización) que comunica la máquina física (también denominada anfitrión o guest) con las máquinas virtuales.

Se trata de una aplicación (VirtualBox, VMWare Player) que realiza la virtualización sin usar ninguna capa de virtualización adicional. Se puede emular el hardware en la máquina virtual o hacer passthrough I/O (es el uso directo de dispositivos hardware en la máquina virtual). Existen dos tipos de VMM:

Hipervisores de tipo 1 (nativa o bare-metal)

  • Cada VM se ejecuta como un proceso de usuario en modo usuario  Modo kernel virtual
  •  Modo usuario virtual
  • VMware ESX/ESXi, Citrix XenServer, MS-Hyper-V, …
  • Normalmente implementado mediante módulo software En algunos sistemas por HW y firmware (LPAR de IBM)

Hipervisores de tipo 2 (alojada)

 

  • El hipervisor de tipo 2 ejecuta en modo usuario como un proceso más del SO anfitrión
  • Permite la virtualización en arquitecturas que no cumplen con las hipótesis de Popek & Goldberg
  • Aplican traducción binaria
    •  El hipervisor analiza el flujo de ejecución (bloques de código) y “traduce” las instrucciones sensibles por llamadas al hipervisor.
    •  Los bloques traducidos son ejecutados por la CPU directamente.
  • Sobre cada MV se ejecuta un SO alojado (posiblemente distinto)
  • VMware Workstation, VMware Player, VirtualBox, …
  • Hipervisor invierte la abstracción de SO anfitrión
    • Por ejemplo. Interrupción real  Señal UNIX Interrupción MV
    • Todas las instrucciones sensibles se sustituyen mediante llamadas a procedimientos que emulan estas instrucciones.

 

 

  •  Cada bloque de código es traducido y almacenado en memoria cache
    • Un único punto de entrada por bloque
    • Sin saltos ni llamadas ni interrupciones
    • Cada bloque termina en un salto, llamada o interrupción
    •  Se inspecciona el bloque y se traducen las instrucciones sensibles por llamadas al hipervisor y la instrucción final (salto, llamada o interrupción) por llamada al hipervisor

Comparación de performance de hipervisores de tipo 1 vs tipo 2

  •  Tipo 1: todas las instrucciones sensibles generan una trap que debe atender el hipervisor (arruina “localidad”, caché de CPU, TLBs, predicción de bifurcación, etc)
  •  Tipo 2: todo el flujo de instrucciones debe ser traducido (costo inicial alto) pero luego quedan en cache y no se produce cambio de contexto al ejecutar instrucción sensible
  • Hipervisores de tipo 1 también pueden realizar traducción binaria

Técnicas de implementación de MV de sistema

  • Emulación completa 
  • Trap&emulate (implementación “clásica”) 
  • Traducción binaria 
  • Paravirtualización 
  • Soporte hardware

NOTA: Pueden ser técnicas complementarias

Trap&emulate (implementación “clásica”)

  • Para mantener control y aislamiento entre MVs, SO alojado:
    • No puede ejecutar instrucciones privilegiadas (p.e. inhibir interrup.)
    • No debe acceder directamente a ciertas direcciones (P.e. modificar una entrada de una tabla de páginas) 
  • Tres modos ejecución: usuario, privilegiado virtual, privilegiado real 
  • Solución: SO alojado ejecuta con UCP en modo no privilegiado
    • Si inst. privilegiada o acceso a dirección no permitida → trap
      • VMM toma control y emula comportamiento de instrucción
    • Si procesador con sólo dos modos:
      • SO alojado convive en modo usuario con apps pero protegido
    • Si varios modos, SO alojado usa modo intermedio
      • Nivel(Hipervisor) > Nivel(SO alojado) > Nivel(Aplicaciones)  
      • Pentium: VMM anillo 0, SO alojado anillo 1, Apps anillo 3 
  • Sobrecarga por procesamiento de traps (excepciones)

Virtualización del x86

  • Popek & Goldberg (1974): distingue entre tipos de instrucciones:
    • Privilegiadas: causan trap si ejecutadas modo no privilegiado
    • Sensibles:
      • de control: cambian configuración de recursos del sistema  
      • de comportamiento: dependen de configuración de recursos del sistema 
    • Máquina virtualizable: si son sensibles son un subconjunto de privilegiadas  
  • Pentium no lo cumple
    • Ej. POPF se comporta diferente en modo usuario y privilegiado
      • No trap: sólo diferente comportamiento  
    • Además TLB hardware y sin información de proceso
      • Dificulta la virtualización de la memoria 
  • ¿Es imposible virtualizar Pentium?
    • Traducción binaria vs. Paravirtualización

Traducción binaria

  • trap&translate&emulate (VMware)
  • Traductor dinámico sustituye instrucciones sensibles por traps
  • Cumple 3ª condición P&G (eficiencia):
    • Traducción muy sofisticada y eficiente
    • Similar a compiladores JIT
    • Sólo para código del SO alojado
  • Sobrecarga por procesamiento de traps
    • Traducción inteligente puede evitar algunos
  • Resuelve el problema de virtualizar x86 sin requerir modificar el SO alojado

Paravirtualización

Se basa en el mismo principio que la virtualización nativa con la diferencia que no incluye código de emulación de hardware e introduce modificaciones en los sistemas operativos invitados (que deben ser modificables) para el paso de instrucciones privilegiadas. Esto mejora significativamente el rendimiento de la virtualización

  • Hipervisores de tipo 1 y tipo 2 funcionan con SO invitados sin modificar
  • Si permitimos que se modifique el SO invitado para evitar las instrucciones sensibles (llamando, en cambio, al hipervisor) obtenemos paravirtualización
  • El SO invitado realiza llamadas al hipervisor en vez de ejecutar instrucciones sensibles a través de una API, ej VMI (Virtual Machine Interface). Ejemplo: VMI Linux
  • Si el hipervisor solo soporta SO invitados paravirtualizados estamos ante un microkernel

  • “Trampas”: se incomple con 1ª condición P&G (fidelidad) (Xen):
    • Se modifica SO alojado para adaptarlo a VMM
  • Solución más eficiente (disminuye nº de traps)
  • Pero requiere cambios en el SO
    • En algunos casos (Windows) es imposible
    • Y aunque sea posible, requiere incluirlos en cada versión del SO
  • Además cambios son específicos de cada VMM

Soporte de hardware

  • Procesadores actuales ofrecen soporte para virtualización
    • AMD-V, Intel-VT
    • Algunas características:
      • Instrucciones sensibles conflictivas >
      • Nuevos modos de ejecución del procesador
        • 4 anillos para modo alojado y 4 para modo nativo
        • SO alojado en anillo 0 como en sistema no virtualizado
      • Redirección de interrupciones
      • Soporte de tablas de páginas anidadas
      • Soporte hardware de estructuras de control para las VMs
      • IOMMU – La unidad de gestión de memoria de entrada y salida (input–output memory management unit, acrónimo IOMMU), permite que una máquina virtual pueda tener acceso directo y exclusivo a ciertos dispositivos del sistema
  • Objetivo: eliminar traducción binaria o paravirtualización
    • Aunque podrían usarse puntualmente para optimizar


 

 

1.5. Virtualización y gestión de recursos virtuales

Virtualización de la memoria

  • Manejo de memoria virtual
  • Tabla de páginas (multinivel) en VM
  • Debe mapearse a tablas de páginas del hardware real
  • Ej: SO invitado A crea tabla de páginas con la siguiente asignación
    5 -> 10, 8 -> 11, 2->12
  • SO invitado B ahora crea tabla de páginas con la siguiente asignación
    4 -> 10, 5 -> 11, 6->12
  • El VMM (hipervisor) debe mantener una tabla de páginas oculta (shadow) porque no puede darle los mismos marcos a dos VMs.
  • La creación de la tabla de páginas es una acción “sensible” (modifica MMU que genera trap), pero la posterior actualización de la tabla no es sensible. Posible solución: marcar las páginas de tabla como de solo lectura
  • Caso SO paravirtualizado:
    • Se cambian las instrucciones de manejo de MMU por llamadas al hipervisor
    • Las actualizaciones sobre la tabla de páginas se puede hacer en modo batch, llamando al hipervisor luego que el SO invitado ha realizado todos los cambios.

Virtualización de las E/S

  • Cada VM piensa que tiene todo el hardware disponible para si
    • Ej: discos, impresoras etc
  • Las operaciones de E/S son sensibles por lo que son tratadas por el hipervisor
  • Para algunos recursos es preferible virtualizar el dispositivo
  • Discos representados como un archivo en el FS del SO anfitrión
    • Permite utilizar nuevo hardware sobre SO que no saben manejarlo
    • DMA utiliza direcciones absolutas (físicas), por lo que deben ser traducidas por el hipervisor antes de efectivisarse el DMA.
  • MMU de E/S virtualizada

  • Otro método es utilizar una de las máquinas virtuales para que refleje la E/S de todas las VM
    • A esta VM a veces se le llama dominio 0
    • Mayor facilidad para este esquema en sistemas paravirtualizados
    • Hipervisores de tipo 2 pueden utilizar los drivers del SO anfitrión
    • Hipervisores de tipo 1 pueden utilizar los drivers del dominio 0


 

 

Referencias bibliográficas

Brown, Gustavo. «Sistemas Operativos», 2013, 20. https://www.fing.edu.uy/tecnoinf/mvd/cursos/so/material/teo/so10-virtualizacion.pdf

Gerald J. Popek and Robert P. Goldberg. 1973. Formal requirements for virtualizable third generation architectures. SIGOPS Oper. Syst. Rev. 7, 4 (January 1973), 121. DOI:https://doi.org/10.1145/957195.808061

Diseña un sitio como este con WordPress.com
Comenzar