Antes que nada quiero darle las gracias a Jeff Woolsey (Lead Program Manager - Windows Virtualization), a quien tuve el placer de conocer, charlar y debatir bastante durante TechEd 2007.

En lo personal opino que los encuentros uno-a-uno en los booth/stands/cabinas de producto son el mejor sitio para aprender de mano de los expertos y gente de producto.

Para mi, el encuentro más fructifero durante toda mi experiencia TechEd, fué en la cabina Windows Server Virtualization donde Jeff mostraba los diversos modelos de Virtualización, desde lo mas sencillo y básico hasta llegar al famoso y polemico Hypervisor de Microsoft.

Les contaré un poco de lo que aprendí, empezemos el recorrido:

 

Existen varios modelos o tipos de virtualización bajo plataforma Windows:

  • Tipo 2
  • Hibrido
  • Tipo 1
    • Monolítico
    • Microkernelizado

 

 

-Tipo 2

Un ejemplo tipico de virtualizaón Tipo 2 es Java Virtual Machine (JVM) o Common Language Runtime (CLR) para .NET Framework (saludos a mis amigos developers :-D), en ambos ejemplos se inicia con un sistema operativo host (cuando hablo de SO host me refiero al SO instalado directamente al hardware fisico de nuestra PC). Encima del SO host corre un Virtual Machine Monitor (VMM), cuyo función es crear y manejar maquinas virtuales, asignar recursos a estas maquinas y mantener estas VM separadas uno de las otras. En otras palabras el VMM es la capa de virtualización en este escenario, luego encima del VMM tenemos las VM (guests) que estas ejecutandose, en este caso Java o aplicaciones .NET, aquí los guests tienen que accesar al hardware pasando a traves del VMM y el SO host, esto hace que el rendimiento no sea el mejor en este escenario.

tipo2

 

 

Arquitectura de VMM Tipo 2

Ejemplo: JVM y CLR para .NET

 

 

 

 

-Hibrido

Este modelo es mas común para los IT pros, aquí tanto el SO host como el VMM corren directamente en el hardware (con distintos niveles de acceso a diversos componentes de hardware), y el SO guest/invitado corre encima de la capa de virtualización.

hibrido

 

Arquitectura de VMM Hibrido

Ejemplo: Virtual PC 2007 y Virtual Server 2005 R2.

 

 

Pero lo anterior NO es exactamente lo que pasa aquí, algo mas exacto seria decir que el VMM aún debe de pasar por el SO host para accesar al hardware, sin embargo tanto el SO host como el VMM estas ejecutandose en modo Kernel, así que esencialmente es una eterna batalla por el consumo de CPU; aún asi el modo Hibrido es mucho más rapido debido a que esta ejecutandose en modo Kernel como ya mencioné a diferencia del Tipo 2 que corre en modo Usuario.

 

 

-Tipo 1

Este tercer modelo tambien es conocido como Hypervisor. Un hypervisor es una capa de software que reside justo arriba del hardware y abajo de los SO's, su proprósito principal es proveer ambientes de execución separados llamados "particiones", desde los cuales las maquinas virtuales que contengan SO's guest puedan correr. A cada partición se le provee una serie de recursos de hardware y el hypervisor es responsable de controlar y arbitrar el acceso al hardware fisico (recordemos el hypervisor se encuentra justo encima del hardware fisico de nuestro PC).

tipo1

 

Arquitectura de VMM Tipo 1

Aquí el VMM es el Hypervisor.

 

 

Es así que la virtualización basada en hypervisor tiene el mayor potencial de rendimiento y en los proximos parrafos les mencionáre como todo esto será implementado en Windows Server 2008.

Pero antes vamos a ver las 2 variaciones del modelo Tipo 1: monolítico y microkernelizado.

 

-Hypervisor Monolítico

En el modelo monolítico, el hypervisor tiene sus propios drivers para accesar al bajo bajo él. Los SO's guest corren encima del hypervisor, y cuando un guest necesita accesar al hardware, este lo hace a traves del hypervisor y su modelo de driver. Usualmente uno de estos SO's guest es el "SO Administrador o Consola", desde allí se puede ejecutar las herramientas para provisionar, manejar y monitorear todos los OS's guest que corren en nuestro sistema.

monolitico

El modelo de hypervisor monolítico provee un excelente rendimiento, pero puede tener debilidades en las áreas de seguridad y estabilidad. Esto es porque este modelo tiene de forma heredada una gran superficie de ataque  y un más aún, un mayor potencial para consideraciones de seguridad debido al simple hecho que los drivers (y algunas veces codigo de terceros) corren en esta misma área sensible. Por ejemplo: si se llegase a descargar malware en el sistema, este pudiese instalar un keylogger como un controlador de dispositivo en el hypervisor; si esto ocurre cada uno de los OS's guest ejecutandose en el sistema pudiese estar comprometido, cosa que por supuesto no es para nada bueno. Peor aún, una vez el sistema ha sido infectado, no hay manera de que el SO corriendo sobre el hardware fisico pueda saberlo, simplemente porque el hypervisor es invisible para el OS's host.

El otro problema es la estabilidad: si un controlador fuese actualizado en el hypervisor y este nuevo controlador tubiese un bug, TODO el sistema se viese afectado, incluyendo todas sus máquinas virtuales.

 

 

-Hypervisor Microkernelizado

Si comparamos el modelo monolítico con el microkernelizado (veanse graficos), tenemos un hypervisor realmente delgado, que no tiene controladores corriendo en él. Así es, el hypervisor NO tiene ningún controlador, pues los controladores corren en cada "partición", para que así cada SO guest corriedo una máquina virtual pueda accesar al hardware a traves del hypervisor. Este ultimo arreglo hace a cada VM una partición separada para amyor seguridad y estabilidad.

microkernelizado

En el modelo microkernilizado, el cual es usado en Windows Server Virtualization en Windows Server 2008, una VM es la partición padre, mientras que las demás son particiones hijas. Una partición es la unidad básica de seperación soportada por el hypervisor. Una partición esta hecha de una dirección/espacio físico junto con uno o más procesadores virtuales, tambien se le pueden asignar recursos de hardware especificos a la partición. La partición padre es la partición que crea y maneja las particiones hijas y contiene un stack de virtualización que utilizado para controlar estas particiones hijas.

El stack de virtualización de encarga de hablar con el hypervisor, tambien maneja la creación y manejo de particiones hijas y recursos (CPu, memoria y dispositivos); tambien expone una interfaz de manejo, la cual en Windows Server 2008 es un proveer WMI cuyas API's van a ser liberadas publicamente. Esto siginifica que no solo las herramientas de manejo de VM's corriendo en Windows Server 2008 usarán estas API's, si no que tambien terceros podrán ser capaces de escribi nuevas herramientas para manejar, configurar y monitorear VM's corriendo Windows Server 2008.

Ya a estas altura se pueden preguntar cual es la diferencia entre una maquina virtual como la conocemos hoy en dia y una "partición"?

Pues piensen en una VM como una partición y su estado.

 

En un proximo post les comentaré sobre Virtualización en Windows Server 2008, hypervisor, requerimientos y su funcionamiento.

 

PD. quedé enamorado de la palabra MICROKERNELIZADO, aunque no es una palabra tan micro.

 

Saludos!