¿Como usar la Tarjeta Grafica Dedicada en una Maquina Virtual?

Buenas a todos XD veréis llevo 6 horas leyendo y buscando información por Internet sobre como logar hacer funcionar la tarjeta gráfica dedicada en una Maquina Virtual y la verdad es que estoy algo liado no he encontrado mucha información y la que encuentro no es clara y toda es aplicable bajo Linux lo cual me hace pensar ¿es que nadie se ha visto en la necesidad de usar maquinas virtuales con Windows de Anfitrión? es que manda narices que encuentre información con Linux de anfitrión pero con Windows nada de nada.

Mi intención es simple usar una maquina Virtual con aplicaciones pesadas mientras con el anfitrión hago otros menesteres el motivo de esto es variado pero digamos que es una mezcla de:
1) Necesidad (programas antiguos que no hay huevos ha hacerlos correr en Windows 7 x64).
2) Comodidad (es un coñazo tener que crear una partición para instalar Windows XP y de x64 si quiero que me administre las características de mi equipo actual) y tener que reiniciar el equipo para usar X aplicación cuando a lo mejor estoy trabajando sobre 7 (lo cual me obliga a tener que guardar el trabajo y reiniciar para usar X aplicación bajo XP).
Eso sin contar los posibles problemas de compatibilidad que pudiesen surgir en las aplicaciones si instalo la versión de x64 (necesaria para que me reconozca mas características del equipo).
3) Pues no se ya que me pongo pues mera curiosidad (por lo que he estado leyendo lo que quiero hacer en linux es posible pero no es un proceso trivial hay que cumplir varios prerequisitos y hacer algunos ajustes nada sutiles de los que seguro se aprende algo XD).

Todo esto viene a raíz de que Virtualbox solo me deja administrar un máximo de 128MB de memoria de vídeo lo cual tiene su gracia porque según leía esto es debido a que por lo general salvo que se cumplan ciertos requisitos una maquina virtual no puede tratar con una Tarjeta Gráfica Dedicada con lo cual los 128MB de vídeo (según he leído corresponden a la Integrada del Procesador) aquí es cuando me surge la primera pregunta (entiendo que esto es valido para Intel (la gama escritorio) pero yo tengo en este PC un AMD FX-8350 ¿No se supone que este procesador no tiene Gráfica Integrada? ¿de donde salen entonces esos 128MB de vídeo [burla2] [burla2]? ¿Quien tenga un intel Xeon también tendría entonces 128MB mágicos [carcajad] ?

Bueno al tajo....
El equipo desde el que actualmente escribo es:
Placa: Asus Crosshair V Formula-Z
CPU: FX-8350 4,5GHz
GPU: AMD R9 270X
SO: Windows 7 Ultimate SP1



Según he estado leyendo para hacer que la maquina virtual sea capaz de administrar la Grafica Dedicada tienes que tener:
https://www.virtualbox.org/manual/ch09.html
1) Your motherboard has an IOMMU unit.
2) Your CPU supports the IOMMU.
3) The IOMMU is enabled in the BIOS.
4) The VM must run with VT-x/AMD-V and nested paging enabled.
5) Your Linux kernel was compiled with IOMMU support (including DMA remapping, see CONFIG_DMAR kernel compilation option). The PCI stub driver ( CONFIG_PCI_STUB ) is required as well.
6) Your Linux kernel recognizes and uses the IOMMU unit ( intel_iommu=on boot option could be needed). Search for DMAR and PCI-DMA in kernel boot log.


Según esto:
http://www.overclock.net/t/1307834/xen- ... s-adapters
http://www.hardocp.com/article/2012/11/ ... d_review/2

No debería tener ningún problema de compatibilidad respecto a los que ha Hardware se refiere.

Pero el problema es que no me queda nada claro el tema porque todo de lo que encuentro se hace bajo Linux de anfitrión no bajo Windows
Virtualbox así lo especifica.
Soporte experimental para el paso a través de PCI en los hosts de Linux; ver Sección 9.6, "passthrough PCI".

