[Xen] VT-d (VGA) Passthrough y el rendimiento de las VM en Xen

Luego de que en el nucleo Xen 3.25 de la última versión de GNU/Linux Debian Lenny (5.0.5) se incorporara PCI Back para que las VM pudieran adquirir acceso directo a tarjetas de red, dispositivos PCI y USB, se discutió para la versión 4 (y aprovechando las extensiones paravirt_ops del kernel Linux > 2.6.30) la incorporación de VT-d (VGA) Passthrough, esto es, la posibilidad de incorporar a la VM la capacidad de acceder a la aceleración de video nativa del hardware (video AGP, PCI o PCI-e).

Como el Kernel Xen de Debian Squeeze incopora tanto Xen 4.0 como las opciones paravirt_ops y HVM (Qmeu-KVM extensions for Xen), pues me decidí a probar a ver si en Debian Squeeze y Xen podríamos usar VGA Passthrough para correr máquinas Windows (XP, 2003, 7) y que aprovechen la full-aceleración nativa del video.

Mi Hardware:

Mi portatil es una Lenovo Thinkpad X61 Tablet PC, con 4 Gb de RAM y una tarjeta de video Intel G965 con 256 MB de Video:

lspci -v -s 00:02.0
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c) (prog-if 00 [VGA controller])
Subsystem: Lenovo T61
Flags: bus master, fast devsel, latency 0, IRQ 749
Memory at f8000000 (64-bit, non-prefetchable) [size=1M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
I/O ports at 1800 [size=8]
Expansion ROM at <unassigned> [disabled]
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 3
Kernel driver in use: i915

El Xen de Debian Squeeze trae estas opciones activas:

xm info

host                   : lexotanil

release                : 2.6.32-5-xen-amd64

version                : #1 SMP Sat Jul 24 04:03:11 UTC 2010

machine                : x86_64

nr_cpus                : 2

nr_nodes               : 1

cores_per_socket       : 2

threads_per_core       : 1

cpu_mhz                : 1596

hw_caps                : bfebfbff:20100800:00000000:00000940:0000e3bd:00000000:00000001:00000000

virt_caps              : hvm

total_memory           : 4022

free_memory            : 636

node_to_cpu            : node0:0-1

node_to_memory         : node0:636

node_to_dma32_mem      : node0:636

max_node_id            : 0

xen_major              : 4

xen_minor              : 0

xen_extra              : .1-rc3

xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 

xen_scheduler          : credit

xen_pagesize           : 4096

platform_params        : virt_start=0xffff800000000000

xen_changeset          : unavailable

xen_commandline        : 

cc_compiler            : gcc version 4.4.4 (Debian 4.4.4-5) 

cc_compile_by          : waldi

cc_compile_domain      : debian.org

cc_compile_date        : Wed Jun 30 14:32:51 UTC 2010

xend_config_format     : 4

Entre las capacidades de virtualización completa resalta HVM, por lo que podemos levantar sistemas operativos no-linux (BSD, macOSX, Windows, etc).

¿Qué ganamos con esto?

Imaginen las posibilidades, una máquina con Xen, permite a un usuario correr una VM MS Windows en un entorno “no privilegiado”, sin embargo, el acceso a recursos PCI y VGA le permitirá al usuario acceder como si estuviera en una máquina nativa, con la seguridad de estar encima de un entorno Xen, podemos lograr cosas como:

  • Si a la máquina le cae un virus, eliminamos la máquina virtual y restauramos de alguna copia
  • Podemos jugar de manera full y nativa los juegos de Windows, ya que la aceleración 3D directX encontrará los drivers “oficiales” del hardware.

Por ahora, solo aquellos CPUs que soporten VT-d e iommu podrán ejecutar VGA Passthrough; pero esto representa una ventaja enorme tanto de KVM y de Xen como herramientas de virtualización.

Por ahora, muestro un Windows XP corriendo desde una VM de Xen, mi configuración es:

  • Xen System de GNU/Linux Debian (4.0)
  • Soporte iommu, VT-d y HVM activado
  • Tarjeta de video Intel 965 y CPU Core 2 Duo L7500
  • VM para Xen de Windows XP, con 1Gb de RAM asignado, 64 MB de Video y 2 CPUs en modo compartido (no tengo más!).

Con esta configuración, logré correr la VM en dos combinaciones de resolución:

1024×768 a 32 bits

y 1280×1024 a 16 bits

Hacen falta más pruebas, benchmarks, etc (e instalar programas en la VM) para demostrar el rendimiento de la VM Xen.

Acá un par de pantallazos:

Windows XP corriendo a *casi* full pantalla en una VM Xen, desde un entorno openBox.

El paseo de “Bienvenida”, mostrando las animaciones …

Un MS Windows 2003 Adv. Server corriendo a 1280×1024 dentro de un gnome con compiz!

Futuro

La idea es clara, para aprovechar al máximo el hardware de nuestros equipos, la virtualización es algo necesario y para poder correr cosas como aplicaciones gráficas, juegos y otras aplicaciones de alta demanda gráfica pues VGA Passthrough promete ser la “solución definitiva” para la migración efectiva de todos esos exigentes usuarios.

¿Imaginan tener un equipo de esos Quad-Core, con 3 sistemas operativos en HVM corriendo en paralelo?

Imaginenlo, un MacOS X para el diseñador entusiasta que usa Photoshop, al lado un Windows donde tiene cargado su juego favorito y todo eso sobre el confiable y robusto Linux de siempre.

¡Adiós Excusas de migración! …

About these ads

14 Respuestas a “[Xen] VT-d (VGA) Passthrough y el rendimiento de las VM en Xen

    • Gracias Exodus por el comentario … Estoy realmente depurando el “walkthrough” puesto que hay varias cosas para hacer y realmente tampoco es que cuento con muy buen hardware, luego de esta experiencia pensaba montar Xen en mi desktop (pues cuenta con una Nvidia 8400 GT) y hacer un howto + videos oficial.

      Pendiente! :)

  1. Saludos, que buena noticia, seria un gran paso a la migracion definitiva de gran numero de usuarios e incursionamiento de otros tantos, pero he de suponer que no sera tan sencillo por las limitaciones que muchas veces se presentan por los fabricantes de hardware y sus controladores. Pero positive…

    • Si, completamente cierto, los requerimientos de hardware y las limitaciones que los fabricantes establecen para que pueda Xen ejecutar correctamente las extensiones VT-d y el soporte para IOEMMU, además de la inexistencia de un wiki Debian oficial sobre el asunto, pasa a ser una tarea de más ensayo y error.
      Sin embargo, en lo que tenga un HOWTO oficial, lo publicaré por acá! …

      Gracias por el comentario!

  2. Pingback: Tweets that mention [Xen] VT-d (VGA) Passthrough y el rendimiento de las VM en Xen | Phenobarbital con Soda! -- Topsy.com·

  3. Saludos amigo, mira desde tu charla el sabado en el dia debian me estoy interesando en la virtualizacion bajo Xen, quiero probar algo distinto al VirtualBox o VMWare, me gustaria que me señalaras un buen tutorial para comenzar a trabajar con xen en debian squeeze

  4. Pingback: Como jugar Juegos para windows en una VM pero con 3D directX nativa·

  5. epale muy buenooo ese post mira una pregunta como puedo hacer un pci passtrough en kvm nadamas teniendo el soporte de cpu intel vt y no de mother board vt-d tengo una maquina virtual en elastix y una tarjeta digium tdm800 y quisiera utilizarla de esa forma como podria hacerlo gracias de antemano

    • Hola David, jajaja … no también ciertamente me gustaría hacer esa prueba, técnicamente cualquier hardware puede ser pasado a través de PCI passthrough, sin embargo, hacer las pruebas para ver si el Elastix en una VM y dadhi pueden tener acceso exclusivo al mismo es algo completamente distinto (la gestión de interrupciones es bastante intensiva en una tarjeta Digium).
      Claro, tu idea es bastante interesante, Xen lo hace más fácil a través de PCI-bind, con KVM se requiere soporte MMIO (un chip VT-d con soporte IOMMU, es a juro, si no lo posees, no podrás lograr el paso directo del PCI del host al cliente) ..

      haz probado el comando -pcidevice de kvm? es -pcidevice bus:id:func, ejemplo, mi tarjeta de video:
      kvm -pcidevice 00:19.0 (other commands)

      • gracias por responder tendras una forma de comunicacion mas rapida noc gtalk o algo asi.
        si ya probe ese comando incluso hice una prueba por que hice una VM en windows y use el comando hostusb: 00:05.1 por decir algo pero era un magic jack y bueno me funciono perfectamente la instalacion y abre el magic jack da tono y marco y todo pero a la hora de llamar y establecer comunicacion se apaga la vm sola capaz aparece pantralla azul pero no lo se simplemente se apaga estoy trabajando todo esto en proxmox ve q utiliza kvm y openvz para virtualizar

  6. Muy buen post!!! Preguntas:
    a_ Como puedo averiguar si mi nb con i5 tiene soporte VT-d
    b_ Se podrá utilizar esta tecnología con las HybridGraphics; por ejemplo dejando la placa intel para el linux y la radeon para la VM ???
    Y seria muy hacerlo con KVM

    • saludos Tesla!
      En tu BIOS debes tener la opción intel VT-d, la cual (al igual que la virtualización) debes habilitar, apagar el equipo y volver a encender.
      Luego, verificas con:
      dmesg | grep -e DMAR -e IOMMU
      Y si la placa madre soporta dual-graphics e intel VT-d, el que tengas un iCore5 hace que muy probablemente puedas hacer uso de VT-d con dual-graphics.
      Saludos!

Deja un comentario

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