Virtualización y GPU passthrough

Hace unos años salto a la fama mundial la empresa de software VMware, en su salida a bolsa su cotización se disparó y arrastró al resto de valores tecnológicos con subidas generalizadas. VMware  ofrece programas relacionados con la virtualización, la espectacular subida de la bolsa debió deberse a que no paraba de hablarse de que la virtualización disminuía los costes empresariales, aunque hacia tiempo que existían otros programas como este y de otro tipo pero igual funcionalidad. Otro término que se puso de moda es el cloud computing o computación en la nube, que engloba varias soluciones informáticas o servicios a usuarios a través de una red, como internet, y donde habitualmente se une la virtualización con tecnologías de redes ya sea en la infraestructura del proveedor de los servicios o en el producto ofrecido. En las empresas la virtualización se utiliza para separar servicios o programas del servidor en máquinas virtuales, aumentando así la seguridad y mejorando la administración. También para balancear la carga, por ejemplo en los ordenadores que se contratan online la empresa que alquila los ordenadores puede crear o iniciar varias máquinas virtuales en cada ordenador real dependiendo de las solicitudes siguiendo un criterio de optimización, sin embargo cada máquina virtual ralentiza cada vez más al ordenador real y el cliente debe estar preparado para bajadas drásticas de rendimiento si la empresa suministradora dimensiona mal el número de máquinas virtualizadas o en momentos de mucha carga, otras empresas dan información y precios variables dependiendo de estos factores, un ejemplo extremo es Amazon EC2 (máquinas virtuales en la nube con el paravirtualizador libre Xen).

Windows XP virtualizado en linux
Windows XP virtualizado en linux

Los usuarios normales también pueden aprovechar las ventajas de la virtualización, con un programa virtualizador instalado en el ordenador o máquina anfitrión (host), aparecerá una ventana que será el ordenador virtualizado o huésped (guest), en él podemos elegir sus características como el número de núcleos, cantidad de memoria RAM y el tamaño de disco duro, que se compartirán o tomarán prestados de nuestro ordenador real. En la máquina virtual se puede instalar cualquier versión de un sistema operativo Windows, linux, BSD, OS X, etc., también mezclarlos en distintas máquinas virtuales, copiar discos duros virtuales, hacer instantáneas, ejecutar un liveCD (disco CD físico o archivo .iso), hasta es posible virtualizar un sistema operativo de 64 bits en uno de 32 bits siempre que el procesador sea de 64 bits.

linux, Windows XP y Windows 8 virtualizados a la vez
linux, Windows XP y Windows 8 virtualizados a la vez

Mediante virtualización también es posible hacer funcionar en linux algunos periféricos conectados por los puertos serie, paralelo o USB que solo dispongan de controladores para una versión de Windows.

En determinados casos, para el entorno empresarial (también pueden instalarlo usuarios avanzados) son posibles varias alternativas libres entre las que destacan Xen para la paravirtualización con alto rendimiento (en este caso un kernel para la virtualización con Xen se selecciona en el arranque), OpenVZ es una tecnología de virtualización a nivel de sistema operativo para Linux (virtualizar linux en linux con poca pérdida de rendimiento), Docker es una tecnología de virtualización en auge para aislar aplicaciones (contenedores linux compartiendo el sistema y el kernel anfitrión con mínima pérdida de rendimiento y disco duro) y User mode Linux (instalar software para otro kernel linux en linux), o para algunos programas empresariales los emuladores de MS-DOS y Windows (estos no requieren licencias por el sistema operativo de Microsoft emulado).