He buscado otras maquinas virtuales pero para lo que busco todos recomiendan XEN o KVM que si mal no he entendido no son maquinas virtuales "perse" son Hipervisores (emulación de bajo nivel) y según tengo entendido esto no es posible bajo windows por su propia naturaleza "tal y como esta programado Windows Actualmente".

La pregunta es ¿Es posible tener acceso a la GPU dedicada trabajando con Windows de Anfitrión?

Saludos
Si no entiendo mal tu consulta, te diría que con Windows Server 2012 R2 e Hyper-V sí es posible, con VirtualBox y WMWare lo desconozco. La funcionalidad de WS2012R2 se denomina RemoteFX.

Debe usarse Hyper-V y ejecutar una máquina virtual de Generación 1. Por otro lado deberás tener, al menos una GPU compatible directX 9.0 y con SLAT - Second Level Address Translation (puede utilizarse más de 1 GPU pero deben ser idénticas).

Entiendo que no podrás ejecutarlo sobre Windows 7, es decir, MV con WServer2012R2 sobre Win 7 y, en la MV anidar otra creo que no será posible. Sí puedes hacerlo sobre un sistema con WServer2012R2 ya que permite anidamiento de MV's. Si no me equivoco Windows 10 con la Treshold2 también lo soporta o, cuando menos, está en camino de soportarlo y lo hará en breve.
@Madoc
Yo lo que busco es simplemente poder tener la GPU dedicada trabajando sobre una Maquina Virtual dado que actualmente las Maquinas Virtuales no tienen acceso a los puertos PCI de la Gráfica (al menos de forma nativa).

Haber si lo he entendido yo bien.
Según lo que dices:
1) No es posible lograr que una maquina Virtual tenga acceso directo a la GPU con Windows 8.1 o Inferior de anfitrión.
2) Windows 10 según dices en su ultima versión (salida hace unos días) va camino de soportarlo ¿podrías poner información de esto?.
3) Actualmente esto solo se puede lograr con Windows Server 1012 R2 ¿Supongo que con Windows Server 2016 TP3 también no?
4) Tampoco puedo hacer la trapa de Instalar una maquina Virtual con Windows Server 2012 R2 he instalar sobre este otra maquina Virtual (tiene su lógica porque la primera maquina Virtual depende del SO Anfitrión y por lo tanto no tiene acceso a los puerto PCI de la Gráfica).

Saludos
Hyper-V es el único que permite tal situación, como ya te ha comentado @madoc. Entre otras cosas, porque Hyper-V es un virtualizador de Tipo 1 o "Bare Metal". Tanto VMWare como VirtualBox, si bien son más amigables para usarse, son virtualizadores de tipo 2 y su relación con el hardware está más limitada.

El asunto con VMWare y VirtualBox es que, para tener un acceso directo al hardware, necesitan andar puenteando y buscando soluciones intermedias, ya que Windows no les permite funcionar de otra manera. En el caso de la gráfica, lo que hacen es virtualizar su propio modelo de gráfica que luego "transmite" a la gráfica madre. Es un modelo virtual que ni de lejos consigue el mismo rendimiento que una gráfica conectada al PCI del ordenador. Supongo que, en el caso de tener una doble gráfica, si fuerzas la ejecución del virtualizador con la gráfica dedicada en lugar de con la integrada, algo más de rendimiento conseguirás, pero nunca será lo mismo.

El caso del Hyper-V es distinto. Tiene acceso directo al hardware, pero su idea es tener las máquinas virtuales funcionando en segundo plano y que los usuarios accedan usando los servicios de Escritorio Remoto, como si se tratara de un servicio más de Windows. La desventaja de esto es que la interoperabilidad y la facilidad de uso se ven altamente resentidas. Además, sólo en el caso de usar un Windows Server 2012 R2 con SP1 o superor como host, puedes usar la tecnología RemoteFX que es la que te permite usar la aceleración gráfica remotamente.

