4/11/2007

Xen - Paravirtualización

Este articulo consta de tres partes:
  1. Introducción
  2. Paravirtualización
  3. Funcionamiento de Xen



Los usos de la virtualización pueden ser muy variados, desde el simple echo de necesitar ejecutar una aplicación que no existe en tu sistema operativo hasta el testeo de sistemas operativos. Los más importantes usos son los siguientes:


  • Aprovechamiento de servidores: los servidores salvo en casos excepcionales están infrautilizados, con la virtualización se pueden correr varios sobre la misma maquina y así aprovechar mejor las maquinas, reduciendo el espacio ocupado por los servidores y el consumo de energía.

  • Desarrollo: Puedes estar desarrollando una aplicación que deba de ejecutarse en distintas plataformas, como ejemplo se podría mencionar el desarrollo de sistemas operativos o algo mucho mas común, el desarrollo de paginas web sobre Linux y su visualización sobre Internet Explorer.

  • Plataformas obsoletas: a menudo se necesita usar aplicaciones antiguas que solo corren sobre un hardware antiguo, de esta manera se podría migrar esta maquina real a una virtual y dejar de depender del hardware.


Historia de Xen:


Xen fue inicialmente un proyecto de investigación de la Universidad de Cambridge (la primer versión del software fue publicada a fines de 2003). Este proyecto de investigación fue liderado por Ian Pratt, quien luego formó una empresa -junto con otras personas- para dar servicios de valor agregado como soporte, mantenimiento y capacitación sobre Xen en Enero de 2005. Esta empresa es Xensource Inc. y actualmente mantiene Xen (junto con otras empresas y la comunidad), también se dedica a programar aplicaciones adicionales no libres para facilitar el uso, instalación y mantenimiento de Xen.

Dado que Xen está licenciado bajo GPL el código no puede cerrarse, y no es solo Xensource quien mantiene el código, sino que varias empresas importantes como IBM, Sun, HP, Intel, AMD, RedHat, Novell están sumamente involucradas en el desarrollo asignando programadores al mantenimiento de este software.


Paravirtualización:


En los ordenadores normalmente el software mas poderoso es el sistema operativo, ya que controla todos los recursos del CPU, como el uso compartido del mismo entre las aplicaciones, memoria virtual, I/O a dispositivos, entre otras cosas. Estas tareas las puede realizar gracias a que los procesadores modernos soportan varios niveles de privilegios, cuatro exactamente. El sistema operativo, el supervisor, corre en el nivel 0 (más privilegiado) y las aplicaciones en nivel 3 (menos privilegiado).

¿Cómo se adapta Xen a este esquema?, utiliza una técnica llamada “ring deprivileging”, donde el sistema operativo es modificado para poder ejecutarse en nivel 1 dejando el nivel 0 para el Xen, el cual es conocido como Hypervisor. Este mecanismo le permite a Xen tener más poder que el sistema operativo controlando los recursos a los cuales este puede acceder. Este esquema de usos de niveles es lo que se llama “paravirtualización”, termino que existe desde hace ya algunos años.

La modificación que deben sufrir los sistemas operativos para ser “virtualizados” en principio presenta una limitación, ya que esto solo puede realizarse en software abierto (o por el fabricante del software, en el caso del software propietario). Mas adelante veremos que esta limitación esta empezando a desaparecer.

El rendimiento superior de Xen es una de sus características principales, ya que los sistemas virtualizados corren directamente sobre el procesador, sin emulación. Sistemas de virtualización completa como VMware y Virtual PC o Virtual Server de Microsoft utilizan una técnica conocida como “binary translation”, donde las instrucciones privilegiadas son reemplazadas con fragmentos de código que simulan las mismas, esta técnica es muy compleja y provoca grandes perdidas de rendimiento, sobre todo en aplicaciones con un uso intensivo de dispositivos.



Soporte de sistemas operativos:


Actualmente se puede usar tanto como sistema anfitrión o invitado casi cualquier distribución de Linux, destacando las de Novel y RedHat, que han apostado muy fuerte por esta plataforma. También existen “ports” para NetBSD, openSolaris. Con los sistemas propietarios ocurre lo contrario, debido a que se necesita modificar el núcleo para que se ejecute este con un nivel de privilegios distinto, así que ninguno de la familia Windows se puede usar como invitado.

Sin embargo, esta limitación es eliminada con las nuevas tecnologías de virtualización de Intel y AMD, que permiten ejecutar sistemas operativos en nivel del procesador 0 sin necesidad de modificación alguna, dejando un nivel de privilegio especial para el “hypervisor”. Este nivel de privilegio especial se llama “root-mode”, el resto de los componentes corren en “non-root-mode”.


Funciones del hypervisor:


Hasta este momento he mencionado varias veces al hypervisor pero no lo he descrito. Este termino viene de supervisor, que es como se llama al software que maneja las maquinas virtuales en la virtualización completa (VMware Workstation). Así este termino llevado al extremo sería el hypervisor del que hablamos. Se podría describir como un microkernel con las siguientes funciones:

  • 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.

De tal manera el hypervisor se ejecuta por debajo por debajo incluso del sistema operativo anfitrión proporcionando estabilidad, aislamiento entre maquinas y políticas de QoS (Calidad del servicio).Otros hypervisores importantes son:

  • Denali: utiliza la virtualización para proporcionar máquinas virtuales de alto rendimiento en ordenadores x86. La máquina virtual Denali da soporte a Sistemas Operativos mínimamente especializados hacia servicios de Internet. El sistema puede escalar a millares de máquinas virtuales. A diferencia de Xen, Denali no preserva el interfaz binario (ABI), y algunas aplicaciones deben ser recompiladas para que funcionen con las librerías del sistema operativo; en este sentido es similar a Exokernel.

  • VMware Server ESX: Hypervisor de la empresa VMware. Este tiene un funcionamiento y unos usos muy parecidos a Xen.

Paravirtualización VS microKernels:

Tras llegar a este punto es fácil pensar porque en vez de desarrollar un hypervisor, por que no desarrollar un microKernel, sobre el que corran las máquinas virtuales. Teóricamente no hay mucha diferencia, e incluso sería mejor ya que no deberías tener corriendo ningún sistema operativo anfitrión consumiendo recursos del sistema.

La razón de esto es mas bien práctica, si desarrollas un microKernel deberás desarrollar también controladores para la máquina y esto supone un costo muy grande, casi imposible para cualquier proyecto, además de ser uno de los principales impedimentos para que triunfe cualquier nuevo sistema operativo. De aquí que se use un sistema operativo anfitrión como intermediario solventando este problema.

2 comentarios:

Anónimo dijo...

En paravirtualización, esto es incorrecto:
"el sistema operativo es modificado para poder ejecutarse en nivel 1 dejando el nivel 0 para el Xen, el cual es conocido como Hypervisor"

En la paravirtualización, Xen y el kernel están en el mismo anillo de privilegio (anillo o nivel 0).

Lo único que se parece a lo que estás diciendo se llama 'traducción binaria', donde sí que se puede engañar al SO para correr en el anillo 1. Pero eso no se llama paravirtualización, sino virtualización nativa o completa.

Por favor, infórmate mejor antes de escribir un artículo o dile a tus profesores que hagan antes las revisiones oportunas.

Saludos

José María Calderer dijo...

Muchas gracias por el comentario,

El hipervisor se ejecuta al mismo nivel de privilegios que el SO anfitrión, nivel 0, pero el SO invitado si se ejecuta en nivel 1.

En la virtualización nativa o completa el SO invitado corre en nivel de privilegios 2 dentro de una aplicación y en este caso si se hace traducción binaria para todas las instrucciones, este es el caso de VMware player