2014-07-09 20:41:04 +0000 2014-07-09 20:41:04 +0000
30
30

Używać GPU NVidia z VirtualBox?

_Jak sprawić, by gość VirtualBoxa korzystał z grafiki NVidii? _

Konfiguracja hosta:

  • Windows 7 x64

  • NVidia Optimus

  • W NVIDIA Control Panel wyraźnie zaznaczyłem Wysokowydajny procesor NVIDIA dla:

  • Kiedy VirtualBox jest uruchomiony, wtedy oprogramowanie NVidii nie wymienia go jako aplikacji, która używa GPU NVidii. Dlatego zakładam, że VirtualBox rzeczywiście nie używa GPU Nvidia.

Guest:

  • Windows 7 x64 (czyli taki sam jak host)

  • Guest Additions installed

  • 3D acceleration enabled in VirtualBox settings: Display / Video / Enable 3D Acceleration

  • Co jako adapter video zgłasza Rhinoceros , aplikacja obsługująca OpenGL:

Odpowiedzi (2)

22
22
22
2019-01-18 20:23:51 +0000

Zdaję sobie sprawę, że minęło kilka lat, ale chciałem odpowiedzieć, ponieważ ten post pojawia się dość wysoko, gdy google dla “virtualbox 3d multiple GPU”. W czasie, który upłynął, rzeczy 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 PC, który ma dwa GPU, co jest dość powszechne w dzisiejszych czasach - szczególnie w laptopach do gier. Wbudowany procesor graficzny Intela jest używany do renderowania okien i ogólnych aplikacji, ale aplikacje, które wykorzystują funkcje 3D GPU, powinny to robić za pośrednictwem wydajniejszego procesora graficznego Nvidia.

Dzisiaj, tworzyłem maszynę wirtualną Ubuntu na moim laptopie, aby wykonać pewne prace rozwojowe na różnych platformach i wszystko było w porządku, z wyjątkiem tego, że maszyna wirtualna gościa była niezwykle powolna i nie było na to żadnego wytłumaczenia, ponieważ CPU, pamięć, dysk wykazywały niskie wykorzystanie.

Nie zajęło dużo czasu, aby dowiedzieć się, że to wydajność wideo była przyczyną problemu. Uruchamianie aplikacji, maksymalizacja/minimalizacja okien - wszystko, co w 2019 roku uznajemy za oczywiste, ale wymaga akceleracji 3D do działania z jakąkolwiek rozsądną prędkością - wykorzystywało GPU 0.

Łatwo było to ustalić, ponieważ Windows 10 ma teraz możliwość sprawdzenia wykorzystania GPU za pomocą “menedżera zadań”, a następnie zakładki “wydajność”. I mogłem zobaczyć, jak przesuwałem okna, maksymalizowałem, minimalizowałem, co było robione przez GPU na hoście. GPU na hoście to zintegrowany procesor graficzny Intel HD, a ja chciałem użyć NVidia GTX-1050ti, który był GPU1.

Po rozejrzeniu się nie znalazłem nigdzie miejsca, w którym można by określić, którego GPU użyć. Ale ten wątek i kilka innych przypomniały mi, że w tego typu konfiguracjach trzeba wejść do panelu sterowania NVidii, następnie “manage 3d settings”, potem zakładka “Program Settings”.

Na liście raczej nie znajdziesz “Virtualboxa”. Możesz jednak nacisnąć przycisk “Dodaj” i dodać virtualbox.exe. Być może trzeba będzie wywiercić otwór w dysku/ścieżce, gdzie znajduje się instalacja virtualboxa. Po dodaniu go, w ustawieniach poniżej upewnij się, że pozycja 2. “Wybierz preferowany procesor graficzny dla tego programu” jest ustawiony na GPU, którego chcesz użyć, co w moim przypadku było “Wysokowydajny procesor NVIDIA”.

Nie ustawiaj go na auto, a już na pewno nie ustawiaj go na zintegrowany. Oczywiście w ustawieniach maszyny wirtualnej musisz mieć zaznaczone pole akceleracji 3D, a na hoście musisz mieć zainstalowane dodatki dla gościa. Ale po ustawieniu ustawień wideo 3d hosta, jak opisano powyżej, zamknij VM gościa, zamknij virtualbox, a następnie ponownie uruchom virtualbox i VM.

Jeśli użyjesz menadżera zadań|performacne i spojrzysz na proces “virtualbox manager” i zobaczysz, jaki GPU jest używany podczas nawigacji po interfejsie użytkownika maszyny wirtualnej gościa, powinieneś zobaczyć, że używa on teraz lepszego GPU. Zobacz obrazek wklejony poniżej.

To wszystko, nie oczekuj, że będziesz w stanie uruchamiać gry w maszynie wirtualnej gościa. Akceleracja 3D pass thru wciąż nie jest tak daleko posunięta. Ale możesz oczekiwać, że będziesz miał nowoczesny OS i UI w swoim gościu, i będziesz miał akceptowalne doświadczenie. Można by było grać w starsze gry w maszynie wirtualnej gościa, jak cokolwiek opartego na DirectX9. Niestety, wraz z rozwojem możliwości wirtualizacji GPU, technologia gier 3d ewoluuje szybciej.

17
17
17
2015-12-31 17:15:00 +0000

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 układu GPU, podczas gdy Twój host z niego korzysta, działyby się złe rzeczyTM , ponieważ współdzielenie pamięci pomiędzy dwoma efektywnie różnymi komputerami nie jest rzeczą oczywistą; wskaźniki, adresy i inne rzeczy byłyby bardzo różne pomiędzy nimi. (Żadna karta dostępna na rynku konsumenckim nie obsługuje obsługi dwóch komputerów jednocześnie.)

Są jednak pewne rzeczy, których możesz spróbować. Po pierwsze, ustaw preferowany procesor graficzny na dobry w Panelu sterowania NVidii (3D SettingsManage 3D settingsPreferred graphics processor). To może sprawić, że VirtualBox wybierze kartę NVidii dla OpenGL.

Jeśli to nie pomoże, spróbuj zainstalować Guest Additions w Safe Mode na gościu.

Wreszcie, na hostach linuksowych, możesz spróbować przepuścić GPU do maszyny wirtualnej, ale to zadziała tylko dla kart PCI, a nie udało mi się ustalić, czy twoja jest PCI, a nawet jeśli, masz duże szanse na oderwanie GPU od hosta lub spowodowanie innych problemów. Najpierw znajdź adres PCI (magistrala, urządzenie i funkcja) dla dobrej karty. Ustaw chipset maszyny wirtualnej na ICH9; gdy próbowałem, nie spowodowało to natychmiastowego uszkodzenia. Następnie użyj narzędzia VBoxManage, aby podłączyć kartę:

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

Zamień Your VM Name odpowiednio. BB to numer magistrali twojego GPU na hoście; DD to urządzenie; F to funkcja. Po @ wpisz slot PCI, w którym będzie się znajdował na komputerze-gościu. Na przykład:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:00.0@03.01.0

Ogólnie rzecz biorąc, GPU passthrough jest bardziej prawdopodobne, że będzie możliwe na hoście linuksowym. Zobacz Jak skonfigurować maszynę do gier z GPU passthrough .