Respecto a lo de anidar máquinas virtuales, es una nueva función en fase de prueba que se ha añadido en la compilación 10576 de Windows 10. No sé si actualmente está disponible en la actual compilación estable de Windows 10 o si se añadirá en el futuro "Windows 10 Server". De todas formas, esto me parece una pasada, sinceramente. Plantéate en este punto si no te merece la pena ya particionar. [+risas]
[quote="Perfect Ardamax"]@Madoc
Yo lo que busco es simplemente poder tener la GPU dedicada trabajando sobre una Maquina Virtual dado que actualmente las Maquinas Virtuales no tienen acceso a los puertos PCI de la Gráfica (al menos de forma nativa).

Haber si lo he entendido yo bien.
Según lo que dices:
1) No es posible lograr que una maquina Virtual tenga acceso directo a la GPU con Windows 8.1 o Inferior de anfitrión.
2) Windows 10 según dices en su ultima versión (salida hace unos días) va camino de soportarlo ¿podrías poner información de esto?.
3) Actualmente esto solo se puede lograr con Windows Server 1012 R2 ¿Supongo que con Windows Server 2016 TP3 también no?
4) Tampoco puedo hacer la trapa de Instalar una maquina Virtual con Windows Server 2012 R2 he instalar sobre este otra maquina Virtual (tiene su lógica porque la primera maquina Virtual depende del SO Anfitrión y por lo tanto no tiene acceso a los puerto PCI de la Gráfica).

Saludos[/quote

Joer! me he autoleído y no me he entendido ni yo... [facepalm] A ver si te aclaro un poco más...

1) Con Windows 8.1 (y anteriores) tampoco es posible. Tampoco con versiones anteriores a WinServer 2012 R2.
2) http://blogs.technet.com/b/virtualizati ... ation.aspx
3) Imagino que si se podrá al ser una versión más moderna pero no lo sé.
4) Si te entiendo bien eso es anidar y sólo va con Windows Server 2012 R2 SP1 o con Windows 10 64 bits (el artículo anterior te indica en qué versión de insider y también te lo indica @juananbow).

Lo que sí es posible, como ampliación de lo que indica @juananbow en el 3er párrafo de su post, es manejar las Máquinas Virtuales con conexión a máquina virtual del administrador de Hyper-V (al estilo de VirtualBox o WMWare) y no solamente con Escritorio Remoto pero pierdes la posibilidad de obtener sonido y copiar y pegar entre mv's o mv's y host (y/o viceversa). Excepto con sistemas invitados Windows 8.1 y Windows Server 2012 R2 que si soportan modo de sesión mejorada e incorporan esas funcionalidades mira lo siguiente https://social.technet.microsoft.com/Fo ... per-v-y-xp

Espero haberte aclarado algo más el tema junto con los comentarios de @JuananBow
JuananBow escribió:Hyper-V es el único que permite tal situación, como ya te ha comentado @madoc. Entre otras cosas, porque Hyper-V es un virtualizador de Tipo 1 o "Bare Metal". Tanto VMWare como VirtualBox, si bien son más amigables para usarse, son virtualizadores de tipo 2 y su relación con el hardware está más limitada.

El asunto con VMWare y VirtualBox es que, para tener un acceso directo al hardware, necesitan andar puenteando y buscando soluciones intermedias, ya que Windows no les permite funcionar de otra manera. En el caso de la gráfica, lo que hacen es virtualizar su propio modelo de gráfica que luego "transmite" a la gráfica madre. Es un modelo virtual que ni de lejos consigue el mismo rendimiento que una gráfica conectada al PCI del ordenador. Supongo que, en el caso de tener una doble gráfica, si fuerzas la ejecución del virtualizador con la gráfica dedicada en lugar de con la integrada, algo más de rendimiento conseguirás, pero nunca será lo mismo.

El caso del Hyper-V es distinto. Tiene acceso directo al hardware, pero su idea es tener las máquinas virtuales funcionando en segundo plano y que los usuarios accedan usando los servicios de Escritorio Remoto, como si se tratara de un servicio más de Windows. La desventaja de esto es que la interoperabilidad y la facilidad de uso se ven altamente resentidas. Además, sólo en el caso de usar un Windows Server 2012 R2 con SP1 o superor como host, puedes usar la tecnología RemoteFX que es la que te permite usar la aceleración gráfica remotamente.

