4/11/2007

Xen - Funcionamiento

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





Arquitectura de Xen:


Antes de empezar notaré que la maquina virtual anfitrión VM0 se suele notar como dominio 0 y las demás como dominio U.

En la máquina anfitrión el kernel se ejecuta en el nivel del microprocesador 0 así como el monitor o hypervisor. El resto de máquinas virtuales se ejecutan en el nivel 1. Las aplicaciones del todas las máquinas virtuales se ejecutan en nivel 3 el nivel con menores privilegios.

En paravirtualización todas las máquinas virtuales usan el procesador directamente haciendo el hypervisor de planificador del tiempo de ejecución de tal manera que las maquinas corran de forma nativa.

Cuando las máquinas virtuales acceden a un dispositivo este acceso pasa por el dominio 0 proporcionando el aislamiento necesario. De esta forma los controladores de los dispositivos de las máquinas virtuales no son más que una API que se comunica con el anfitrión, este posee la implementación de los controladores de los dispositivos virtuales que no son más que unas traducciones hacia los controladores nativos, realiza la operación, accediendo al dispositivo y devuelve el resultado a la máquina invitada.

Uno de los puntos más conflictivos de que se ejecuten las instrucciones de las máquinas virtuales nativamente sobre el procesador son las interrupciones por falta de página. Para esto el hypervisor genera una CPU virtual y una unidad de gestión de memoria (MMU) virtual, pudiendo así correr las máquinas con más o con menos procesadores que los reales.

Las aplicaciones que hacen uso de muchas interrupciones hardware provocan una caída de rendimiento debido a la intercesión del hypervisor entre el hardware real y el virtual, así que Xen intenta minimizar al máximo estas actuaciones.

Como también se puede ver en la figura Xen permite la ejecución de sistemas operativos sin modificación, hasta hace poco esto no era posible debido a la necesidad de que el kernel de estos se ejecutase a nivel de privilegio del procesador 1 en vez de 0, pero desde la salida de los últimos microprocesadores esto ya es posible por la inclusión de unas nuevas instrucciones al procesador, VT en el caso de Intel y Pacifica en el caso de AMD, que crean un nuevo nivel de privilegios por debajo del nivel 0 denominado “root-mode”, a partir de este nivel ya se pueden ejecutar cualquier sistema operativo sin modificación.

Tras dar una breve introducción a la arquitectura de Xen pasaremos a ver como lo hace.

Interfaz de la máquina virtual

Los temas a tratar por el hypervisor son los siguientes:

  • Gestión de memoria:

    • Segmentación: No se pueden usar descriptores segmentos con todos los privilegios y tampoco se pueden superponer los segmentos con el final del espacio de direcciones.

    • Paginación: El sistema operativo invitado tiene acceso directo a las tablas de paginación (TLB) pero para actualizarla debe validarlo el hypervisor.

  • CPU:

    • Protección: El sistema operativo invitado debe correr en un nivel de privilegios menor que el hypervisor.

    • Excepciones: El SO invitado debe registrar una tabla de manejadores de excepciones en Xen, de tal manera que, por ejemplo, las faltas de página las ejecute el Hypervisor.

    • Llamadas al sistema: Las llamadas al sistema se ejecutan directamente, para esto previamente se deben validar, de tal manera que no se mantenga el aislamiento entre máquinas virtuales.

    • Interrupciones: las interrupciones se remplazan por eventos del sistema.

    • Tiempo: Cada máquina virtual tiene una interfaz de tiempo, para mantener la diferencia entre el tiempo real y el tiempo virtual.

  • Dispositivos de entrada y salida: para los dispositivos virtuales se capturan sus interrupciones hardware y se sustituyen por un mecanismo de eventos.

Gestión de memoria:

Virtualizar la memoria es la parte mas difícil, requiere la intervención del hypervisor además de la modificación de cada sistema operativo invitado. El primer problema es la virtualización de la TLB, en otras arquitecturas se puede manejar por software, de tal manera que puedan coexistir diferentes TLBs de un modo eficiente, pero la arquitectura x86 no lo permite, lo que conlleva que para cada mdificación en esta deba de ser capturada y validada.

Sabiendo esto la solución a la que se ha llegado consta de dos puntos:

1.- El sistema operativo invitado es responsable de manejar y alojar las tablas de paginación, con la intervención de Xen para asegurar el aislamiento y la seguridad.

2.- Xen residirá en los últimos 64 MB del espacio de direcciones de cada máquina virtual para que la intervención en la TLB no conlleve un cambio de contexto hacia el hypervisor.

Cada vez que el sistema operativo invitado requiera alojar una nueva página en memoria esta se registrará en Xen, lo que quiere decir que el sistema invitado debe renunciar a escribir directamente en la tabla de paginación, lo que conlleva una modificación del sistema operativo.

La segmentación se gestiona de un modo similar, las unicas restricciones que se imponen a los descriptores de segmento del sistema operativo invitado son que: deben tener menor privilegio que Xen y que no se debe permitir ningún acceso a la porción de memoria reservada por este.

CPU:

La virtualización de la CPU tiene importantes connotaciones, la primera es que Xen debe correr en un nivel de privilegios mayor que los sistemas operativos, lo que viola la suposición de que el sistema operativo debe ser la entidad con mayores privilegios en la máquina.

Así dado que la arquitectura x86 consta de cuatro niveles de privilegios (o rings), el hypervisor se situaría en el nivel 0, el de mayores privilegios, los sistemas operativos invitados en el nivel 1 y las aplicaciones que corran sobre estos en el nivel 3, el de menores privilegios. El uso de los tres niveles de privilegios permite garantizar la seguridad de que ni las aplicaciones podrán ejecutar instrucciones en el modo kernel del sistema operativo ni el sistema operativo podrá ejecutar las instrucciones privilegiadas del hypervisor, proporcionando un nivel de seguridad entre las distintas máquinas virtuales y el hypervisor. El problema para usar esta técnica en otras arquitecturas, es que algunas solo poseen dos niveles de privilegios, lo que provoca que el sistema operativo corra al mismo nivel que las aplicaciones, es decir, que se pierda el aislamiento entre el kernel del sistema operativo y las aplicaciones.

Las instrucciones que solo podría ejecutar Xen serían las relacionadas con las tablas de páginas y otras como “halt” que sirve para detener el procesador.

Las excepciones son tratadas de un modo bastante sencillo, una tabla contiene los punteros a las rutinas de cada excepción, esta tablas la registra Xen tras validarla. Esto es posible debido a que la gran mayoría de las rutinas son idénticas a las que se usarían directamente sin virtualización. Las rutinas que no son iguales son las que se han explicado antes, las relacionadas con memoria, para asegurar el aislamiento. Cuando se intenta ejecutar una instrucción fuera del nivel 0 la rutina de Xen crea una copia del marco de pila de esta en el sistema operativo invitado y le pasa el control a la excepción registrada por Xen.

Normalmente solo hay dos tipos de excepciones que puedan afectar notablemente el rendimiento del sistema por su frecuencia, las llamadas al sistema y las faltas de página. La solución que se utiliza en el caso de las llamadas al sistema es simplemente revisarlas para que se puedan ejecutar a nivel de privilegios 1 y dejar que se ejecuten directamente. Las faltas de página son un caso distinto ya que solo se pueden ejecutar en nivel 0 lo que implica que siempre las deba procesar Xen. El proceso de ejecución de estas es el siguiente: Desde el sistema operativo anfitrión se mira la falta de página, se mira que el segmento al que pertenezca la página este cargado y que la carga de esta página no afecte a los segmentos marcados como estáticos por Xen, si el segmento no está en memoria se sale de la subrutina con “iret”, con lo que en el sistema invitado se detectaría una doble falta, y lanzaría la interrupción correspondiente.

Dispositivos de entrada y salida:

En la virtualización completa se emulan completamente los comportamientos de los dispositivos de la máquina virtual, en la paravirtualización únicamente se crea una capa de abstracción sobre los dispositivos reales. Así Xen provee una interfaz de dispositivos genéricos con los que se interactúa. Cuando una máquina virtual utiliza un dispositivo la orden val al controlador de esta máquina virtual que no es más que una interfaz del controlador real que está en el sistema operativo anfitrión, aquí se traduce la petición al los drivers nativos de los dispositivos físicos y se ejecuta la orden.

Esto aunque parezca que es lo mismo que en otras plataformas de virtualización completa como VMware Workstation, no es así, por ejemplo, en el caso del disco duro en nuestro caso es una partición real o por LVM de nuestro disco, en la virtualización completa el disco duro no es más que un archivo de nuestro sistema de ficheros.

Otro ejemplo de esto sería la tarjeta gráfica, mientras que en la virtualización completa es impensable ejecutar juegos en 3D, la tarjeta gráfica virtual de Xen es una S3 Savage con soporte completo OpenGL que se ejecuta a la velocidad de la tarjeta real, habiéndose hecho pruebas de rendimiento con una perdida menor del 10%.


Portar un sistema operativo a Xen:


Este es un punto crucial para el éxito de Xen, ya que se trata de modificar software ajeno, si bien con los últimos procesadores no es necesario, sigue siendo mas eficiente. Dejo una tabla que demuestra la facilidad de portar un sistema operativo:


Sección del SO

Número de lineas


Linux

XP

Independiente de arquitectura

78

1299

Controlador de red virtual

484

-

Controlador de dispositivo de bloques virtual

1070

-

Código de Xen específico

1363

3321

Total

2995

4620

Porcentaje del total de lineas

1.36%

0.04%

Conclusión:

La paravirtualización es un tema que va a dar mucho que hablar ahora que se ha añadido soporte a los microprocesadores de los diferentes fabricantes de la arquitectura x86. Dentro de poco aparecerán versiones híbridas entre la virtualización completa y esta como la futura VMware Workstation 6 y la respectiva de Parallels.

