Hallo Leute,
ich bin in den letzten Tagen auf ein ziemlich interessantes Thema gestoßen, das sich mit aktuellen Windows Professional Versionen und ein paar Powershell-Skripts relativ leicht in die Tat umsetzen lässt.
Und zwar geht es um die Paravirtualisierung der Grafikkarte in Hyper-V, mit dem Ziel die 3D-Beschleunigungs-Funktionalität sowohl dem Virtualisierer (Host), als auch darauf laufenden virtuellen Maschinen (Clients) zu Verfügung zu stellen.
Hardwaremäßig besteht mein Setup aus dem Laptop "Asus ROG Strix G15 Advantage Edition G513" mit 5900HX CPU, RX6800M GPU und 64 GB RAM als Host und dem HP Elite X2, das auf die VM zugreift. Beim Client ist es eigentlich nur wichtig, dass dieser H.264 oder H.265 decoding in Hardware kann, 5 Ghz WiFi ist für niedrigere Latenz auch von Vorteil. Dadurch, dass der Laptop keinen MUX-Switch hat, bin ich auf keine großen Probleme gestoßen. Das einzige was dazu notwendig war um ein Bildschirmsignal zu erhalten war, dass ich beide Grafikadapter an die VM durchreichen musste. Zuerst habe ich die RX6800M per easy-gpu-pv Setup an die VM angebunden und dann habe ich händisch nach dem shutdown der VM, mit
Add-VMGpuPartitionAdapter -VMName $vm
die zweite GPU hinzugefügt, die den Namen AMD Radeon(TM) Graphics trägt und eigentlich in der CPU sitzt. Der virtuellen Maschine habe ich 8 logische Kerne, 16 GB RAM und 250 GB auf der NVMe Disk zugewiesen.
Wenn man in den VMs spielen will, ist es von Vorteil etwas anderes als RDP zu verwenden, denn z.B. FullHD @ 60 Hz sind mit dem Remote Desktop Protokoll aktuell noch nicht möglich. Ein schöner Nebeneffekt an dem GPU-Passthrough ist die Tatsache, dass auch die Video-Encoding Engine zur Verfügung steht und einer Fernsteuerungsmöglichkeit mit niedriger Latenz und umgeleiteter Tonausgabe somit kein gravierendes Hindernis im Weg ist.
Es gibt hier verschiedene Möglichkeiten dies technisch umzusetzen und ich will keine Empfehlungen aussprechen, mir bekannte Programme dafür sind:
AMD Link
Nvidia Gamestream
Sunshine (game stream host)
Moonlight (game stream client)
Parsec (game stream client + host + relay server)
Ich habe mich für den proof-of-concept für Parsec entschieden, da dies für Privatanwender kostenfrei nutzbar ist und sich leicht implementieren ließ, es fungiert sowohl als relay server für eine verschlüsselte P2P-Verbindung zwischen Host und Client und es kümmert sich um Video en- und decoding, wie auch Ton und Eingabegeräte. Die Umsetzung habe ich mit Windows 11 Professional am Host und in der VM gemacht, als erstes galt es das Hyper-V Feature am Host zu aktivieren. Easy-GPU-PV und die beinhalteten Powershell Skripts halfen mir enorm bei der weiteren Fertigstellung. Die Powershell Skripts erstellen die VM, partitionieren die GPU nach den eigenen Bedürfnissen, ich habe 50% gewählt, kopieren die Gerätetreiber in die dafür vorgesehenen Verzeichnisse, fügen die GPU der VM hinzu und installieren Windows und parsec in der VM.
Dann habe ich das OpenCL and OpenGL Compatibility Pack am Host und in der VM installiert und, was sonst, als erstes Quake 3 Gold Edition installiert. Was soll ich sagen, es funktioniert fast schon zu gut, die Quake 3 VM hat auf 1600x1200 @ 60Hz 32-Bit mit hohen Einstellungen noch nie mehr als 10% Last auf der RX6800M verursacht, man könnte vermutlich also eine ganze Menge VMs laufen lassen. Als nächstes habe ich Unreal Tournament GOTY Edition getestet, im Direct3D Modus 1920x1080 mit hohen Einstellungen waren es bis zu 25% Last auf der RX6800M.
Wenn die VM mit einem externen, virtuellen Hyper-V Switch verbunden ist, kann man auch gemeinsam im Internet spielen, man kann mit einem internen Switch auch eine eigene, virtuelle kleine LAN-Party machen. Die Blizzard Spiele die ich erfolgreich getestet habe sind: Starcraft Remastered, Heroes of the Storm, Diablo III, die restlichen Spiele funktionieren vermutlich auch. Was ich nicht auf Anhieb zum Laufen gebracht habe ist Diablo 2 Resurrected, das schmierte ab mit einem "Failed to Initialize Graphics Device". Was nicht gut funktioniert hat ist das Game-Verzeichnis des Hosts in die VM einzubinden um so Speicherplatz zu sparen, jede Game-Instanz will ihr eigenes Verzeichnis. Im 3DMark Time Spy hat die "Mystery Machine" 10600 Punkte erzielt.
Leider muss man sagen, es gibt einige Publisher die nicht wollen, dass man in virtuellen Maschinen spielt, z.B. League of Legends und World of Tanks ließen mich nicht auf die game server connecten. Also für alles lässt es sich nicht ohne weiteres verwenden, aber ältere Spiele mit eigenem LAN-Modus funktionieren viele und auch die von mir getesteten Blizzard-Spiele liefen ziemlich gut.
Hilfreiche Links:
https://learn.microsoft.com/en-us/w...-assignment-ddahttps://www.tenforums.com/virtualiz...v-guest-vm.htmlhttps://github.com/jamesstringerparsec/Easy-GPU-PVhttps://www.computerweekly.com/de/r...er-V-einrichtenhttps://forum.level1techs.com/t/2-g...2234/255?page=1