El sistema operativo virtualizado va mucho más rápido si se dispone de un procesador con aceleración hardware AMD-V o Intel-VT (y tenerla activa en la BIOS de la placa base),  en caso contrario las soluciones más recomendables para Windows son los emuladores como el libre Wine, mucho más rápido con cualquier procesador, o el de pago Crossover (también basado en Wine). Los emuladores de Windows traducen o convierten las instrucciones de Windows a las de linux (en Wine el código del sistema operativo Windows está reescrito de manera legal y libre y, aunque es muy variable, se dan casos donde es más rápido que el propio Windows original), mientras que los virtualizadores lo que traducen son las instrucciones del hardware y pasan las instrucciones del procesador de la máquina virtualizada a la real si se dispone de aceleración hardware, si bien los programas virtualizadores pueden tener varios modos de funcionamiento. En el entorno empresarial se uilizan más los paravirtualizadores (Xen, VMware ESX), que se distinguen por instalarse en el ordenador como un servicio, es decir el software infraestructura de virtualización (Hipervisor) está más próximo al hardware anfitrión (Hipervisor tipo 1) proporcionando mayor seguridad y rendimiento, mientras que los virtualizadores para usuarios normales (Qemu, Virtualbox, VMware Workstation) se ejecutan como un programa normal (Hipervisor tipo 2), si bien todos los virtualizadores instalan controladores en los sistemas operativos anfitriones comportándose como paravirtualizadores. Por otra parte, Qemu puede usar como Hypervisor a Xen o KVM, siendo KVM un Hipervisor tipo 2 que también podría ser tipo 1. Con tantos sistemas operativos anfitriones y huéspedes, que pueden tener rendimientos dispares en un mismo virtualizador, y con tantas opciones, mejoras y versiones de los virtualizadores es muy difícil encontrar una comparativa fiable y actualizada, por ejemplo se llega a comparar versiones empresariales de VMware con virtualizadores para usuarios normales, incluso con opciones poco optimizadas, y en comparativas poco actuales los virtualizadores de VMware suelen salir demasiado bien parados.

Juego DirectX con Wine
Juego DirectX con Wine

Hace años existía el emulador de pago Win4Lin que se hizo conocido por su buen funcionamiento ejecutando Windows 95 y 98 dentro de linux, pero lo más fácil para los usuarios de linux que querían utilizar juegos u otros programas Windows era instalar en el ordenador Windows y linux en particiones separadas, un ordenador con doble arranque para elegir el sistema operativo a usar en exclusiva. Con la llegada de los virtualizadores los usuarios normales pueden tener un acceso relativamente sencillo a la mayoría de programas que no estén disponibles en linux ejecutando el todopoderoso Windows dentro de linux, ya sea en ventana o a pantalla completa. En cualquier caso, para los programas soportados por el emulador Wine éste debería ser nuestra primera opción, con cada nueva versión funciona mejor, soporta varias versiones de Windows a la vez, permite instalar muchos juegos Windows con un gran rendimiento (aunque es muy variable, en algunos casos a velocidad nativa, los OpenGL o los DirectX 9 con Gallium Nine), y programas como PlayOnLinux ayudan a instalar los programas Windows más complicados.

Para los usuarios normales el principal problema de los virtualizadores es que emulan un ordenador con el hardware algo limitado, se dispone de tarjeta de red, tarjeta de sonido estéreo, pero una parte de periféricos y de características puede que no funcionen o lo hacen peor que en una instalación real, un ejemplo son los juegos Windows programados para el código DirectX exclusivo de Windows, porque en linux sólo se instalan controladores con OpenGL (en Windows OpenGL también se utiliza), para los juegos Windows tanto DirectX y OpenGL/Windows deben estar incluidos en los controladores de las tarjetas gráficas virtuales del ordenador virtualizado, pero la conversión de DirectX a OpenGL/linux es compleja, un virtualizador puede llegar en los mejores casos al 50-60% de la velocidad total de la gráfica. Además, aún con aceleración hardware el programa virtualizador baja algo el rendimiento de la CPU de la máquina virtualizada, y el disco duro virtualizado en un archivo siempre es más lento.

Otro inconveniente de virtualizar otro sistema operativo para un usuario normal es que mantener dos sistemas operativos requiere el doble de esfuerzo. La virtualización puede disminuir los riesgos de seguridad, incluso de estabilidad, pero con Windows virtualizado siguen haciendo falta los clásicos antivirus, actualizaciones de seguridad, etc. aunque la mayoría de virus Windows sólo afecten a la máquina virtual. Sin olvidarnos de que son necesarias licencias por cada Windows y programa comercial que instalemos, incluso si ya los tenemos instalados en otra partición del disco duro, o si alquilamos un servidor virtual privado siempre será más cara la opción de Windows, aparte funcionará peor que linux.