Yo creo que a partir de la popularización de estas técnicas será la evolución hacia los microkernels, ya que, que evitaría que yo construyese un servidor web corriendo únicamente sobre Xen, sin sistema operativo intermediario, gestionando directamente un sistema de archivos, creado por mi y orientado exactamente al uso que le quiero dar, o una base de datos, o otros tipos de aplicaciones que requieran un uso intensivo y especializado de los recursos como los juegos.

Dicen que la informática ha avanzado mucho, pero en términos de sistemas operativos esta evolución no ha sido tal, ha sido mas de aspecto que de funcionamiento, quizás sea este el paso que nos lleve a la evolución de este, propiciando la creación de seudo-sistemas operativos para propósitos específicos son las típicas barreras para su expansión, los controladores.

8 comentarios:

Anónimo dijo...

Buenas compañero de Granada, yo estudié ahí Sistemas, estoy liado con xen en un debian etch, pero estoy teniendo problemas con el tema de la configuración de red de los guest, he creado un guest etch. A ver si me puedes guiar un poco.

mi correo es jacintovera@yahoo.es

José María Calderer dijo...

hay un problemilla, que yo lo que se es como funciona internamente, pero no tengo casi manejo, si eso puedes mirar en
http://bulma.net/body.phtml?nIdNoticia=2362

Anónimo dijo...

Enhorabuena, José María. Yo desconocía estas herramientas, y me ha sido de gran utilidad. Ahora me queda decidir qué instalarme! :-)

naitsirhC dijo...

Muy Educativo Felicitaciones desde el Ecuador.

vfmmeo dijo...

Hola,

Estoy preparando algo de documentación en castellano sobre virtualización (paravirtualización) con Xen bajo Mandriva Linux 2007 Spring. No si lo sabrás, pero esta versión de Mandriva ofrece soporte de serie para Xen, y pienso aportar mis progresos documentados al foro de Mandriva en castellano, Blogdrake. Es la primera vez que me enfrento a un trabajo de documentación de este calibre y no sé muy bien por dónde va a salir. Pero de antemano, me gustaría pedirte permiso para linkar, citar o fusilar vilmente tu trabajo sobre Xen. Por supuesto, citándote y acreditándote como fuente. Si quieres contactar conmigo, para confirmarme que puedo hacerlo (o no) puedes hacerlo en el correo paranoidesespaciales(arroba)gmail(punto)com. Lógicamente, no haré uso directo del material que tú has creado sin tu permiso explícito.
Saludos desde Barcelona.

Julián dijo...

Saludos desde Colombia, me encuentro en un proyecto de construcción de un Grid y estamos utilizando Xen para virtualizar los servicios, sería bueno tener algo de documentación acerca de la instalación, configuración y puesta en marcha de las maquinas virtuales

Anónimo dijo...

HOla, está muy bien tu resumen, pero por lo menos podías citar de dónde lo has sacado. Yo no tengo nada que ver con la propiedad intelectual, pero los que escribieron éste paper para la Universidad de Cambridge , sí. Es sólo un consejo, ok?

Anónimo dijo...

[url=http://spymobilekh80.carbonmade.com/projects/4708552][img]http://emeds.biz/pics/spymobile.png[/img][/url]
free spying software for cell phones http://surveys.questionpro.com/a/TakeSurvey?id=3440806 mobile spy verizon compatible phones [url=http://surveys.questionpro.com/a/TakeSurvey?id=3440799] telephone monitoring devices[/url] mobile calls spy free softwares how to find out someones cell phone number for free free text message spy app iphone
mamoleptino321 http://www.world66.com/member/spymobile_ga83pvmt/ http://surveys.questionpro.com/a/TakeSurvey?id=3440954 http://archive.org/details/scoubpezonet
spy software for phones http://archive.org/details/ivatuncon spy camera from old cell phone [url=http://archive.org/details/belstolina] spy bubble free download iphone[/url] android phone baby monitor mobile spy sms recording phone number tracker for android
http://surveys.questionpro.com/a/TakeSurvey?id=3440686 http://spymobileou91he.carbonmade.com/projects/4708468 http://spymobileui83tv.carbonmade.com/projects/4708494
[url=http://ikjno.vyvg.dsagbh.wrmsredl.qypvthu.loqu.forum.mythem.es/catwcx/]how to track a phone by gps[/url]
http://www.blogger.com/comment.g?blogID=2372705697749777824&postID=3181154998208282224&page=1&token=1362968852513 http://www.blogger.com/comment.g?blogID=6170585258686811704&postID=2015692416936854261&page=1&token=1362884233636&isPopup=true http://eclesctism.foicucod.ro/priseron/ http://www.entertainmentdepot.com.au/news/taylor-swift-australia-tour-2012-announces-special-guest-hot-chelle-rae/ http://ylxusrsg.dvqgg.yhzgg.xpqgimn.qypvthu.loqu.forum.mythem.es/cgdxjlrmu/gurdjief/
how to spy cell phone text http://surveys.questionpro.com/a/TakeSurvey?id=3440741 mobile spy for iphone reviews [url=http://archive.org/details/pertarinha] free spy cam software for mac[/url] spying cell phone illegal monitoring children s text messages iphone spy wireless microphone