¿Usar la GPU NVidia de VirtualBox?

29

¿Cómo hago para que el invitado VirtualBox use los gráficos de NVidia?

Configuración del host:

  • Windows 7 x64

  • NVidia Optimus

  • En el Panel de control de NVIDIA , seleccioné explícitamente el procesador NVIDIA de alto rendimiento para:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Cuando se ejecuta VirtualBox, el software NVidia no lo enumera como aplicación que utiliza la GPU NVidia. Por lo tanto, supongo que VirtualBox no usa la GPU Nvidia.

Invitado:

  • Windows 7 x64 (es decir, igual que el host)

  • Adiciones de invitados instaladas

  • Aceleración 3D habilitada en la configuración de VirtualBox: Display / Video / Enable 3D Acceleration

  • Lo que Rhinoceros , una aplicación compatible con OpenGL informa como adaptador de video:

    Humper
    Chromium
    OpenGL version: 2.1 Chromium 1.9
    Render version: 2.0
    Shading Language: 1.40 - Intel Build 9.17.10.3517
    Driver Date: NA
    Driver Version: NA
    Maximum Texture size: 8192 x 8192
    Z-Buffer depth: 32bits
    Maximum Viewport size: 8192 x 8192
    Total Video Memory: 64 MB
    

    Para mí, parece que la máquina virtual usa aceleración de hardware 3D del host, pero desafortunadamente la de Intel.

feklee
fuente
2
Las máquinas virtuales no obtienen acceso directo al hardware: obtienen una GPU virtual. . . pregunta relacionada: superuser.com/questions/395245/…
ernie
66
@ernie VirtualBox puede brindar a los invitados acceso directo a la API OpenGL de la GPU del host. Por lo que puedo decir, eso funciona en mi máquina. Solo VirtualBox está utilizando la GPU Intel en lugar de la GPU NVidia. Cita del manual de VirtualBox : "Con esta función, si una aplicación dentro de su máquina virtual usa funciones 3D a través de las interfaces de programación OpenGL o Direct3D 8/9, en lugar de emularlas en el software (que sería lento), VirtualBox intentará usar el hardware 3D de tu host ".
feklee
@feklee El título de la pregunta es engañoso: desea utilizar la GPU nVidia para VBox. 'From' también es posible pero significa algo diferente: Hardware-Passthrough, es decir. Acceda a la GPU del host directamente desde el VBox.
larkey
askubuntu.com/questions/139320/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Encuentre sobre el "video de paso virtualbox".
e-info128

Respuestas:

20

Me di cuenta de que han pasado algunos años, pero quería responder ya que esta publicación aparece bastante alta cuando buscas en Google para "virtualbox 3d multiple GPU". En el tiempo transcurrido, las cosas se han vuelto mucho más simples y mejores.

Las personas que se topan con este hilo probablemente aterrizarán aquí porque tienen una computadora portátil o PC que tiene dos GPU, lo cual es bastante común en estos días, especialmente en las computadoras portátiles para juegos. La GPU Intel integrada se usa para renderizar ventanas y aplicaciones generales, pero las aplicaciones que hacen uso de la funcionalidad GPU 3D deberían hacerlo a través de la GPU Nvidia de mayor rendimiento.

Hoy, estaba construyendo una máquina virtual Ubuntu en mi computadora portátil para hacer un desarrollo multiplataforma, y ​​todo estaba bien, excepto que la máquina virtual invitada era extremadamente lenta, y no había ninguna explicación porque la CPU, la memoria y el disco mostraban poca utilización.

No tardó mucho en darse cuenta de que era el rendimiento del video el que causaba el problema. El lanzamiento de aplicaciones, la maximización / minimización de ventanas, todo lo que damos por sentado en 2019 pero necesita aceleración 3D para funcionar a una velocidad razonable, estaba usando GPU 0.

Fue fácil determinar esto porque Windows 10 ahora tiene la capacidad de ver la utilización de la GPU usando el "administrador de tareas", luego la pestaña "rendimiento". Y pude ver a medida que movía las ventanas, maximizado, minimizado, que se hacía a través de GPU en el host. Esa GPU en el host es la GPU Intel HD integrada, y quería usar la NVidia GTX-1050ti, que era GPU1.

Después de buscar, realmente no encontré ningún lugar donde pudiera especificar qué GPU usar. Pero este hilo, y algunos otros, me recordaron que en este tipo de configuraciones tienes que ir al panel de control de NVidia, luego "administrar la configuración 3d", luego la pestaña "Configuración del programa".

Probablemente no encontrará "Virtualbox" en la lista. Pero puede presionar el botón "Agregar" y agregar virtualbox.exe. Es posible que deba profundizar en la unidad / ruta donde se encuentra la instalación de su virtualbox. Una vez que lo haya agregado, asegúrese de que el elemento 2. "Seleccione el procesador de gráficos preferido para este programa" esté configurado en la GPU que desea que use, que en mi caso fue "procesador NVIDIA de alto rendimiento" .

No lo configure en automático, y ciertamente no lo configure en integrado. Por supuesto, necesita la configuración de VM configurada con la casilla de aceleración 3D marcada, y necesita las adiciones de invitados instaladas en el host. Pero una vez que haya configurado la configuración 3D del video del host como se describe anteriormente, apague la máquina virtual invitada, salga de virtual box y luego vuelva a iniciar virtualbox y la VM.

