Virtualización basada en Linux frente a Hypervisor

Leyendo el blog de Rik Van Riel he llegado a una página del wiki de kernelnewbies muy buena, que comenta las ventajas y desventajas de cada solución de virtualización.

Dado que el wiki está bajo una licencia Creative Commons by 2.5, me permito el lujo de traduciroslo para que lo disfrutéis:

Hypervisor Vs LinuxBased

Algunas tecnologías de virtualización están basadas en hypervisor (por ejemplo Xen y L4Linux), mientras que otras usan Linux como base para la plataforma virtualizada (por ejemplo KVM). Antes de responder a la cuestión obvia -¿Cuál es mejor, hypervisor o Linux based?- he aquí una pequeña explicación de la diferencia.

Cómo funcionan las cosas

En un sistema GNU/Linux normal -no virtualizado- el núcleo controla el hardware y todos los procesos que se ejecutan en el sistema.

En la virtualización basada en Linux, las máquinas virtuales se gestionan de una manera muy similar a los procesos normales del sistema. Si se desea, el núcleo puede ser modificado para tratarlas de forma ligeramente diferente al resto de procesos, dándoles por ejemplo una prioridad diferente en el planificador o manteníendolas siempre en memoria, pero básicamente podría decirse que tienen bastante similitud con los procesos.

Los sistemas basados en Hypervisor, como Xen, no dejan a Linux el total control sobre el hardware. Es un pequeño fragmento de software, el hypervisor, el que controla ciertas partes del sistema:

  • Planificación del tiempo de CPU.
  • Protección de memoria entre máquinas virtuales.
  • Encaminamiento de interrupciones.
  • Mantenimiento del tiempo.
  • Paso de mensajes entre máquinas virtuales.

En el caso de Xen, tipicamente una de las máquinas virtuales es quien se hace cargo del resto de cuestiones relacionadas con el hardware, tales como drivers para discos, tarjetas de red, de video, etc. El resto de máquinas virtuales se comunican con esa primera máquina virtual privilegiada (domain 0) para manipular sus dispositivos virtuales. Un hypervisor puede entenderse como una especie de microkernel.

Hay un buen número de ventajas y desventajas para cada uno de los enfoques.

Ventajas de Hypervisor

  • El sistema está controlado por un pequeño fragmento de software, lo suficientemente pequeño para ser auditado por cuestiones de seguridad..
    • Refutación: en la práctica, el código que vive en domain 0 necesita ser auditado también, así que el software no es tan pequeño finalmente.
  • El hypervisor utiliza un espacio de direcciones virtuales pequeño, detalle importante en sistemas de 32 bits.
  • Se puede ejecutar exactamente el mismo núcleo en el Sistema Operativo hyesped (domain 0) y en los Sistemas Operativos invitados.
    • Refutación: Esta ventaja está desapareciendo con coopvirt o la infraestructura paravirt ops.
  • El mismo hypervisor puede ser usado para múltiples Sistemas Operativos.
    • Por ejemplo, usar Linux o FreeBSD como SO huesped, con el mismo software de virtualización.
    • Refutación: con VMI o un interfaz coopvirt limpio, esto también se puede hacer sin un hypervisor.

Ventajas de los sistemas Linux based

  • El software de virtualización puede ser más pequeño, porque comparte más funcionalidades con el núcleo de Linux.
  • Funcionalidades del SO de muy bajo nivel como kexec+kdump simplemente funcionan, sin necesitar soporte en el hypervisor.
    • Esto incluye cosas como el escalado de frecuencia en la CPU, o suspender/recuperar en los portátiles, que actualmente no funcionan en Xen.
  • Lo mismo ocurre para otro soporte de hardware que necesitaría soporte de hypervisor como pmtimer o algunas funcionalidades de ACPI.
  • Ubicuidad: una vez que la tecnología de virtualización basada en Linux esté en el núcleo principal (kernel.org), podrá ser habilitada de forma muy sencilla por las distribuciones de Linux.

Entonces, ¿cuál es el mejor?

Decidir cuál de los enfoques es mejor depende totalmente en cuáles son tus objetivos. Para un mantenedor de Linux (hola Linus!) es mucho más sencillo si el software es pequeño, simple y enteramente dentro del núcleo. Los interfaces a un hypervisor externo implican una interdependencia extra con otro proyecto.

Para usuarios finales la funcionalidad será probablemente mucho más importante que la tecnología subyacente. Será útil en la medida que la tecnología de virtualización sea más eficiente, fácil de manejar y disponible por defecto en el sistema. Los usuarios finales se interesarán en la tabla comparativa de virtualización de Linux.

Por último, cualquier tecnología que entre dentro del núcleo principal (kernel.org) y satisfaga todas las necesidades técnicas del usuario será la que consiga ser utilizada. La disponibilidad práctica triunfa siempre sobre las ventjaas teóricas.

tag Tags: , , , , ,