Archiv verlassen und diese Seite im Standarddesign anzeigen : Spielen "unter Linux" mit virtueller Windows-Installation
Da das Thema mMn. etwas in den Vordergrund rueckt, dachte ich, man koennte sich auch hier mal darueber unterhalten. Der Post geht (bis jetzt? ;) ) nicht sehr in die Tiefe was Umsetzung und Details angeht. Ich moechte das Thema erstmal ansprechen und schauen ob hier Interesse besteht.
Seit einiger Zeit gibt es die Moeglichkeit, PCI Geraete (in dem Fall die Grafikkarte) direkt an eine VM 'durchzureichen'. Dass man das auch fuer Spiele verwenden kann, wurde schnell klar und schlaegt inzwischen auch einige Wellen.
GTA V on Linux (https://www.youtube.com/watch?v=16dbAUrtMX4)
Damit sind auch einige exotische Spielereien moeglich, wie etwa mehrere Gaming-Stationen an einem einzigen Computer zu realisieren:
2 Gamers 1 CPU (https://www.youtube.com/watch?v=LuJYMCbIbPk)
7 Gamers 1 CPU (https://www.youtube.com/watch?v=opX-AsJ5Uy8)
Manche Linuxer sehen darin eine wunderbare Loesung, andere finden es unnoetig und sinnlos. Ich habe hier mal eine kleine Liste von Vor-/Nachteilen ggue. Dual-Boot und Zweitsystem zusammengestellt. Voraussetzung ist dabei, dass man alltaeglicher Linux-Nutzer ist und Windows hauptsaechlich noch zum Spielen startet.
Vorteile:
+ Man spart sich Hardware, wenn man alternativ einen extra Spielerechner baut
+ Man muss das System nicht herunterfahren und neu starten, wenn man unter Windows Spielen will
+ Man hat die komplette Auswahl an Spielen fuer Windows und nicht die bekannten Probleme mit Verfuegbarkeit, Treibern, Performance und Kompatibilitaet unter Linux
+ Die Windows VM ist eingeschraenkter als wenn sie auf "bare metal" liefe; Netzwerkkommunikation kann z.B. einfach mit iptables kontrolliert werden; Man kann einfach Snapshots vom Image der VM machen und die Maschine nach Bedarf wieder auf diesen zuruecksetzen
+ Die Bootzeit von Windows ist schneller, als eine weitere Maschine kaltzustarten
Neutral:
o Die Grafikkarte steht unter Linux nicht zur Verfuegung. Um sie nutzen zu koennen, ist ein Reboot oder eine weitere VM mit "Linux+GK" noetig; der Punkt ist neutral, da es auch gewollt sein kann, Proprietaersoftware wie Steam, die Spiele und prop. Treiber von seinem "Haupt"system fernzuhalten.
Nachteile:
- Einrichtung nicht Trivial und fuer Einsteiger wohl eine grosse Huerde
- Nvidia mag es nicht, in einer VM zu laufen, da gibt es mglw. Probleme mit den Treibern
- Gleichzeitige Nutzung nicht wie bei zwei komplett unabhaengigen Maschinen, es muss evtl. "gewechselt" werden, je nachdem welche Ein-/Ausgabehardware doppelt vorhanden ist
- Mehr RAM benoetigt als bei dual-boot
- Performanceeinbussen (minimal)
- nicht alle Hardware kompatibel, CPU und Board muessen den passthrough unterstuetzen (Intel: VT-d, AMD: VI), gerade Intel hat die Funktion vor Skylake gerne mal "geblockt" (z.B. bei k-CPUs).
- iGPU oder Zweitgrafikkarte muessen fuer das Host-System vorhanden sein.
Die Liste ist natuerlich beliebig erweiterbar ;)
Ich habe mir am Wochenende mal testweise so eine "Spiele-VM" eingerichtet und kann gerne Hilfestellung geben und Fragen beantworten. Vielleicht interessiert das Thema hier ja den ein oder anderen.
z3ck3
2016-02-22, 11:59:45
VT-d steht bei Skylake eigentlich bei allen CPUs zur Verfügung. Bei Haswell ab Devil's Canyon auch für die K-CPUs. Ausgeschlossen waren Celeron und Pentium und die Haswell K CPUs (ausser S2011-3).
DeadMeat
2016-02-22, 12:14:20
Gibt sicher interessante Möglichkeiten, zb: einen Spiele PC für mehrere Personen einrichten und per Streaming die Ausgabe der jeweiligen VM Geräte weiter reichen per Steam zb. Eine Art Zentralisierte Konsole die in der Abstellkammer steht. Sicher eine sehr Spezielle Anwendung aber interessant ist es trotzdem.
Ausgeschlossen waren Celeron und Pentium und die Haswell K CPUs
Sowie natuerlich die Sandy und Ivy. Und die sind denke ich unter Spielern schon noch recht verbreitet, gerade die k-Modelle. Davor weiss ich es nicht.
Problematisch kann da aber auch das Mainboard sein und gerade da gibt es oft nichtmal Angaben vom Hersteller. Der Chipsatz ist dabei nicht entscheidend, aber die Option muss im BIOS ueberhaupt angeboten werden...
Gibt sicher interessante Möglichkeiten, zb: einen Spiele PC für mehrere Personen einrichten und per Streaming die Ausgabe der jeweiligen VM Geräte weiter reichen per Steam zb. Eine Art Zentralisierte Konsole die in der Abstellkammer steht. Sicher eine sehr Spezielle Anwendung aber interessant ist es trotzdem.
Genau. Denkbar waere auch, mit hardwarebeschleunigtem en-/decoding den Gast als Fenster (oder auch im Vollbild von einem Desktop) beim Host laufen zu lassen. Ggue. dem "direkten" Weg ist man in diesen Anwendungen halt eingeschraenkt, was Aufloesung, Wiederholrate und Sound angeht. Dann fehlt z.B. auch die Moeglichkeit FreeSync zu nutzen.
z3ck3
2016-02-22, 12:30:07
Steht meistens ja im Handbuch. Alle Bretter die ich die letzten Monate unter den Fingern hatte, die hatten die Option. Waren aber auch keine low Cost Boards. Ich vermute mal das eigentlich alle B und Z Chipsätze die Optionen haben sollten.
Ich werd mir das auch mal ansehen in ein paar Monaten. Man sollte sich aber schon fast überlegen dann auch das Linux Hauptsystem in einer VM zu parken. Versiebt man den Host, dann hat man auch keine Guests mehr. :D Seamless geht es ja leider eh nicht.
Hatte mir auch noch ein paar Gedanken gemacht wie Seamless Mode theoretisch doch gehen würde. Und zwar müsste man eigentlich wie beim Streaming nur den Bildinhalt aller Desktops in den Speicher streamen. Muss ja nicht mal komprimiert sein, außer es wäre schnell und verlustfrei. Der Speicherbereich müsste dann vom Host ausgelesen werden und angezeigt werden. Um die Monitore für die Grafikkarte zu simulieren müsste man einen Dongle haben der der Grafikkarte mitteilt welche Auflösung, Wiederholfrequenz etc. Eine Treiber im Guest müsste dem Host dann noch mitteilen welche Bildinhalte Fenster und welche Inhalte zum Desktop gehören. Auch ob die Maus und die Tastatur gelockt wird ist etc. Optimal wäre dann noch das dem Host Icons und Namen der Fenster in der Taskbar mitgeteilt werden, so das man die Apps auch direkt in der Taskbar des Hosts sieht und man die Taskbar des Guests deakivieren kann. Das ganze in Virtualbox und ich wäre glücklich XD
Abnaxos
2016-02-22, 14:30:13
o Die Grafikkarte steht unter Linux nicht zur Verfuegung. Um sie nutzen zu koennen, ist ein Reboot oder eine weitere VM mit "Linux+GK" noetig; der Punkt ist neutral, da es auch gewollt sein kann, Proprietaersoftware wie Steam, die Spiele und prop. Treiber von seinem "Haupt"system fernzuhalten.
Das müsste mit Bumblebee problemlos machbar sein. Bei mir ist die nVidia-GPU normalerweise ausgeschaltet, ich verwende Bumblebee meist, um Zugriff auf den Mini-DisplayPort und damit den zweiten Monitor zu kriegen, selten für ein Spiel. Sonst ist die nVidia-GPU ausgeschaltet und der Treiber nicht geladen.
So müsste man doch theoretisch problemlos auch eine Windows-VM starten und ihr die diskrete GPU überlassen können?
Da bin ich mir gerade nicht sicher. Ich glaube man muss das Geraet direkt beim boot an vfio binden, ob das spaeter noch moeglich ist, muesste ich selbst erst nochmal in Erfahrung bringen.
Ganon
2016-02-22, 14:49:55
Ich weiß nicht ob die Grafikkarten da PCIe Hotplug unterstützen. Normalerweise muss man an deren Adresse nämlich den PCIstub Treiber laden. Weil das Init kommt dann von der VM. Das ist auch unabhängig davon, ob da jetzt der NVidia-Treiber läuft oder nicht. Das Gerät hängt trotzdem dran. Und wenn man das jetzt an eine VM übergibt wäre das ungefähr so, als wenn man die Karte aus dem PCIe Slot zieht. Ich glaube das verweigert der Kernel dann.
Aber mit einer NVidia Karte braucht man das eh nicht probieren. Der NVidia Treiber verweigert eine Installation / den Start, wenn er in einer VM läuft. Es geht wohl bisher nur mit AMD Karten. Ich glaube NVidia bietet bei Quadro-Karten solche Optionen. Aber ich muss mir gerade mal das Video angucken, wie die das da gemacht haben. edit: Ah OK, kommerzielle Virtualisierung.
Man sollte übrigens auch nicht vergessen, dass es mit der Grafikkarte nicht getan ist. Ein zweites Eingabeset (Tastatur + Maus) und bestenfalls eine zweite Soundkarte wären auch noch nötig.
d.h., selbst wenn kein Treiber/Modul geladen wird, das ein Geraet benutzt (sichtbar mit lspci -k), ist die PCI Adresse sozusagen auf das entsprechende Modul gemappt?
pcistub braucht die Addressen ja auch direkt in der cmdline. Alternativ zu pcistub geht auch vfio-pci, wobei ich nicht glaube, dass es da sehr anders ist. Die entsprechenden vfio Module kommen ins initramfs und werden dann statisch geladen.
Abnaxos
2016-02-22, 15:06:55
Bumblebee macht da etwas Magie, es entfernt den NVidia-Treiber tatsächlich aus dem Kernel, wenn er nicht verwendet wird. Das ist bei einem "normalen" Setup nicht möglich (ich vermute mal, das liegt am KMS; bei einem solchen Setup wird der NVidia-Treiber ja auch nicht beim Booten geladen, er ist AFAIK nicht einmal in der initrd mit drin).
Aber ja, lspci listet die NVidia-"Karte" auf, auch wenn sie ausgeschaltet und der Treiber nicht geladen ist.
Dass sich der Windows-Treiber in einer VM gar nicht erst installieren lässt, ist allerdings sehr hässlich …
Ganon
2016-02-22, 15:17:00
Ja wie gesagt. Das entladen des NVidia Treibers ist kein Hexenwerk. rmmod nvidia und gut ist. Es geht um das Hardware-Gerät an sich. Unabhängig vom Treiber.
Ich hab an sich auch Interesse so ein Teil mal zu bauen. Aber wie gesagt. Die Kosten sind so hoch wie zwei einzelne Computer. Weil statt sich 2 4-Kerner hinzustellen braucht man halt 1 8-Kerner und die werden schnell sehr teuer.
D.h. bis auf Platz spart man sich im Endeffekt nicht viel.
Man sollte übrigens auch nicht vergessen, dass es mit der Grafikkarte nicht getan ist. Ein zweites Eingabeset (Tastatur + Maus) und bestenfalls eine zweite Soundkarte wären auch noch nötig.
In meinem kurzen Test habe ich es so gemacht, dass ich die USB Geraete (Tastatur und Maus, evtl Headset) mit uebergebe. Wenn ich Windows dann herunterfahre, gehen die Geraete wieder an den Host.
Der Sound geht bei mir weiterhin ueber einen AVR. Dazu sind halt zusaetzlich zu den 2 DP noch 2 HDMI Kabel noetig ;) Das HDMI Audiogeraet der Grafikkarte wird ja als eigenes PCI Geraet gelistet und kann so auch durchgereicht werden.
Wenn man beide gleichzeitig benutzen will, tut es evtl. ein USB Umschalter.
Bumblebee macht da etwas Magie, es entfernt den NVidia-Treiber tatsächlich aus dem Kernel, wenn er nicht verwendet wird. Das ist bei einem "normalen" Setup nicht möglich (ich vermute mal, das liegt am KMS; bei einem solchen Setup wird der NVidia-Treiber ja auch nicht beim Booten geladen, er ist AFAIK nicht einmal in der initrd mit drin).
Aber ja, lspci listet die NVidia-"Karte" auf, auch wenn sie ausgeschaltet und der Treiber nicht geladen ist.
Dass sich der Windows-Treiber in einer VM gar nicht erst installieren lässt, ist allerdings sehr hässlich …
"Magie" wuerde ich das nun nicht nennen, dabei entfernst du einfach das Kernel-Modul, das ist eigentlich ganz normal.
Dass die Karte danach noch gelistet wird, auch.
Mit aelteren Treibern geht es ja noch :ulol:
edit: oh, Ganon war wieder schneller..
Ich hab an sich auch Interesse so ein Teil mal zu bauen. Aber wie gesagt. Die Kosten sind so hoch wie zwei einzelne Computer. Weil statt sich 2 4-Kerner hinzustellen braucht man halt 1 8-Kerner und die werden schnell sehr teuer.
Willst du waehrend du den Gast benutzt, rechenintensive Tasks auf dem Host laufen lassen? Ansonsten tut es doch auch weiterhin ein 4-Kerner. Die Einbussen sind ja nun nicht gigantisch. Wenn Interesse besteht, kann ich ja mal etwas vermessen.
Mit einem octa braeuchtest du dann auch eine weitere GK, da keine iGPU.
Ganon
2016-02-22, 15:24:39
In meinem kurzen Test habe ich es so gemacht, dass ich die USB Geraete (Tastatur und Maus, evtl Headset) mit uebergebe. Wenn ich Windows dann herunterfahre, gehen die Geraete wieder an den Host.
Ja klar. Du verlierst im Endeffekt damit aber fast alle Vorteile gegenüber eines DualBoot. Snapshots usw. OK. Aber dafür geht die schnelle GPU für Linux halt flöten...
Mit Dualboot hast du in beiden Systemen jeweils die beste Performance.
Ja, das ist klar und wurde ja auch von Anfang an so genannt ;)
Kannst du dazu was sagen?
d.h., selbst wenn kein Treiber/Modul geladen wird, das ein Geraet benutzt (sichtbar mit lspci -k), ist die PCI Adresse sozusagen auf das entsprechende Modul gemappt?
Abnaxos
2016-02-22, 15:35:47
Das entladen des NVidia Treibers ist kein Hexenwerk. rmmod nvidia und gut ist.
Wenn man einfach den NVidia-Installer für Linux durchlaufen lässt, funktioniert ein einfaches rmmod nicht, auch wenn X11 den Intel-Treiber verwendet: "Device or resource busy". Ich vermute eben, dass KMS daran schuld ist.
Das Paket nvidia-bumblebee macht da schon noch ein wenig Zusatzmagie, damit sich NVidia nicht als die-Grafik-gehört-mir installiert, sondern als bei-Bedarf-nachladbar. Es lässt den NVidia-Installer compile-only laufen, pflanzt die Binaries dann aber selber so ins System, wie es das braucht (eine andere Schwierigkeit ist auch, dass die richtige libGL genommen wird, je nachdem, ob die Intel- oder die NVidia-GPU verwendet werden soll).
Aber wir schweifen ab …
Ganon
2016-02-22, 15:36:50
@iuno
Was steht denn bei dir unter "Kernel driver in use", wenn du das NVidia Modul entlädst?
Ganon
2016-02-22, 15:41:03
Wenn man einfach den NVidia-Installer für Linux durchlaufen lässt, funktioniert ein einfaches rmmod nicht, auch wenn X11 den Intel-Treiber verwendet: "Device or resource busy". Ich vermute eben, dass KMS daran schuld ist.
Ja gut, wenn du auf der NVidia gebootet hast, dann geht das so natürlich nicht.
Optimus läuft ja intern anders. Dort läuft die Bildausgabe oft über den Intel-Chip. Dort sollte das KMS von NVidia eigentlich gar nicht geladen sein. Denn dort wird eigentlich (ich hab so ein System nicht) auf der NVidia Kart ein separater X11-Server gestartet und dann wird der Framebuffer der NVidia Karte abgegriffen.
@iuno
Was steht denn bei dir unter "Kernel driver in use", wenn du das NVidia Modul entlädst?
Ich habe eine AMD. radeon ist blacklisted, damit vfio-pci sich die Karte krallen kann, dementsprechend ist der Treiber dann auch eingetragen. Ohne vfio oder stub war es natuerlich keiner.
Wie gesagt, ich muesste mal ausfindig machen, ob man das vfio binding auch spaeter machen kann.
Abnaxos
2016-02-22, 16:01:49
Ja gut, wenn du auf der NVidia gebootet hast, dann geht das so natürlich nicht.
Optimus läuft ja intern anders. Dort läuft die Bildausgabe oft über den Intel-Chip. Dort sollte das KMS von NVidia eigentlich gar nicht geladen sein. Denn dort wird eigentlich (ich hab so ein System nicht) auf der NVidia Kart ein separater X11-Server gestartet und dann wird der Framebuffer der NVidia Karte abgegriffen.
Richtig, Bumblebee startet einen zweiten X-Server :8. Im einfachen Fall (schnelleres 3D) wird die Anwendung dort rendern, das Bild abgegriffen und auf :0 (Intel) kopiert.
Es gibt auch das Umgekehrte, was ich häufiger verwende: Da der DisplayPort nur mit der NVidia-Karte verkabelt ist, muss die laufen, um einen zweiten Bildschirm nutzen zu können. In dem Fall krallt sich :8 tatsächlich den externen Monitor, mittels intel-virtual-output wird ein virtueller Monitor auf :0 eingerichtet, den man normal mit xrandr als zweiten Bildschirm verwenden kann. Das Bild wird dann vom virtuellen Monitor auf :8 kopiert.
Man kann sogar beides tun: Das Spiel rendert (erstmal unsichtbar) auf :8, das wird auf :0 kopiert, wenn auf es auf dem zweiten Bildschirm ist in den virtuellen Screen und von dort zurück auf :8 für die Ausgabe.
Es ist Magie … :biggrin:
Limit
2016-02-29, 11:38:36
So etwas wollte ich schon vor Jahren mal machen. Leider hatte ich aber beim CPU-Kauf nicht aufgepasst (Ivy-Bridge k-CPU). Aber dafür habe ich dann später einen Grund mehr auf einen Zen 8-Kerner zu wechseln. :wink:
Ja das ging mir ähnlich.. Von aber meinen Sandy k noch ganz gut los geworden. Wenn du eine APU mit zen Architektur willst musst du aber noch länger warten...
RavenTS
2016-02-29, 16:10:40
...
Ich habe mir am Wochenende mal testweise so eine "Spiele-VM" eingerichtet und kann gerne Hilfestellung geben und Fragen beantworten. Vielleicht interessiert das Thema hier ja den ein oder anderen.
Vielleicht magst du ja eine kleine Doku schreiben, wie du dabei vorgegangen bist und welche Hard- und Software du verwendet hast?! :-)
Achill
2016-02-29, 17:58:14
Ich hatte das schon einmal in Star Citizen Forum bei den Linux'ern verlinkt, da diese auf ein baldigen Client inkl. Vulkan hoffen... :D
Eine gute Anleitung (nicht selbst getestet) findet man bei Arch-Linux:
- https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
- Blog der sich um das Thema dreht: http://vfio.blogspot.de
Ich nehme bisher aber den einfachen Weg mit einen Win10 auf einer extra Platte.
Mein Debian-Stable würde schon bei den benötigten Packages nicht passen bzw. Testing kommt nicht auf den Teil meines Rechners der fürs Arbeiten genutzt wird.
Genau an den Eintrag im arch wiki habe ich mich auch gehalten. Die ist denke ich auch fuer "Einsteiger" ziemlich gut umzusetzen.
Das war ja eher ein quick and dirty test, das ganze habe ich (noch) nicht im "produktiven" Einsatz.
ich nutze auch sonst arch, Kernel ist ein selbst kompilierter 4.4er, wobei das nicht von Belang ist weil hinsichtlich des Themas hier keine Anpassung noetig ist.
Ich habe vfio-pci statt stub genutzt. Gastsystem war w10, was seine eigene Partition/Festplatte bekommen hat.
Hardware:
i7-6700k, Z170 Board, 16 GiB RAM (im Test 12 an den Gast), R9 290X
Wenn du Interesse hast, das nachzumachen empfehle ich dir die Seite im arch wiki. Wenn es hakt oder dir alles spanisch vorkommt, kannst du ja nochmal nachfragen ;)
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.