NVidia-GPU von VirtualBox verwenden?

28

Wie bringe ich den VirtualBox-Gast dazu, die NVidia-Grafiken zu verwenden?

Host-Setup:

  • Windows 7 x64

  • NVidia Optimus

  • In der NVIDIA-Systemsteuerung habe ich den Hochleistungs-NVIDIA-Prozessor explizit ausgewählt für:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Wenn VirtualBox ausgeführt wird, wird es von der NVidia-Software nicht als Anwendung aufgeführt, die die NVidia-GPU verwendet. Daher gehe ich davon aus, dass VirtualBox die Nvidia-GPU in der Tat nicht verwendet.

Gast:

  • Windows 7 x64 (dh dasselbe wie der Host)

  • Gastzusätze installiert

  • 3D-Beschleunigung in den VirtualBox-Einstellungen aktiviert: Anzeige / Video / 3D-Beschleunigung aktivieren

  • Was Rhinoceros , eine OpenGL-fähige Anwendung, als Videoadapter meldet:

    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
    

    Für mich sieht es so aus, als ob die virtuelle Maschine die 3D-Hardwarebeschleunigung des Hosts verwendet, aber leider die von Intel.

Feklee
quelle
2
VMs erhalten keinen direkten Hardwarezugriff - sie erhalten eine virtuelle GPU. . . damit verbundene Frage: superuser.com/questions/395245/...
ernie
6
Mit @ernie VirtualBox können Gäste direkt auf die OpenGL-API der GPU des Hosts zugreifen. Soweit ich das beurteilen kann, funktioniert das auf meiner Maschine. Nur VirtualBox verwendet die Intel-GPU anstelle der NVidia-GPU. Zitat aus dem VirtualBox-Handbuch : "Mit dieser Funktion versucht
Feklee
@feklee Der Titel der Frage ist irreführend: Sie möchten die nVidia-GPU für VBox verwenden. "Von" ist ebenfalls möglich, bedeutet aber etwas anderes: Hardware-Passthrough, d. H. Greifen Sie direkt in der VBox auf die GPU des Hosts zu.
Larkey
Suchen Sie nach "virtualbox passthrough video".
e-info128

Antworten:

20

Mir ist klar, dass ein paar Jahre vergangen sind, aber ich wollte antworten, da dieser Beitrag ziemlich hoch erscheint, wenn Sie nach "virtualbox 3d multiple GPU" googeln. In der vergangenen Zeit sind die Dinge viel einfacher und besser geworden.

Leute, die über diesen Thread stolpern, werden wahrscheinlich hier landen, weil sie einen Laptop oder PC mit zwei GPUs haben, was heutzutage sehr verbreitet ist - besonders bei Gaming-Laptops. Die integrierte Intel-GPU wird zum Rendern von Fenstern und allgemeinen Anwendungen verwendet. Anwendungen, die die GPU-3D-Funktionalität verwenden, sollten dies jedoch über die leistungsstärkere Nvidia-GPU tun.

Heute habe ich eine Ubuntu-VM auf meinem Laptop erstellt, um eine plattformübergreifende Entwicklung durchzuführen. Bis auf die extrem langsame Gast-VM war alles in Ordnung, und es gab keine Erklärung dafür, da CPU, Arbeitsspeicher und Festplatte alle eine geringe Auslastung aufwiesen.

Es dauerte nicht lange, um herauszufinden, dass die Videoleistung das Problem verursachte. Das Starten von Anwendungen, das Maximieren / Minimieren von Fenstern - alles, was wir 2019 für selbstverständlich hielten, aber eine 3D-Beschleunigung benötigen, um mit einer angemessenen Geschwindigkeit zu arbeiten - verwendete GPU 0.

Dies konnte leicht festgestellt werden, da Windows 10 jetzt die Möglichkeit hat, die GPU-Auslastung mithilfe des "Task-Managers" und anschließend der Registerkarte "Leistung" anzuzeigen. Und ich konnte sehen, wie ich Fenster bewegte, maximierte und minimierte, die über die GPU auf dem Host ausgeführt wurden. Diese GPU auf dem Host ist die integrierte Intel HD GPU, und ich wollte die NVidia GTX-1050ti verwenden, bei der es sich um die GPU1 handelte.

