Używasz procesora graficznego NVidia z VirtualBox?

29

Jak zmusić gościa VirtualBox do korzystania z grafiki NVidia?

Konfiguracja hosta:

  • Windows 7 x64

  • NVidia Optimus

  • W Panelu sterowania NVIDIA wyraźnie wybrałem Wydajny procesor NVIDIA dla:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • Gdy VirtualBox jest uruchomiony, oprogramowanie NVidia nie wyświetla go jako aplikacji korzystającej z procesora graficznego NVidia. Dlatego zakładam, że VirtualBox rzeczywiście nie używa procesora graficznego Nvidia.

Gość:

  • Windows 7 x64 (tzn. Taki sam jak host)

  • Zainstalowane dodatki gości

  • Akceleracja 3D włączona w ustawieniach VirtualBox: Display / Video / Enable 3D Acceleration

  • Co nosorożec , aplikacja obsługująca OpenGL zgłasza jako karta wideo:

    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
    

    Dla mnie wygląda na to, że maszyna wirtualna korzysta z akceleracji sprzętowej 3D hosta, ale niestety Intel.

feklee
źródło
2
Maszyny wirtualne nie uzyskują bezpośredniego dostępu do sprzętu - otrzymują wirtualny procesor graficzny. . . powiązane pytanie: superuser.com/questions/395245/…
ernie,
6
@ernie VirtualBox może zapewnić gościom bezpośredni dostęp do interfejsu API OpenGL GPU hosta. O ile mogę stwierdzić, że działa na moim komputerze. Tylko VirtualBox używa procesora graficznego Intel zamiast procesora graficznego NVidia. Cytat z instrukcji VirtualBox : „Dzięki tej funkcji, jeśli aplikacja wewnątrz maszyny wirtualnej korzysta z funkcji 3D za pośrednictwem interfejsów programistycznych OpenGL lub Direct3D 8/9, zamiast emulować je w oprogramowaniu (co byłoby wolne), VirtualBox spróbuje użyć sprzęt 3D Twojego hosta ”.
feklee
@feklee Tytuł pytania wprowadza w błąd: chcesz użyć procesora graficznego nVidia dla VBox. Możliwe jest również „From”, ale oznacza to, co jest inne: Przekazywanie sprzętu, tj. uzyskaj dostęp do GPU hosta bezpośrednio z VBox.
larkey
askubuntu.com/questions/139320/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Znajdź informacje na temat „wideo przejścia przez Virtualbox”.
e-info128

Odpowiedzi:

20

Zdaję sobie sprawę, że minęło kilka lat, ale chciałem odpowiedzieć, ponieważ ten post pojawia się dość wysoko, gdy wyszukujesz w Google hasło „virtualbox 3d multiple GPU”. W minionym czasie sprawy stały się o wiele prostsze i lepsze.

Ludzie, którzy natkną się na ten wątek, prawdopodobnie wylądują tutaj, ponieważ mają laptopa lub komputer PC, który ma dwa procesory graficzne, co jest obecnie dość powszechne - szczególnie na laptopach do gier. Wbudowany procesor graficzny Intel służy do renderowania okien i aplikacji ogólnych, ale aplikacje korzystające z funkcji GPU 3D powinny to robić za pośrednictwem wydajniejszej karty graficznej Nvidia.

Dzisiaj budowałem maszynę Wirtualną Ubuntu na moim laptopie, aby wykonać programowanie międzyplatformowe, i wszystko było w porządku, z wyjątkiem maszyny wirtualnej gościa, która była bardzo powolna i nie było na to żadnego wyjaśnienia, ponieważ procesor, pamięć i dysk wykazywały niskie wykorzystanie.

Nie trwało długo, aby dowiedzieć się, że przyczyną problemu była wydajność wideo. Uruchamianie aplikacji, maksymalizowanie / minimalizowanie okien - wszystko, co uważamy za oczywiste w 2019 r., Ale wymaga akceleracji 3D do pracy z dowolną rozsądną prędkością - korzystało z GPU 0.

