A vueltas con la virtualización

La virtualización es un tema muy de moda últimamente, debido a la cada vez mayor potencia de los servidores y a la facilidad de gestión que ofrece disponer de diferentes servidores dentro de una misma máquina, abstrayendo a los servidores virtuales del hardware real, permitiendo asignarles más o menos recursos, o incluso pudiendo moverlos de un servidor físico a otro en tiempo real. De todas formas, la virtualización no es algo nuevo, de hecho estaba contemplada ya en los antiguos mainframe IBM System/360 de la década de 1960. Sin embargo no ha sido hasta fechas recientes en las que su uso se ha generalizado, principalmente debido a la potencia de los equipos actuales y a su bajo precio.

En lo que a mi respecta, aparte del interés didáctico que tiene que esta tecnología está ya al alcance de cualquiera, llevo unos meses atento a los movimientos que hay en el campo, de cara a montar en casa un servidor que contenga a su vez varios servidores independientes: un servidor LAMP, uno de windows con .NET, uno de videovigilancia, un IDS, archivos e impresoras, MythTV… Los principales requisitos que busco son que la solución elegida debe correr sobre Linux, pero permitir ejecutar sistemas basados en Linux y Windows, y hacerlo de la forma más eficiente posible, es decir, con la mínima pérdida de rendimiento. Esto último descarta directamente soluciones basadas en emulación como QEMU. Por otra parte, la solución debería ser también open source o cuando menos gratuita.

La decisión final no la tengo tomada todavía, pero si tengo claro que las pruebas que realice voy a comenzarlas por KVM y que tiene bastante pinta de ser la opción final. Al principio los dos principales candidatos que he estado manejando han sido VMWare y XEN, pero en las últimos fechas he prestado bastante atención a KVM, siendo en este momento el principal candidato. Pero antes de explicar los motivos exactos de mi decisión, merece la pena describir al menos por encima los diferentes tipos de virtualización que existen.

Tipos de Virtualización

Básicamente podemos considerar 3 tipos de virtualización: emulación, virtualización completa (Full Virtualization), paravirtualización (Paravirtualization).

Emulación

La emulación se basa en crear máquinas virtuales que emulan el hardware de una o varias plataformas hardware distintas. Este tipo de virtualización es la más costosa y la menos eficiente, ya que obliga a simular completamente el comportamiento de la plataforma hardware a emular e implica también que cada instrucción que se ejecute en estas plataformas sea traducida al hardware real.

Sin embargo la emulación tiene características interesantes, como poder ejecutar un sistema operativo diseñado para una plataforma concreta sobre otra plataforma, sin tener que modificarlo, o en el desarrollo de firmware para dispositivos hardware, donde se pueden comenzar estos desarrollos sin tener que esperar a tener disponible el hardware real.

Uno de los ejemplos más destacados de la actualidad es QEMU. QEMU, entre otras cosas, permite emular diferentes plataformas Hardware como x86, x86-64, PowerPC, SPARC o MIPS. Así pues, podríamos tener dentro de un servidor linux varios equipos x86 o PowerPC, corriendo diferentes versiones de Linux.

Virtualización completa

Con este término se denominan aquellas soluciones que permiten ejecutar sistemas operativos huesped (Guest), sin tener que modificarlos, sobre un sistema anfitrión (Host), utilizando en medio un Hypervisor o Virtual Machine Monitor que permite compartir el hardware real. Esta capa intermedia es la encargada de monitorizar los sistemas huesped con el fin de capturar determinadas instrucciones protegidas de acceso al hardware, que no pueden realizar de forma nativa al no tener acceso directo a él.

Su principal ventaja es que los sistemas operativos pueden ejecutarse sin ninguna modificación sobre la plataforma, aunque como inconveniente frente a la emulación, el sistema operativo debe estar soportado en la arquitectura virtualizada.

En lo que respecta al rendimiento, éste es significativamente mayor que en la emulación, pero menor que en una plataforma nativa, debido a la monitorización y la mediación del hypervisor. Sin embargo, recientes incorporaciones técnicas en las plataformas x86 hechas por Intel y AMD, como son Intel VT y AMD-V, han permitido que soluciones basadas en la virtualización completa se acerquen prácticamente al rendimiento nativo.

Un par de ejemplos significativos son VMware y KVM.

Hay que tener en cuenta también que la virtualización completa no se refiere a todo el conjunto de hardware disponible en un equipo, sino a sus componentes principales, básicamente el procesador y memoria. De esta forma, otros periféricos como tarjetas gráficas, de red o de sonido, no se virtualizan. Las máquinas huesped no disponen de los mismos dispositivos que el anfitrión, sino de otros virtuales genéricos. Por ejemplo, si se dispone de una tarjeta nVidia GeForce en el anfitrión, los equipos huesped no verán esta tarjeta sino una genérica Cirrus.

Paravirtualización

La paravirtualización surgió como una forma de mejorar la eficiencia de las máquinas virtuales y acercarlo al rendimiento nativo. Para ello se basa en que los sistemas virtualizados (huesped) deben estar basados en sistemas operativos especialmente modificados para ejecutarse sobre un Hypervisor. De esta forma no es necesario que éste monitorice todas las instrucciones, sino que los sistemas operativos huesped y anfitrión colaboran en la tarea.