Nach dem Durchsuchen habe ich nicht wirklich irgendwo einen Ort gefunden, an dem Sie die zu verwendende GPU angeben können. Aber dieser Thread und einige andere haben mich daran erinnert, dass Sie bei solchen Setups in die NVidia-Systemsteuerung gehen müssen, dann "3d-Einstellungen verwalten" und dann die Registerkarte "Programmeinstellungen".

Sie werden "Virtualbox" wahrscheinlich nicht in der Liste finden. Sie können jedoch auf die Schaltfläche "Hinzufügen" klicken und virtualbox.exe hinzufügen. Möglicherweise müssen Sie das Laufwerk / den Pfad angeben, auf dem sich Ihre Virtualbox-Installation befindet. Stellen Sie nach dem Hinzufügen sicher, dass in den folgenden Einstellungen Punkt 2 ausgewählt ist. "Wählen Sie den bevorzugten Grafikprozessor für dieses Programm aus" ist auf die GPU eingestellt, die verwendet werden soll, in meinem Fall "Hochleistungs-NVIDIA-Prozessor". .

Stellen Sie es nicht auf auto und schon gar nicht auf integrated ein. Natürlich müssen Sie die VM-Einstellungen mit aktiviertem 3D-Beschleunigungsfeld festlegen und die Gastzusätze auf dem Host installieren. Nachdem Sie die Einstellungen für Host-Video-3D wie oben beschrieben festgelegt haben, fahren Sie die Gast-VM herunter, beenden Sie die virtuelle Box und starten Sie anschließend die virtuelle Box und die VM neu.

Wenn Sie task manager | performacne verwenden und den Prozess "virtualbox manager" betrachten und beobachten, welche GPU verwendet wird, wenn Sie in der Benutzeroberfläche der Gast-VM navigieren, sollten Sie feststellen, dass diese jetzt die bessere GPU verwendet. Siehe das Bild unten eingefügt.

Erwarten Sie jedoch nicht, dass Sie Spiele auf einer Gast-VM ausführen können. Die 3D-Beschleunigung ist noch nicht ganz so weit. Sie können jedoch erwarten, dass Ihr Gast ein modernes Betriebssystem und eine moderne Benutzeroberfläche hat und dass Sie eine akzeptable Erfahrung machen. Man könnte ältere Spiele in der Gast-VM spielen, wie alles, was auf DirectX9 basiert. Leider entwickelt sich die 3D-Gaming-Technologie mit der Entwicklung der Fähigkeit zur Virtualisierung der GPU schneller.

Bildschirmfoto

Thomas Carlisle
quelle
2
Ich habe heute ein wenig über die 3D-Beschleunigungsfähigkeiten von VirtualBox und VMWare recherchiert. Ab Januar 2019 ist die Auswahl von VMWare die beste Wahl, wenn die GPU-Beschleunigung in der Gast-VM für Sie wichtig ist - insbesondere, wenn Ihr Gast-Betriebssystem Windows ist. Unterstützung für VirtualBox GPU-Beschleunigungsfunktionen sind etwas weniger entwickelt, da Sie der Gast-VM nur maximal 128 MB Video-RAM zuweisen können. In VMWare können bis zu 2 GB Videospeicher zugewiesen werden. VMWare unterstützt DirectX 10 und Virtualbox unterstützt DirectX9. Wie ich in der Post gesagt habe, ist DirectX 9 ziemlich veraltet.
Thomas Carlisle
1
"" Wählen Sie den bevorzugten Grafikprozessor für dieses Programm "ist auf die GPU eingestellt, die Sie verwenden möchten." Ich sehe die obige Option nicht. Ich sehe Ambinetn, Ansiotropic Filtering ... usw., aber nichts auf "Bevorzugte Grafikprozessor auswählen"
Montag,
Sie benötigen PCI-Passthrough, obwohl ich es auf Optimus noch nicht zum Laufen gebracht habe. Trotzdem denke ich, dass es mit einigen Hacks möglich ist
kensai,
Ich habe es geschafft, einen ähnlichen Trick zu machen, um die Aktivierung der nvidea-Karte für die Virtualbox zu erzwingen, aber keiner der drei verfügbaren Grafikcontroller, die von Virtualbox bereitgestellt wurden, wurde ordnungsgemäß mit meinem Neon KDE-Gastbetriebssystem aktiviert. Ich habe massive Probleme mit der Benutzeroberfläche, daher ist die Verwendung von nvidea in meinem Fall keine Option. Dank @ThomasCarlisles Vorschlag werde ich versuchen, mit VMware zu spielen.
Arkemlar,
17