Łatwo było to ustalić, ponieważ system Windows 10 może teraz zobaczyć wykorzystanie GPU za pomocą „menedżera zadań”, a następnie karty „wydajność”. I widziałem, jak przenosiłem okna, zmaksymalizowane, zminimalizowane, które były wykonywane za pomocą GPU na hoście. Ten procesor graficzny na hoście to zintegrowany procesor graficzny Intel HD i chciałem użyć NVidia GTX-1050ti, czyli GPU1.

Po przeszukaniu nie znalazłem nigdzie miejsca, w którym można określić, którego procesora graficznego użyć. Ale ten wątek i niektóre inne przypomniały mi, że w tego rodzaju konfiguracjach musisz przejść do panelu sterowania NVidia, a następnie „zarządzać ustawieniami 3D”, a następnie zakładką „Ustawienia programu”.

Na liście prawdopodobnie nie znajdziesz „Virtualbox”. Możesz jednak nacisnąć przycisk „Dodaj” i dodać virtualbox.exe. Być może będziesz musiał zgłębić dysk / ścieżkę, w której znajduje się instalacja Virtualbox. Po dodaniu go w ustawieniach poniżej upewnij się, że pozycja 2. „Wybierz preferowany procesor graficzny dla tego programu” jest ustawiona na procesor graficzny, którego chcesz używać, czyli w moim przypadku „Wydajny procesor NVIDIA” .

Nie ustawiaj go na auto i na pewno nie ustawiaj go na zintegrowany. Oczywiście potrzebujesz ustawień VM z zaznaczonym polem akceleracji 3D i potrzebujesz dodatków gościnnych zainstalowanych na hoście. Ale po skonfigurowaniu ustawień wideo hosta 3d zgodnie z powyższym opisem zamknij maszynę wirtualną gościa, zamknij wirtualne okno, a następnie ponownie uruchom wirtualną maszynę wirtualną i maszynę wirtualną.

Jeśli użyjesz menedżera zadań | performacne i przyjrzysz się procesowi "virtualbox manager" i zobaczysz, z czego korzysta GPU podczas nawigacji po interfejsie użytkownika maszyny wirtualnej gościa, powinieneś zobaczyć go przy użyciu lepszej karty graficznej. Zobacz obraz wklejony poniżej.

To powiedziawszy, nie oczekuj, że będziesz mógł uruchamiać gry na maszynie wirtualnej gościa. Przekaz przyspieszenie 3D nadal nie jest tak daleko. Ale możesz oczekiwać, że będziesz mieć nowoczesnego systemu operacyjnego i interfejsu użytkownika u swojego gościa, i będziesz mieć satysfakcjonujące wrażenia. Można by grać w starsze gry na maszynie wirtualnej gościa, jak wszystko oparte na directX9. Niestety, wraz z rozwojem możliwości wirtualizacji układów GPU, technologia gier 3d ewoluuje szybciej.

Zrzut ekranu

Thomas Carlisle
źródło
2
Zrobiłem dzisiaj trochę badań nad możliwościami akceleracji 3D VirtualBox i VMWare, a od stycznia 2019 r., Jeśli akceleracja GPU w maszynie wirtualnej gościa jest dla Ciebie ważna, wybranie VMWare jest najlepszym rozwiązaniem - szczególnie jeśli system operacyjny gościa to Windows. Obsługa VirtualBox Możliwości akceleracji GPU są nieco mniej rozwinięte, ponieważ możesz dać maszynie wirtualnej gościa maksymalnie 128 MB pamięci RAM wideo, a w VMWare można przydzielić do 2 GB pamięci wideo. VMWare obsługuje DirectX 10, a Virtualbox obsługuje DirectX9. Jak powiedziałem w poście, directx 9 jest dość przestarzały.
Thomas Carlisle
1
„„ Wybierz preferowany procesor graficzny dla tego programu ”jest ustawiony na procesor graficzny, którego chcesz używać.„ Nie widzę powyższej opcji. Widzę Ambinetna, filtrowanie ansiotropowe ... itd., Ale nic na temat „wybierz preferowany procesor grapics”
moondra
Potrzebujesz przejścia przez PCI, chociaż jeszcze go nie uruchomiłem na Optimusie, ale myślę, że przy niektórych
włamaniach
Udało mi się zrobić podobną sztuczkę, aby wymusić włączenie karty nvidea dla virtualbox, ale żaden z 3 dostępnych kontrolerów graficznych dostarczonych przez Virtualbox nie działał poprawnie z moim gościnnym systemem operacyjnym Neon KDE. Mam ogromne usterki interfejsu użytkownika, więc używanie nvidea w moim przypadku nie jest opionem. Dzięki propozycji @ThomasCarlisle postaram się grać z VMware.
Arkemlar
17

