5 Minuten Debian/Ubuntu gpu passthrough Anleitung

Transistor 22

Lt. Commander
Registriert
März 2018
Beiträge
1.431
Viele Linux Umsteiger haben das Problem, das ihnen einige Programme aus Windows auch unter Wine oder Proton leider nicht funktionieren. Da das rebooten in Windows jedoch sehr nervig sein kann, deshalb empfehle ich eine Qemu/Virt-Manager Windows VM.
Diese hat jedoch standardmäßig leider keine 3D Beschleunigung, weshalb z. B. 3D Spiele in der VM meist nicht möglich sind. Dieses Problem lässt sich beheben, in dem man eine 2. GPU des Host-Rechners in die VM umleitet, dies ist jedoch meist mit viel Aufwand verbunden und viele Einsteiger scheitern an dem Problem.

Um dieses Problem zu lösen, habe ich ein interaktives automatisiertes Bash Programm namens gptools erstellt,
welches es ermöglicht, eine GPU in unter 5 Minuten von Debian/Ubuntu basierten Systemen zu isolieren.

Anforderungen:
  • Die Virtualisierungstechnologie ihrer CPU wurde im UEFI aktiviert
  • IOMMU wurde im BIOS/UEFI aktiviert
  • Mindestens 2 GPUs (Oder eine iGPU für den Host und eine GPU für gpu passthrough
  • Debian/Ubuntu basierende Distribution mit Grub 2 (Pop OS & KDE Neon funktionieren wegen Systemd-Boot leider noch nicht)
gptools wird automatisch testen, ob sie die Anforderungen erfüllen und wird ihnen bei bedarf Lösungsvorschläge aufzeigen.

Der folgende Teil erklärt, wie sie gptools installieren und nutzen.
Um die Installation zu vereinfachen, habe ich dafür ein Debian Paket erstellt. Dieses können sie hier herunterladen. Dieses können sie dann über ihren Paketinstaller ihres Vertrauens installieren, z. B. über gDebi
Screenshot_20200430_232531.png

oder klassisch über den Terminal mit folgendem Befehl.
Bash:
sudo dpkg -i /path/to/gptools-0.7.3-amd64.deb

Jetzt sollten sie in ihrem Anwendungsstartmenü den Eintrag GPTools finden, über diesen können sie GPTools einfach starten.

Nach dem Starten werden sie von folgendem Menü begrüßt,
Screenshot_20200430_232725.png

in welchem sie gefragt werden, welches Tool sie benützen wollen.
Da GPU passthrough noch nicht konfiguriert ist, sollte man die erste Option wählen.
Nach einigen Info Dialogen wird gefragt, welche GPU man für GPU passthrough nutzen will. Beachten sie das die initialisierende GPU nicht für GPU passthrough genutzt werden kann.
Screenshot_20200430_232752.png

Falls das Programm erkennt, das sich noch andere Geräte in der GPU IOMMU Gruppe befinden, erscheint automatisch ein Dialog zur Installation eines Kernels mit acso Patch.
Bitte beachten sie, das der ACSO Patch es ermöglicht, das vom Gast auf den Host zugegriffen werden kann.
Screenshot_20200430_232801.png

Sollte man mit GPU passthrough fortfahren wollen, bestätigen sie Install precompiled acso patch.
Wenn die Installation des acso Kernels abgeschlossen ist, erscheint folgender Dialog,
Screenshot_20200430_233004.png

Nach kurzem warten sollte folgender Dialog kommen,
Screenshot_20200430_233157.png

welcher darauf hinweist, das GPU passthrough erfolgreich konfiguriert wurde und ab dem nächsten Boot funktioniert. Beachten sie, das der erscheinen dieses Dialoges einige Minuten dauern kann, starten sie ihren PC vor dem Erscheinen des Dialogs ihren PC nicht neu.

Der folgende Teil erklärt, wie sie gptools CLI installieren und nutzen.

Um die Installation zu vereinfachen, habe ich dafür ein Debian Paket erstellt. Dieses können sie entweder über folgende Befehle herunterladen und installieren,
Bash:
wget https://github.com/Transistor4aCPU/gpu-passthrough-tools/releases/download/gptools-0.7.3/gptools-0.7.3-amd64.deb
sudo dpkg -i gptools-0.7.3-amd64.deb
oder die .dpkg Datei manuell hier herunterladen und mit der Paketmanager GUI ihres vertrauens installieren.
Jetzt können sie die automatische Konfiguration mit folgendem Befehl im Terminal starten:
Bash:
sudo gptools --cli --choose
Nach dem starten wird als erstes geprüft, ob alle Anforderungen erfüllt wurden.
Sollten nicht alle Anforderungen erfüllt sein, wird das gptools automatisch beendet.

Unvollständig. Hier standen veraltete Information, ein Update folgt in kürze.

Jetzt sollten sie die GPU auswählen können, die sie für GPU Passthrough isolieren wollen.
Choose-VGA.png

Ich wähle die 1 um meine R7 250 zu isolieren.
Beachten sie, das sie nicht die zur System Intialisierung verwendete GPU verwenden können.
Das Skript bereitet jetzt alles zur Isolation vor.
Da jetzt alle Änderungen gemacht sind, müssen sie nur noch ihren PC Neustarten und wenn erforderlich mit dem ACSO Kernel booten.

Nach dem Neustart sollte ihre GPU isoliert sein, dies können sie mit dem Terminal Befehl
Bash:
lspci -nnv
überprüfen.
Driver.png

Sollte ihre GPU erfolgreich isoliert sein, sollten sie nun den VFIO Treiber nutzen.
Wenn dies der Fall ist, können sie jetzt ganz einfach ihre GPU und GPU Audicontroller in Virt-Manager auswählen können und ihrer VM zuweisen können. Hier findet ihr meine Anleitung zur Erstellung der VM.
 

Anhänge

  • IOMMU-Groups.png
    IOMMU-Groups.png
    600,7 KB · Aufrufe: 1.369
  • Kernel-patch.png
    Kernel-patch.png
    551,3 KB · Aufrufe: 1.304
  • Screenshot_20200430_233019.png
    Screenshot_20200430_233019.png
    20,9 KB · Aufrufe: 774
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: el osito, konkretor, Termy und 6 andere
Transistor 22 schrieb:
  • Ubuntu/Debian ist im UEFI Modus installiert
Sicher? Sofern das Script nicht irgendeine Spezialität hat, die vom Normalfall abweicht, geht das auch im Legacy-Mode.

Die Script-Sammlung sieht dennoch interessant aus.
 
  • Gefällt mir
Reaktionen: Transistor 22
pseudopseudonym schrieb:
Sicher? Sofern das Script nicht irgendeine Spezialität hat, die vom Normalfall abweicht, geht das auch im Legacy-Mode.
Ich bin mir leider nicht sicher. Habe GPU Passthrough bisher immer mit OVMF gemacht, da ich nur UEFI basierte Systeme verwende. Danke für den Hinweis. Wäre nett wenn jemand das mal testen würde.
 
@Transistor 22 Mein Rechner, der so konfiguriert ist, läuft definitiv im Legacy-Mode, gerade nochmal nachgeguckt. Auch so meine ich, ähnliche Setups schon auf Geräten ohne EFI betrieben zu haben.
 
  • Gefällt mir
Reaktionen: Transistor 22
pseudopseudonym schrieb:
@Transistor 22 Mein Rechner, der so konfiguriert ist, läuft definitiv im Legacy-Mode, gerade nochmal nachgeguckt. Auch so meine ich, ähnliche Setups schon auf Geräten ohne EFI betrieben zu haben.
Wenn du das testen möchtest, musst du noch in /usr/share/gptools/autoconfig.sh bearbeiten, um den UEFI Test zu deaktivieren. Ich werde gleich das Ersatz Skript hochladen.
 
Screenshot.png

Sieht doch sehr EFI-befreit aus, läuft aber mit diversen durchgereichten Geräten.
Ergänzung ()

Transistor 22 schrieb:
Wenn du das testen möchtest, musst du noch in /usr/share/gptools/autoconfig.sh bearbeiten, um den UEFI Test zu deaktivieren. Ich werde dir gleich das Ersatz Skript hochladen.
An der Stelle passe ich zumindest für heute, vielleicht hilft aber der Screenshot oben weiter (ist das System aus der Signatur).

Intel Xeon E5-2650V4, Corsair 64GB DDR4, 2x RX480 (8GB VRAM), Asrock X99 Taichi, Thermalright HR-02 MACHO, LG Bluray-Brenner
Qemu+KVM mit PCIe Passthrough (beide RX480)
 
  • Gefällt mir
Reaktionen: Transistor 22
Meines Wissens muss die VM im UEFI-Modus betrieben werden, der Host nicht.
 
  • Gefällt mir
Reaktionen: Transistor 22 und pseudopseudonym
br4tmaxe schrieb:
Meines Wissens muss die VM im UEFI-Modus betrieben werden, der Host nicht.
Ist auch mein Wissensstand. Wobei zumindest Linux-VMs grundsätzlich auch im BIOS-Modus mit durchgereichten PCIe-Geräten arbeiten können, man würde aber vor Initialisierung der GPU-Treiber nichts sehen (also ziemlicher Schwachsinn, das für GPUs so zu betreiben).
 
  • Gefällt mir
Reaktionen: Transistor 22
  • Gefällt mir
Reaktionen: up.whatever
Hey Transistor super tool. Ich glaub das ist durchaus was was du mal bewerben kannst. Ich kanns leider nicht testen, da ich nur eine GPU habe.

Allerdings einen Vorschlag: Willst du die funktionen nicht ein wenig Modularisieren um den Code etwas übersichtlicher zu gestalten? Dann ist es vielleicht leichter zu contributen.
 
  • Gefällt mir
Reaktionen: Transistor 22
aRkedos schrieb:
Hey Transistor super tool. Ich glaub das ist durchaus was was du mal bewerben kannst. Ich kanns leider nicht testen, da ich nur eine GPU habe.

Allerdings einen Vorschlag: Willst du die funktionen nicht ein wenig Modularisieren um den Code etwas übersichtlicher zu gestalten? Dann ist es vielleicht leichter zu contributen.
Ich plane es in Zukunft besser zu dokumentieren und zu kommentieren. Ich werde dann eventuell noch eine Version machen in den jedes "Modul" eine eigene Datei hat, bei der Version 0.5 habe ich aber besonders den Fokus darauf gelegt alles in einer Datei zu vereinen.
Außerdem plane ich in Zukunft vielleicht noch eine Version für Arch Linux zu machen, davor werde ich mich jedoch erstmal um die Dokumentation der Debian/Ubuntu Version kümmern.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: aRkedos
aRkedos schrieb:
Hey Transistor super tool. Ich glaub das ist durchaus was was du mal bewerben kannst. Ich kanns leider nicht testen, da ich nur eine GPU habe.

Allerdings einen Vorschlag: Willst du die funktionen nicht ein wenig Modularisieren um den Code etwas übersichtlicher zu gestalten? Dann ist es vielleicht leichter zu contributen.
Ich habe jetzt einen kommentierten modularisierten branch erstellt.
 
Es ist nun eine gptools Version die die GTK GUI Zenity nutzt erschienen. Jetzt muss nur noch folgende Datei installiert werden und gptools ist über einen .desktop starter ausführbar. Das GUI only Konzept soll es einsteigern erleichtern. Die CLI Version wird natürlich weiterhin gepflegt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: aRkedos
Hi @Transistor 22

vielen Dank für dieses tolle Tool. Ich habe fast das gesamte Wochenende mit meinem Wiederumstieg auf Linux verbracht und im Zuge auch sehr viel Zeit mit GPU Passthrough verbracht. Ich habe mich eigentlich nur noch mit dem ACS Override Patch rumgeschlagen und bin dann zufällig auf dieses Tool hier gestoßen, habe meinen bisherigen Stand verworfen und es direkt mal ausprobiert. Ich bin so weit zufrieden und werde es auf jeden Fall weiter empfehlen.

Bei der automatischen Patch-Installation ist mir noch aufgefallen, dass der vorkompilierte Kernel zwar richtig installiert wird, aber weil das Paket linux-headers-5.4.10-acso fehlt, kann DKMS die nVidia-Treiber nicht zum Kernel hinzufügen, sodass diese dann fehlen.
Das Problem lässt sich relativ leicht lösen, indem man vor dem Ausführen des Tools die Datei linux-headers-5.4.10-acso_5.4.10-acso-1_amd64.deb herunterlädt und installiert. Bzw. bei anderen Kernel-Versionen muss die entsprechend andere header-Datei von https://queuecumber.gitlab.io/linux-acs-override/ gewählt werden.

Auf meinem System ist außerdem noch Secureboot eingerichtet und der Kernel wird natürlich nicht signiert installiert, sodass man ihn nicht booten kann. Ich habe deshalb ein Tutorial von askubuntu befolgt, um einen installierten Kernel nachträglich zu signieren. Das booten hat funktioniert, die nVidia-Treiber auch, aber aus irgendeinem Grund waren die die IOMMU-Gruppen trotzdem nicht getrennt wie sie sollten. Weiß da zufällig jemand, woran das liegen könnte?

Als Workaround habe ich Secureboot jetzt erstmal deaktiviert, indem ich im UEFI-Menü in den Einstellungen zu Secure Boot den Punkt "Clear Secure Boot Keys" gewählt habe. Damit kann ich jetzt erstmal weiter testen.
 
  • Gefällt mir
Reaktionen: Transistor 22
Danke für das Feedback. Die Änderung am Kernel werden in die Version 0.7 einfließen. Die Signierung evtl. in späteren Versionen. Möglicherweise haben sie in Grub den ACSO Patch nicht aktiviert. Folgendes muss in die grub Default Zeile zusätzlich für den ACSO Patch eingefügt werden: pcie_acs_override=downstream,multifunction

Update:
GPTools 0.7.1 ist erschienen und hat nun einige Verbesserungen und automatisierungen, der Code ist übersichtlicher, außerdem ist das Feedback von @pegelf eingeflossen, es werden jetzt auch die Header installiert und die ACSO Kernel Version 5.6.12 genutzt.
Bitte beachtet bei GPTools 0.7.1 der Desktop Starter leider nicht funktioniert, weshalb GPTools mit dem Befehl gptools --gui --choose gestartet werden sollte.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: pegelf
@Transistor 22

Wie ist die Performance (cpu/Prozesor) von qemu im vergleich zu virtualbox?.Bisher war virtualbox immer schneller als qemu/kvm auf meinem PC.

Die Idee die Grafikkarte an den Gast weiterzureichen klingt super leider hab ich im Moment nur 1 Grafikkarte im Re hner verbaut und kann somit das gptools Programm nicht testen.
 
Ok die Tabelle sagt das kvm näher an die bare metal performance kommt.
Da müsste qemu/kvm sich ja massiv verbessert haben in den letzten Jahren. Vllt. teste ich mal xp oder reactos dadrin.
 
Zurück
Oben