Respecto a lo de anidar máquinas virtuales, es una nueva función en fase de prueba que se ha añadido en la compilación 10576 de Windows 10. No sé si actualmente está disponible en la actual compilación estable de Windows 10 o si se añadirá en el futuro "Windows 10 Server". De todas formas, esto me parece una pasada, sinceramente. Plantéate en este punto si no te merece la pena ya particionar. [+risas]

Un par de detalles:
Vmware ESXi permite el passtrough de la gafica o cualquier pci sin problema, el que no lo permite es workstation que en todo caso hace traducion de las instruciones graficas, basicamente usa un wrapper al estilo de Wine para traducir los comandos gráficos, el rendimiento no es excepcional y tiene limitaciones de compatibilidad pero funciona bien en general para un uso "normal" (tampoco te pongas a ejecutar el crysis así que no irá nipatrás). En ESXi si que el rendimiento es nativo ya que la grafica se pasa en passtrough. Worstation al ser un wrapper tiene limitacion que solo funciona con ciertos sistemas operativos, ESXi no tiene ninguna limitacion en cuanto al sistema operativo ya que la máquina virtual la usa de manera nativa.

RemoteFX usa el mismo mecanismo que workstation, no es que pase la grafica nativa, es un wrapper que traduce al vuelo las instruciones de la máquina virtual a la física, sin embargo como tanto la máquina virtual como la física usan el mismo directx la traducion es practicamente instantanea y no se pierde demasiado rendimiento. También tiene la misma limitación que workstation que solo permite ciertos sistema operativos.

Otros sistemas estilo KVM tb permiten apsar directamente la grafica de manera nativa.

De todas maneras te comento un detalle importante, si pasas la grafica de manera nativa tendrás un rendimiento nativo de ella pero la pasas con todas las condiciones, es decir, el sistema host dejaría de poder usar la grafica. De esta manera si tienes una única grafica piensa que cuando la asignes a la máquina virtual esa grafica desaparecerá para el host, si lo que quieres es tener un sistema operativo en el que trabajar pero cuando quieras puedas usar una máquina virtual mientras el otro sistema se pueda seguir usando esta solucion no te vale. Si tienes varias gráficas puedes hacerlo sin problema, con la condicion que si asocias una grafica a una VM ten en cuanta que la salida de video la veras por el conector físico de esa grafica y no por la consola del sistema de virtualización.

En los casos que te comentaba antes que solo tengas una gráfica busca mas que asignar la grafica sistemas que traduzcan las instrucones al vuelo aunque aquí todas tiene limitaciones: Workstation solo soporta Directx10 y opengl 3.3 . Remotefx soporta directx11 pero opengl se queda en el 1.1 (en windows server 2016 si que soportará DX12 y opengl 4.4). Virtualbox petardea si no es con DX9 y opengl 3, soporta mas arriba pero a mi siempre me dió problemas.

Despues de todo el churramen ya depede un poco que es lo que quieras, por que veo que quieres hacer passtrough en tu primer mensaje pero me da que lo quieres hacer en tu pc de uso cotidiano con una grafica así que no te recomiendo que uses ese camino.

Ya como punto extra tienes graficas ya especificas de virtualización como las nvidia gri(existen modelos de consumo que se pueden transformar a grid con un poco de bricolage) que son graficas que si están preparadas para que se usen de manera nativa por sistemas de virtualización y que su imagen se pase por el host principal, es decir que tu tienes tu escritorio normal y las máquinas virtuales usan esta grafica pero devuelven la imagen a tu consola de tu equipo, es mas estás graficas ni siquiera tienen salida de video física.
Hola, yo hace tiempo que estoy probando con pci passtrough

Primero probé el RemoteFX de windows server 2012, pero el rendimiento de los juegos ( que es para lo que lo queria yo ) dejaba bastante que desear, e iban bastante mas lentos que en el host... aunque ciertamente lo probe en un portatil con una 6370m.

una vez ya tenía mi ordena nuevo, empecé a probar con xenserver con otra placa, ya que la mia no soporta, a pesar de ser una 2011-v3... el resultado fue que con AMD no hay problema, pero NVIDIA tiene supuestos impedimentos para trabajar con maquinas virtuales, aunque ellos lo niegan, con cada revision de driver ha sido mas dificil hacerla funcionar.