Si usa performacne del administrador de tareas y observa el proceso del "administrador de virtualbox" y observa qué GPU se usa cuando navega por la interfaz de usuario de la máquina virtual invitada, debería verlo usando la mejor GPU ahora. Ver la imagen pegada a continuación.

Dicho todo esto, no esperes poder ejecutar juegos en una máquina virtual invitada. El paso de aceleración 3D todavía no está tan lejos. Pero puede esperar tener un SO y una interfaz de usuario modernos en su invitado, y tener una experiencia aceptable. Uno podría jugar juegos más antiguos en la máquina virtual invitada, como cualquier cosa basada en directX9. Desafortunadamente, a medida que la capacidad de virtualizar GPU evoluciona, la tecnología de juegos en 3D evoluciona más rápido.

Captura de pantalla

Thomas Carlisle
fuente
2
Investigué un poco hoy sobre las capacidades de aceleración 3D de VirtualBox y VMWare, y a partir de enero de 2019, si la aceleración de GPU en la VM invitada es importante para usted, entonces elegir VMWare es su mejor opción, especialmente si su sistema operativo invitado es Windows. Las capacidades de aceleración de GPU de VirtualBox están un poco menos desarrolladas, ya que solo puede darle a la máquina virtual invitada un máximo de 128 MB de RAM de video, y en VMWare permite asignar hasta 2 GB a la memoria de video. VMWare admite DirectX 10 y Virtualbox admite DirectX9. Como dije en la publicación, directx 9 está bastante anticuado.
Thomas Carlisle
1
"" Seleccione el procesador de gráficos preferido para este programa "está configurado en la GPU que desea que use" No veo la opción anterior. Veo Ambinetn, Ansiotropic Filtering ... etc, pero nada en "seleccione el procesador de gráficos preferido"
moondra
Necesita el paso de PCI, aunque todavía no lo hice funcionar en Optimus, todavía creo que con algunos hacks es posible
kensai
Logré hacer un truco similar para forzar la habilitación de la tarjeta nvidea para virtualbox, pero ninguno de los 3 controladores gráficos disponibles proporcionados por Virtualbox funcionó correctamente con mi sistema operativo invitado Neon KDE. Obtuve grandes fallas en la interfaz de usuario, por lo que usar nvidea en mi caso no es una opción. Gracias a la propuesta de @ThomasCarlisle, intentaré jugar con VMware.
Arkemlar
17

Probablemente no sea posible dar acceso completo a la GPU del invitado. Si una máquina virtual tuviera acceso directo a su GPU mientras su host la estaba usando, Bad Things TM ocurriría porque compartir memoria entre dos computadoras efectivamente diferentes no es una cosa; punteros y direcciones y demás serían muy diferentes entre ellos. (Ninguna tarjeta disponible para el consumidor admite el mantenimiento de dos computadoras a la vez).

Sin embargo, hay algunas cosas que puedes probar. Primero, configure su procesador de gráficos preferido en el bueno en el Panel de control de NVidia ( Configuración 3DAdministrar configuración 3DProcesador gráfico preferido ). Eso podría hacer que VirtualBox vaya con la tarjeta NVidia para OpenGL.

Si eso no ayuda, intente instalar Guest Additions en Modo seguro en el invitado.

Finalmente, en los hosts Linux , puede intentar pasar la GPU a la máquina virtual, pero esto solo funcionará para las tarjetas PCI y no pude encontrar si la suya es PCI, y aun así, tiene una buena oportunidad de arrancando la GPU del host o causando otros problemas. Primero encuentre la dirección PCI (bus, dispositivo y función) para la buena tarjeta. Establezca el conjunto de chips de su VM en ICH9; esto no rompió nada inmediatamente cuando lo probé. Luego use la utilidad VBoxManage para conectar la tarjeta:

vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f

Reemplace Your VM Namesegún corresponda. BBes el número de bus de su GPU en el host; DDes el dispositivo FEs la función. Después de @, ingrese la ranura PCI que estará en el invitado. Por ejemplo:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:[email protected]

En general, es más probable que sea posible el paso de GPU en un host Linux. Consulte Cómo configurar una máquina de juego con paso de GPU .

Ben N
fuente
2
La premisa de que adjuntar una GPU a una VM es una "mala cosa" es incorrecta; Hay una gran comunidad de personas que quieren hacerlo para crear máquinas virtuales de juegos en hipervisores de metal desnudo. Si uno quisiera hacer esto en Linux, requeriría incluir en la lista negra la GPU PCIe para que el núcleo solo vaya a los gráficos del conjunto de chips; Esto evita los problemas de "memoria compartida". Evitar que Windows recoja la tarjeta es probablemente el problema más difícil de resolver para esta pregunta, y probablemente requerirá deshabilitar el dispositivo o desinstalar optimus y el controlador nvidia.
Tim G
@TimG Buen punto, he aclarado un poco mi publicación. ¡Gracias!
Ben N
@BenN Gran respuesta, pero necesito un punto para aclarar. ¿Has probado esto tú mismo en un host de Windows? El manual dice que esto está disponible solo en hosts Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) y yo mismo no tuve suerte de que funcionara con un host Windows.
Baris Demiray
@BarisDemiray Si no recuerdo mal, el comando no informó ningún error cuando lo probé, pero no creo que haya probado que la VM pudo usar el dispositivo. Sin embargo, fue hace mucho tiempo, lo siento.
Ben N
Hola @BenN, muchas gracias por tomarse el tiempo para responder. Eso es exactamente lo que sucedió cuando lo intenté, sin errores en la línea de comando pero sin tarjeta gráfica en la VM.
Baris Demiray