Entre los virtualizadores para usuarios normales, VMware Workstation es el más rápido en procesadores sin aceleración hardware, también está disponible en Windows y OS X, es un programa muy completo que destaca por soportar aceleración 3D DirectX de Windows (emulada o convertida a OpenGL en linux) y puerto paralelo estable. VMware Workstation es el virtualizador con más funcionalidades gráficas y el más rápido en juegos 3D (si exceptuamos la virtualización passthrough y al emulador Wine). VMware no es libre, si bien existe una versión gratuita, VMware Workstation Player, con varias limitaciones. No es muy recomendable instalar VMware por no ser libre, ya que el propio programa virtualizador puede tener bugs y agujeros de seguridad, en los virtualizadores libres estos se solucionan y se instalan automáticamente desde los repositorios de cada distribución.

Windows 95 en PSP con BOCHS
Windows 95 en PSP con BOCHS

El emulador de hardware BOCHS y Qemu fueron los primeros virtualizadores libres, BOCHS es muy lento y se utiliza para probar y depurar en el desarrollo de sistemas operativos y aplicaciones, mientras que Qemu al principio era lento y el primer módulo acelerador que utilizó (KQEMU) tardó un tiempo en hacerse libre, actualmente utiliza KVM como acelerador, mucho más rápido. Qemu recibió numerosas aportaciones de la comunidad de software libre, tanto oficiales como no oficiales, por ejemplo las aplicaciones huésped integradas en el anfitrión o la opción de compartir la partición root de una instalación nativa de Windows, aunque esta última no es recomendable, se puede emplear en otros virtualizadores. Es un virtualizador con numerosas opciones y modos de funcionamiento, puede funcionar como emulador de hardware de otras arquitecturas hasta paravirtualizador de alto rendimiento. Qemu y el emulador de hardware BOCHS son los programas libres que se han portado a distintos dispositivos como las consolas PSP y PS3, funcionan a una velocidad poco práctica por la falta de potencia o aceleración hardware (más necesaria entre arquitecturas distintas, por ejemplo las PS3 tienen un procesador PowerPC).

Juego OpenGL en Virtualbox
Juego OpenGL en Virtualbox

Pero el virtualizador por excelencia en linux es Virtualbox, desarrollado por Oracle (antes era de Sun), también disponible en Windows y OS X, es un programa gratuito muy completo que en procesadores con aceleración hardware es muy rápido (si bien las comparativas con VMware Workstation son muy variables), tiene una tarjeta gráfica virtual con aceleración 3D OpenGL que funciona muy bien, aunque el soporte de las DirectX es experimental. Virtualbox permite al usuario hacer instantáneas de las máquinas virtuales, al hacer una se guarda el estado completo del sistema operativo huésped y a partir de ahí crea otro archivo de disco duro donde se guardarán los cambios, se pueden hacer y restaurar tantas instantáneas como se quiera. Desde los repositorios se puede instalar la versión libre de Virtualbox, las partes no libres se instalan aparte gratuitamente con el Extension Pack, para los usuarios normales la mayor diferencia entre la versión libre y no libre es el soporte USB 2.0 y 3.0. Para el óptimo funcionamiento de Virtualbox debe estar activa la aceleración hardware del procesador (tanto en el programa como en la placa base anfitrión), la aceleración 3D en el linux anfitrión, dar de alta al usuario en el grupo vboxusers de linux y instalar la última versión de las VirtualBox Guest Additions en el sistema operativo huésped. Una característica más que destacable de Virtualbox es que puede funcionar en el denominado modo fluido, lo que permite integrar el escritorio Windows en nuestro escritorio linux y que aparezcan las ventanas de los programas Windows individualmente como si fuesen de linux.

Desde hace unos años la virtualización por hardware pass-through (también puede denominarse IOMMU o directed I/O) es posible en muchos ordenadores, aunque no en todos ya que tanto procesador como placa base deben soportar la aceleración hardware Intel VT-d o AMD-Vi y aun así existen placas con bugs, aparte no todas las tarjetas gráficas son válidas. Con virtualizadores con pass-through se puede instalar en el sistema huésped el controlador Windows con acceso directo a todo tipo de hardware, consiguiéndose las funcionalidades y velocidades de una instalación Windows nativa. En las empresas es muy útil para aprovechar al máximo los componentes en la máquina virtual elegida, por ejemplo tarjetas de red para servidor. Para los usuarios normales puede servir para hacer funcionar componentes que sólo tienen controladores para una versión de Windows, pero lo que más interesa es la tarjeta gráfica 3D para los juegos Windows y para los programas multimedia exclusivos de Windows. Entre los virtualizadores para usuarios normales el pass-through de la GPU o tarjeta gráfica sólo está disponible por ahora en el virtualizador libre Qemu junto con KVM (aunque Xen, más bien a nivel académico, fue el primero y desde hace algunos años, y actualmente también lo soportan el paravirtualizador empresarial basado en linux VMware ESX y VirtualBox de forma experimental).