Zapewnienie gościowi pełnego dostępu do GPU prawdopodobnie nie jest możliwe. Gdyby maszyna wirtualna miała bezpośredni dostęp do twojego GPU, gdy host go używał, nastąpiłoby Bad Things TM , ponieważ współdzielenie pamięci między dwoma efektywnie różnymi komputerami nie jest niczym; Wskaźniki i adresy, a co nie byłoby bardzo różne między nimi. (Żadna karta dostępna dla konsumentów nie obsługuje obsługi dwóch komputerów jednocześnie).

Jest jednak kilka rzeczy, które możesz wypróbować. Najpierw ustaw preferowany procesor graficzny na dobry w Panelu sterowania NVidia ( Ustawienia 3DZarządzaj ustawieniami 3DPreferowany procesor graficzny ). To może sprawić, że VirtualBox będzie działał z kartą NVidia dla OpenGL.

Jeśli to nie pomoże, spróbuj zainstalować dodatki gościa w trybie awaryjnym na gościu.

Wreszcie na hostach z systemem Linux możesz spróbować przenieść GPU na maszynę wirtualną, ale będzie to działać tylko w przypadku kart PCI, a ja nie byłem w stanie ustalić, czy masz kartę PCI, a mimo to masz duże szanse na zgrywanie GPU z hosta lub powodowanie innych problemów. Najpierw znajdź adres PCI (magistrala, urządzenie i funkcja) dla dobrej karty. Ustaw chipset maszyny wirtualnej na ICH9; to nie od razu niczego zepsuło, kiedy spróbowałem. Następnie użyj narzędzia VBoxManage, aby dołączyć kartę:

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

Wymień Your VM Nameodpowiednio. BBjest numerem magistrali twojego GPU na hoście; DDjest urządzeniem; Fjest funkcją. Po @, wprowadź gniazdo PCI, które będzie na gościu. Na przykład:

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

Ogólnie rzecz biorąc, przekazywanie GPU jest bardziej prawdopodobne na hoście Linux. Zobacz Jak skonfigurować automat do gier z przejściem na GPU .

Ben N.
źródło
2
Założenie, że dołączenie GPU do maszyny wirtualnej jest „Złą Rzeczą” jest nieprawidłowe; istnieje duża społeczność ludzi, którzy chcą to zrobić, aby tworzyć wirtualne maszyny do gier na hiperwizorach od zera. Jeśli ktoś chciałby to zrobić w Linuksie, wymagałoby to umieszczenia na czarnej liście procesora graficznego PCIe, aby jądro przechodziło tylko do grafiki chipsetu; zapobiega to problemom z „pamięcią współdzieloną”. Zapobieganie podniesieniu karty przez system Windows jest prawdopodobnie najtrudniejszym problemem do rozwiązania w przypadku tego pytania i prawdopodobnie wymagałoby wyłączenia urządzenia lub odinstalowania programu Optimus i sterownika NVIDIA.
Tim G
@TimG Dobrze, nieco wyjaśniłem swój post. Dzięki!
Ben N
@BenN Świetna odpowiedź, ale potrzebuję wyjaśnienia. Czy próbowałeś tego samodzielnie na hoście Windows? Podręcznik mówi, że jest on dostępny tylko na hostach Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) i ja sam nie miałem szczęścia, że ​​działa z hostem Windows.
Baris Demiray
@BarisDemiray Jeśli dobrze pamiętam, polecenie nie zgłosiło żadnych błędów podczas próby, ale nie sądzę, że przetestowałem, czy maszyna wirtualna mogła korzystać z urządzenia. To było dawno, przepraszam.
Ben N
Cześć @BenN, wielkie dzięki za poświęcenie czasu na odpowiedź. Dokładnie tak się stało, gdy próbowałem, bez błędów w wierszu polecenia, a nawet bez karty graficznej w maszynie wirtualnej.
Baris Demiray