Es ist wahrscheinlich nicht möglich, dem Gast vollständigen GPU-Zugriff zu gewähren. Wenn eine virtuelle Maschine direkten Zugriff auf Ihre GPU hatte, während Ihr Host sie verwendete, würde Bad Things TM passieren, da die gemeinsame Nutzung des Speichers zwischen zwei effektiv verschiedenen Computern keine Sache ist. Zeiger und Adressen und so weiter wären sehr unterschiedlich zwischen ihnen. (Keine für Endverbraucher verfügbare Karte unterstützt die gleichzeitige Wartung von zwei Computern.)

Es gibt jedoch einige Dinge, die Sie ausprobieren können. Stellen Sie zunächst Ihren bevorzugten Grafikprozessor in der NVidia-Systemsteuerung auf den guten ein ( 3D-Einstellungen3D-Einstellungen verwaltenBevorzugter Grafikprozessor ). Das könnte dazu führen, dass VirtualBox mit der NVidia-Karte für OpenGL läuft.

Wenn dies nicht hilft, versuchen Sie , Guest Additions im abgesicherten Modus auf dem Gast zu installieren .

Schließlich auf Linux - Hosts , können Sie versuchen , die GPU durch dem die virtuelle Maschine passieren, aber das wird nur Arbeit für PCI - Karten , und ich war nicht in der Lage zu finden , ob Ihr PCI ist, und auch so, haben Sie eine gute Chance, Rippen Sie die GPU vom Host weg oder verursachen Sie andere Probleme. Finden Sie zuerst die PCI-Adresse (Bus, Gerät und Funktion) für die gute Karte. Stellen Sie den Chipsatz Ihrer VM auf ICH9 ein. Das hat nichts sofort kaputt gemacht, als ich es ausprobiert habe. Verwenden Sie dann das VBoxManage-Dienstprogramm, um die Karte anzuhängen:

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

Bei Your VM NameBedarf ersetzen . BBist die Busnummer Ihrer GPU auf dem Host; DDist das Gerät; Fist die Funktion. Nach dem @dem PCI - Steckplatz, geben Sie , dass es auf dem Gast sein wird. Beispielsweise:

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

Im Allgemeinen ist GPU-Passthrough auf einem Linux-Host mit höherer Wahrscheinlichkeit möglich. Siehe So richten Sie einen Spielcomputer mit GPU-Passthrough ein .

Ben N
quelle
2
Die Annahme, dass das Anschließen einer GPU an eine VM eine "schlechte Sache" ist, ist falsch. Es gibt eine große Community von Leuten, die dies tun möchten, um Spiel-VMs auf Bare-Metal-Hypervisoren zu erstellen. Wenn man dies unter Linux tun möchte, muss die PCIe-GPU auf eine schwarze Liste gesetzt werden, damit der Kernel nur die Grafik des Chipsatzes verwendet. Dies verhindert die "Shared Memory" Probleme. Es ist wahrscheinlich am schwierigsten, zu verhindern, dass Windows die Karte aufnimmt, und es würde wahrscheinlich erforderlich sein, das Gerät zu deaktivieren oder optimus und den nvidia-Treiber zu deinstallieren.
Tim G
@ TimG Guter Punkt, ich habe meinen Beitrag etwas geklärt. Vielen Dank!
Ben N
@BenN Tolle Antwort, aber ich brauche einen Punkt, der geklärt werden muss. Haben Sie dies selbst auf einem Windows-Host versucht? Das Handbuch besagt, dass dies nur auf Linux-Hosts verfügbar ist ( virtualbox.org/manual/ch09.html#pcipassthrough ), und ich selbst hatte kein Glück, dass es mit einem Windows-Host funktioniert.
Baris Demiray
@BarisDemiray Wenn ich mich richtig erinnere, hat der Befehl beim Versuch keine Fehler gemeldet, aber ich glaube nicht, dass ich getestet habe, dass die VM das Gerät verwenden konnte. Es ist allerdings lange her, sorry.
Ben N
Hallo @BenN, vielen Dank, dass du dir die Zeit genommen hast zu antworten. Genau das ist passiert, als ich es versuchte, keine Fehler in der Befehlszeile, noch keine Grafikkarte in der VM.
Baris Demiray