luego descubrí unraid que se basa en libvirt para virtualizar, aqui ya con mi placa, descubrí que virtualizar una gpu nvidia para un host y otra gpu amd para otro host era perfectamente posible

dado que unraid es de pago y que no permite tener un control sobre el host me pase a libvirt directamente. primero empecé con debian y conseguí realizar el passthrough, pero tenia como lagazos en el escritorio de windows que no conseguí resolver ni con memoria dedicada para ese host, por lo que probé fedora, aqui primero probe con el kernel 4.2 creo que era, que todo iba bien, a excepcion de que no podia dedicar mas de 2gb a un guest. Con kernel 4.1 habia veces que con el torrent puesto en el host, el ordenador se quedaba pillado y habia que reiniciar de botonazo y ya con el kernel 4.0.4 he conseguido que todo vaya perfecto...

tambien he de decir que tengo una ati hd2600 para el host, una nvidia 970 para un guest y una amd 7770 para otro guest y que soy incapaz de hacerlo funcionar con solo 2 gpu, que es como funcionaba en unraid.

Ahora estoy probando con el ballooning de la ram, que soy incapaz de hacerlo funcionar.
ZeusAO escribió:Hola, yo hace tiempo que estoy probando con pci passtrough

Primero probé el RemoteFX de windows server 2012, pero el rendimiento de los juegos ( que es para lo que lo queria yo ) dejaba bastante que desear, e iban bastante mas lentos que en el host... aunque ciertamente lo probe en un portatil con una 6370m.

una vez ya tenía mi ordena nuevo, empecé a probar con xenserver con otra placa, ya que la mia no soporta, a pesar de ser una 2011-v3... el resultado fue que con AMD no hay problema, pero NVIDIA tiene supuestos impedimentos para trabajar con maquinas virtuales, aunque ellos lo niegan, con cada revision de driver ha sido mas dificil hacerla funcionar.

luego descubrí unraid que se basa en libvirt para virtualizar, aqui ya con mi placa, descubrí que virtualizar una gpu nvidia para un host y otra gpu amd para otro host era perfectamente posible

dado que unraid es de pago y que no permite tener un control sobre el host me pase a libvirt directamente. primero empecé con debian y conseguí realizar el passthrough, pero tenia como lagazos en el escritorio de windows que no conseguí resolver ni con memoria dedicada para ese host, por lo que probé fedora, aqui primero probe con el kernel 4.2 creo que era, que todo iba bien, a excepcion de que no podia dedicar mas de 2gb a un guest. Con kernel 4.1 habia veces que con el torrent puesto en el host, el ordenador se quedaba pillado y habia que reiniciar de botonazo y ya con el kernel 4.0.4 he conseguido que todo vaya perfecto...

tambien he de decir que tengo una ati hd2600 para el host, una nvidia 970 para un guest y una amd 7770 para otro guest y que soy incapaz de hacerlo funcionar con solo 2 gpu, que es como funcionaba en unraid.

Ahora estoy probando con el ballooning de la ram, que soy incapaz de hacerlo funcionar.


Ten en cuenta que el balloning en principio solo debería saltar cuando realmetne el host se está quedando sin memoria pero dentro de unos margenes que considera que se puede "prestar" ram de una vm a otra, en equipos con poca ram no es efectivo y suele pasar directamente a swapear a disco
Buenas! Cómo están? Estuve leyendo atentamente los comentarios, estoy intentando levantar una máquina virtual y hacer uso desde ella de una tarjeta gráfica (Nvidia Geforce 820M) de la forma más eficiente posible para hacer pruebas con juegos. Según leí, varios de ustedes (en especial @ZeusAO ), estuvieron experimentando con ésto.

Quería preguntarles a qué conclusión llegaron y qué podrían recomendar, en lo posible me gustaría ejecutar una máquina virtual sobre un host con Windows 8.1, y la máquina virtual correría Windows 7. Si la única opción es utilizando un SO que se ejecute directamente al hardware, tendré que intentarlo.

Desde ya, muchas gracias!
8 respuestas