El juego GTA 5 con KVM passthrough
El juego GTA 5 con KVM passthrough

KVM está incluido en el kernel desde la versión 2.6.20 apoyado por Red Hat, es un software infraestructura de virtualización, y con él Qemu aprovecha la aceleración hardware de los procesadores con extensiones para la virtualización, también Qemu puede funcionar sin KVM (sin aceleración). Qemu/KVM se lanza desde la linea de comandos o con los frontends (que comparte con Qemu sin KVM), si bien no es tan sencillo de configurar como pueda ser Virtualbox. Es un virtualizador muy rápido y consume poca memoria RAM al utilizar una óptima asignación dinámica de memoria. Probablemente sea el virtualizador más rápido, aunque al tener tantas opciones depende de las elegidas, acelerador hardware, método de acceso a la red, controladores instalados en el sistema huésped, etc. Qemu también soporta hacer instantáneas y, aunque por ahora no soporta las DirectX de Windows, tiene una tarjeta gráfica virtual con aceleración 3D a través de VirtIO (controladores de los dispositivos virtuales y utilidades que se instalan en el sistema operativo huésped). Pero sin duda la gran novedad de Qemu/KVM es que opcionalmente soporta la virtualización pass-through, incluidas las tarjetas gráficas, el problema es que se necesita un dispositivo en exclusiva para cada máquina virtual que lo quiera utilizar en modo pass-through, es decir, necesitamos dos tarjetas gráficas, una para la máquina real (que puede ser la que ya llevan incorporada muchos procesadores) y otra para la virtualizada (una más potente para juegos o programas 3D), además la tarjeta gráfica del ordenador virtual sólo tiene salida por sus conectores externos (se comporta como en un ordenador real y da error si no detecta un monitor conectado), con lo que es necesario un monitor extra o uno con dos entradas seleccionables. Mediante software se puede compartir el sistema operativo virtualizado en ventana, por ejemplo transmitiendola con VNC, y prescindir del segundo monitor con un conector fantasma o Dummy HDMI. Por ahora es un poco complicada la configuración de la virtualización GPU pass-through, por lo demás funciona muy bien con las tarjetas gráficas soportadas (AMD y relativamente recientes de Nvidia), los juegos Windows funcionan con velocidades de al menos el 95% del total de la gráfica.

Para compartir el hardware a velocidad nativa entre máquinas virtuales existen varias soluciones para empresas, por ejemplo tarjetas de red con al menos dos conectores que se pueden dividir para el acceso directo de máquinas virtuales o tarjetas gráficas dedicadas para compartirla mediante virtualización en la nube. En el caso de las gráficas para escritorio actualmente sólo está disponible la tecnología Intel GVT-g, en las gráficas integradas para procesadores Intel de la 4ª generación (Haswell) o más recientes. Por ahora sólo las soportan de forma experimental XenGT y KVMGT, que son versiones de Xen y KVM para Intel GVT, estos virtualizadores soportan hasta 3 máquinas virtuales en el caso de los procesadores Haswell. Con esta solución se solventa el problema de tener dos o más gráficas, más los monitores, en la virtualización pass-through, las nuevas gráficas permiten compartir el tiempo de uso entre máquinas virtuales, tanto el ordenador anfitrión como los huéspedes pueden utilizar el controlador nativo (de linux o Windows), llegando a velocidades próximas a nativas, al menos el 80-90%, cuando una máquina lo necesita y las demás no la usan. Habrá que esperar un tiempo hasta que tanto el resto de fabricantes de gráficas como el software terminen de desarrollar esta tecnología.

Con la potencia de la mayoría de los ordenadores de escritorio actuales usar Windows en nuestro linux es algo sencillo y en un uso normal la perdida de rendimiento con respecto a una instalación real no suele notarse, ya no digamos con la virtualización pass-through. Naturalmente, linux es el mejor sistema anfitrión para todos los tipos de virtualización, sin embargo, quizás exceptuando los juegos Windows con el emulador Wine, la comunidad de software libre no está a favor de virtualizar Windows, ya que igual habría que centrarse en fomentar el uso de software libre entre los usuarios de linux.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s