La virtualización es un concepto que existe desde hace años implementado por empresas como IBM, Hewlett Packard (entre otras) en sus sistemas operativos y equipos mainframe. Pero es en estos días que está tomando un interés mayor por las empresas sobre esta tecnología.
En este artículo se hará una revisión sobre el monitor de máquinas virtuales libre (o hypervisor) XEN licenciado bajo GPL y que funciona en arquitecturas x86 (32 y 64 bits).
Historia
Conocer los inicios de los proyectos de software siempre es bueno, porque da una visión sobre el futuro del proyecto y de su estado actual, especialmente en software libre.
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., recibió fondos por millones de dolares de diferentes inversores 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 las computadoras que estamos acostumbrados a utilizar a diario el sistema operativo es el software mas poderoso, 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 niveles de privilegios o rings. El sistema operativo, el supervisor, corre en el ring 0 (más privilegiado) y las aplicaciones en ring 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 ring 1 dejando el ring 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 rings es lo que se llama “paravirtualización”. A diferencia de lo que dice Xensource en su página web, ellos no fueron los que inventaron el concepto, sino 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). 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 ring 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.
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 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.
Usos de Xen (o de la virtualización en general)
Xen es extremedamente util para hacer un mejor uso del hardware disponible en una empresa. Generalmente el hardware que se utiliza para un servidor de páginas web, servidor de correo u otros servicios de red no es utilizado en la totalidad de su capacidad.
Al migrar estos servicios a máquinas virtuales, el hardware se utiliza mejor ya que es compartido por todas las máquinas virtuales (y se achican los espacios físicos que se necesitan en los datacenters).
Adicionalmente al mejor uso del hardware, se agrega la posibilidad de tener máquinas virtuales para usarlas como respaldo de equipos en producción. Si un equipo crítico de producción tiene un problema de hardware se puede activar una máquina virtual (ya preparada) para que tome el control de este servicio mientras se repara -con más tiempo y tranquilidad- el problema de hardware.
Otra posibilidad muy interesante es la posibilidad de liberarse de equipos viejos que están brindando un servicio desde hace años, muchas veces trabajan sobre equipamiento obsoleto (y que generalmente son grandes en uso de espacio físico). Estos equipos se pueden migrar a máquinas virtuales tranquilamente.
Por último, la virtualización es muy útil para empresas que desarrollan software, ya que es común encontrarse con la necesidad de los programadores de probar algun software nuevo (bibliotecas de funciones, nuevos compiladores, etc.) que pueden perjudicar el trabajo de otros programores. En estos casos, solo basta con activar una nueva máquina virtual, instalar las cosas que se necesitan, hacer las pruebas, extraer las conclusiones y luego borrar todo.
Soporte de distribuciones Linux y otros ss.oo.
Las grandes empresas de distribuciones Linux (RedHat y Novell) están sacando versiones de sus distribuciones ya preparadas para Xen, muchas otras distribuciones como Debian, Fedora y otras también tienen kernels disponibles para poder ser virtualizados o que actúen como “host” de máquinas virtuales (domain 0).
Existen otros sistemas operativos que se pueden utilizar para trabajar como domain 0 y también ejecutarse dentro de una máquina virtual, por ejemplo NetBSD y Opensolaris. Dado que Xen implementa paravirtualización, para que un sistema operativo se ejecute dentro de una máquina virtual Xen éste debe ser modificado. Siempre y en cuanto el equipo donde corre Xen es un equipo de arquitectura x86 común. En el caso de utilizar un equipo con la nueva tecnología de Intel (Intel-VT) o AMD (AMD-V), Xen puede ejecutar máquinas virtuales de sistemas operativos propietarios (sin necesidad de modificar esos sistemas operativos) como Microsoft Windows.
El uso de estos nuevos procesadores de Intel y AMD abre enormemente el mercado donde se puede implementar Xen, esto, sumado al rendimiento superior que se logra al utilizar paravirtualización, hace de Xen un software competitivo y muy tentador a la hora de seleccionar un hypervisor.
En lo que respecta a distribuciones que venden las suscripciones para obtener mantenimiento, RedHat sacará sus suscripciones permitiendo usar una suscripción para todas las máquinas virtuales que ejecuten RHEL dentro de un mismo hardware. Reduciendo aún más los costos al utilizar virtualización.
Interfaces de administración
Dado que Xen es software libre constantemente se van conociendo nuevas interfaces de administración para el producto.
Actualmente las más destacadas son Enomalism (escrita en python) y Xenman (gtk). RedHat por su parte está desarrollando una intefaz de administración para Xen llamada virt-manager. Y por último Xensource vende un producto (Xen Enterprise) que trae una interfaz de administración, monitoreo que también algunas herramientas útiles para instalar más fácilmente diferentes sistemas operativos en las máquinas virtuales.
Todas las interfaces (exceptuando la de Xensource) están en estado beta y no todas son fáciles de instalar. La más compleja es Enomalism por su metodología de autenticación de usuarios. Para autenticar usuarios utiliza FDS (Fedora Directory Service) que es un producto (libre) para manejar varios directorios (LDAP) en forma centralizada. FDS es un producto pensado para empresas muy grandes o sistemas de directorios complejos, y si bien sus pantallas son todas gráficas, no es muy intuitivo para usarlo.
De todas formas los comandos que provee Xen para interactuar con las máquinas virtuales son muy fáciles de usar y no son muchos.
Características de Xen
Entre las características de Xen se destaca su velocidad, lo pequeño de su código fuente (menos de 50.000 lineas de código), un excepcional particionamiento de recursos de E/S de bloques y red, CPU y memoria. La posibilidad de “mover en caliente” máquinas virtuales de un equipo de hardware a otro. Un excelente rendimiento (entre 0.1% y 3% de overhead). Tiene soporte de hasta 32 procesadores en paralelo (SMP), soporta PAE (Physical Address Extension) para servers de 32 bits con más de 4Gb. de memoria RAM y tiene soporte para hardware de virtualización Intel VT y AMD Pacifica.
Detalles técnicos
La instalación de Xen no requiere más que un kernel con el parche de Xen y las herramientas de usuario para poder crear, destruir y modificar los valores de las máquinas virtuales en caliente (cantidad de memoria, parámetros del algorítmo de particionamiento de CPU que esté utilizando la máquina virtual) entre otras herramientas.
Los archivos de configuración de las máquinas virtuales de Xen son muy simples. Un ejemplo sería el siguiente:
kernel = “/boot/vmlinuz-2.6-xen”
ramdisk = “/boot/initrd-2.6-xen.img”
memory = 128
name = “mv01″
vif = ['mac=52:54:00:12:34:56','bridge=xenbr0']
disk = ['phy:vg/vg01,hda1,w','phy:vg/vg01swap,hda2,w']
root = “/dev/hda1 ro”
vcpus = 2
cpus = “0-3,5,^1″
pae = 0
acpi = 0
cdrom=”/dev/cdrom”
Los archivos de kernel y ramdisk residen en el disco del domain 0, “memory” indica la cantidad de memoria en megabytes que se le da inicialmente a la máquina virtual. “vif” indica los parámetros de la interfaz de red, su MAC Address y también el nombre que tiene la interfaz (del domain 0) que actúa haciendo un bridge entre el domain 0 y la intefaz de red virtual de la máquina virtual. Por defecto Xen crea un bridge para enviarle los paquetes que llegan a la placa física de red que están destinados a una u otra máquina virtual.
“disk” indica los dispositivos físicos donde están los discos (o particiones) que usa esa máquina virtual, generalmente se utiliza LVM (Logical Volumen Manager) para darle más flexibilidad al espacio que puede utilizar la máquina virtual. “root” es un parámetro que solo se usa en máquinas virtuales Linux que indica qué dispositivo (visto desde la máquina virtual, por eso el dispositivo es /dev/hda1) y cómo va a montarlo inicialmente, generalmente es modo solo lectura (ro). Con “vcpus” se puede simularle a la máquina virtual que tiene más procesadores de los que en realidad tiene (muy práctico para programación de aplicaciones que usen varios procesadores). El valor de “cpus” indica sobre qué CPU (físicas) va a correr esta máquina virtual, en este caso correrá sobre el procesador 0, 2, 3 y 5.
Los parámetros de acpi=0 y pae=0 indican que no se utilizará ACPI ni PAE en esta máquina virtual.
En el caso del valor de “cdrom” se le indica el dispositivo asignado a la lectora de CD, el valor de este parámetro puede ser el nombre de un archivo del disco (del domain 0), por ejemplo “/mnt/images/w2000server.iso” que puede ser util para la instalación de la máquina virtual.
Con este archivo creado y el disco indicado (“/dev/vg/vg01″ en el ejemplo) con el sistema operativo ya instalado se puede levantar o activar la máquina virtual utilizando el comando “xm create -c mv01″.
Otros comandos de Xen
- xm top (muestra el uso de recursos de cada máquina virtual)
- xm mem-set (ajusta la cantidad de memoria que puede utilizar la máquina virtual en caliente)
- xm migrate (mueve en caliente la máquina virtual para que siga ejecutandose en otro equipo)
- xm shutdown (ejecuta el proceso de apagado de la máquina virtual)
- xm list (lista todas las máquinas virtuales en funcionamiento)
Conclusiones
Xen es un producto probado, utilizado y listo para usar en producción. El hecho de que esté licenciado bajo GPL no solo baja mucho los costos, sino que también le da mucha flexibilidad y proyección a futuro (en la vida del proyecto).
Este producto combinado con sistemas de storage propietarios o libres (utilizando LVM -Logical Volumen Manager, mdadm -manejo de RAID por software para Linux-, IET -iSCSI Enterprise Target- y GFS -Global FileSystem-) puede dar excelentes resultados, alta disponibilidad y una escalabilidad sorprendente.
Mi recomendación es probarlo, aunque sea para virtualizar sistemas operativos libres y luego avanzar sobre Xen en hardware que soporte la separación de privilegios (rings).
Agradecimientos
- A Diego Woitasen por ayudarme con la escritura del artículo.
Referencias y lectura adicional
http://en.wikipedia.org/wiki/Xen
http://www.xensource.com
http://www.enomalism.com
http://xenman.sourceforge.net
http://www.linuxjournal.com/article/8540
http://iscsitarget.sourceforge.net/