Uno de los componentes más destacados de esta familia es XEN, el cual fue mi principal candidato durante bastante tiempo. Permite paravirtualización utilizando sistemas operativos modificados, y virtualización completa sobre procesadores con tecnología Intel-VT o AMD-V. Para la gestión de las máquinas virtuales existen aplicaciones propietarias e incluso alguna open-source como ConVirt, que permite gestionar también desde un único sitio las máquinas virtuales de diferentes servidores, realizar tareas sobre ellas, o modificar sus configuraciones.

Características de KVM

Como he explicado en uno de los puntos anteriores, KVM es uno de los productos que en estos momentos ofrece virtualización completa, permitiendo a priori ejecutar, como huesped, cualquier sistema operativo para plataformas x86 sin tener que haberlo modificado previamente. Para ello se basa en las nuevas instrucciones Intel-VT y AMD-V, por lo que será necesario disponer de un equipo con un procesador que las soporte para poder utilizarlo.

Sin embargo, esto es algo que también permite XEN, entonces, ¿qué ventaje tiene KVM?. Pues la principal ventaja es que viene incluido como un módulo del kernel desde la versión 2.6.20 de Linux, por lo que no es necesario instalar ningún software específico. Si se dispone de una máquina con el procesador adecuado y se instala un linux basado en este kernel, se dispondrán automáticamente de los servicios de virtualización. Es de esperar por tanto, que esta tecnología evolucione bastante rápido y que aparezcan herramientas que permitan sacarle más provecho.

El funcionamiento de KVM se basa en que el módulo introduce un nuevo modo de ejecución aparte de los habituales kernel y user mode, con el nombre “guest mode”. Este modo se utiliza para ejecutar todo el código de los huesped que no sea de entrada/salida (I/O), mientras que el modo “user mode” se utiliza para la I/O de los huesped.

Como nota final, KVM utiliza también QEMU para realizar la virtualización, pero no como emulación, sino únicamente como herramienta para realizar la carga de las máquinas virtuales.

Más información

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

14 Respuestas para “A vueltas con la virtualización”

  1. Reconozco que el tema me supera, pero simplemente comentar una solución de Código Abierto aparecida en “Genbeta”: VirtualBox (http://www.virtualbox.org/)

  2. interesante noticia, aunque si quieres información sobre virtualización hay un blog que está de putísima madre http://elmundodejavi.blogspot.com.

    Allí hay extensos artículos sobre virtualización en Linux.

    Por cierto, eso de que KVM viene incluido en el kernel 2.6.20..¿será similar a lo que pretende Microsoft con Windows hypervisor? ¿tiene que ver con la virtualización por hardware de Intel y AMD?

    Gracias, y mola tu blog, lo seguiré.

  3. Hola me podrías decir de donde copiaste los cuadros con imagenes, de donde son las fuentes sobre las que escribis, ya que necesito realizar un artículo sobre este tema y me sería muy util saber de donde copiarlos.
    Muchas gracias

  4. Hola Lourdes, echa un vistazo a las referencias que pongo al final del artículo.

  5. Virtualizacion.

    Las primeras máquinas de IBM que introdujeron el sistema VM
    y posteriormente el MVS fueron mainframes del tipo S/370 y luego S/3090. En España sobre los años 1977-1980, desconocía que la virtualización se soportara en máquinas del tipo S/360 y en 1.960. Compruebalo.

  6. no te falto virtualizacion a nivel de sistema operativo,en el enlace de virtual linux viene,,,por que no lo pusistes?

  7. Hola,

    ¿Conocéis consultorías dedicadas a la virtualización, con conocimientos sobre arquitecturas HW, diseño de sistemas? Estamos buscando consultoría en ese área.

    Saludos

Trackbacks/Pingbacks

  1. » Copyright, creative commons y otras licencias sasa eh …no todo es en blanco y negro - 29. Ene, 2007

    […] Al igual que la virtualización está de moda, otro tema que se está haciendo hueco en este 2007 es el siempre interesante tema de las licencias, en este caso más centrado en “creaciones” como artículos, fotografías, etc. […]

  2. EsLoMas.com » Publicada la versión 2.6.20 del núcleo de Linux - 05. Feb, 2007

    […] Vía Barrapunto me llega la noticia de que Linus Torvalds ha liberado la versión 2.6.20 del kernel de Linux. Esta versión del módulo incluye soporte para la virtualización mediante el módulo KVM, que ya comenté hace unas semanas, y que que funciona sobre las extensiones de virtualización de los procesadores Intel y AMD. Esta nueva versión del módulo incluye un buen número más de características, como una implementación de paravirtualización, nuevos drivers, soporte para archivos swap al suspender un equipo, y soporte para la PS3. Aquí está la lista completa de novedades. Comparte esta información […]

  3. Virtualización 2008 - Multiplícate : enriqueruiz.es - 30. Dic, 2007

    […] más artículos:  http://www.eslomas.com/index.php/archives/2007/01/11/a-vueltas-con-la-virtualizacion/ […]

  4. EsLoMas.com » - 05. Mar, 2008

    […] […]

  5. Instalar VMWare Workstation en Ubuntu. « Bichotoblog - 15. Abr, 2010

    […] a EsLoMas, que tiene mucho publicado sobre […]