Transistor 22
Lt. Commander
- Registriert
- März 2018
- Beiträge
- 1.431
In diesem Artikel zeige ich, wie man auf einer Debian/Ubuntu basierten Linux Distribution mit hilfe der Qemu-KVM Virtualisierung und Virt-Manager eine Virtuelle Maschine mit einer eigenen GPU, die von dem Host System isoliert wird und in die VM durch gereicht wird (GPU Passthrough) erstellt.
Dies erfordert jedoch mindestens 2 GPUs (oder iGPU + GPU) und das VM Betriebsystem muss UEFI unterstützen. Wie man die GPU unter Debian/Ubuntu basierten Linux Distributionen innerhalb von 5 Minuten nur mit GUI isoliert (Für die folgenden Schritte unbedingt nötig), habe ich bereits in diesem Thread erklärt. Dieser Thread richtet sich an Virt-Manager Anfänger, es wir Schritt für Schritt möglichst einfach gezeigt.
Als erstes muss man Qemu-KVM, Virt-Manager und OVMF installieren, was mit folgendem Terminal Befehl möglich ist.
Alternativ können sie natürlich auch die Pakete über die Paketmanager GUI (z. B. Synaptic) ihres Vertrauens installieren.
Dann startet man Virt-Manager über den Startmenü Eintrag "Virtuelle Maschinenverwaltung".
Um eine VM zu erstellen, Wählen sie das Bildschirmsymbol links oben aus.
Dann öffnet sich folgender Dialog, in dem sie angeben, wie sie das Betriebsystem für ihre VM installieren.
Im normalfall laden sie einfach ein Iso ihres Betriebssystems herunter und wählen Lokales Installationsmedium.
Im nächsten Fenster wählen sie, falls sie Lokales Installationsmedium ausgewählt haben, ihr Iso Installationsmedium aus. Sollte ihr Betriebsystem in der Auswahl unten nicht vefügbar sein, wählen sie einfach Generic Default.
In den nächsten beiden Fenster wählen sie die CPU Kerne und den RAM für die VM aus und erstellen einen Datenträger für die VM.
Später zeige ich ihnen auch noch wie sie die VM CPU Kerne vom Host isolieren, die VM CPU Performance optimieren und ein echtes Laufwerk oder einzelne Partitionen zur VM hinzufügen.
Danach sollte sich folgendes Fenster öffnen, in dem sie den Name der VM ändern und Konfiguration bearbeiten vor der Installation auswählen.
Als Netzwerk wählen sie entweder NAT oder Hostgerät Brücke aus, bei mir hat immer eines der Beiden Optionen Out of the Box funktioniert.
Falls dies bei ihnen nicht der Fall sein sollte, können sie der VM ein physischen Netzwerkadapter hinzufügen oder manuell ein Netzwerkadapter erstellen.
Danach können sie die VM konfigurieren.
Wichtig ist, das sie als Firmware UEFI auswählen. Als Chipsatz würde ich den i440FX empfehlen.
Dann gehen sie auf Boot Optionen und aktivieren das Startmenü, es Empfiehlt sich das OS Laufwerk als Bootoption an erster Stelle ausgewählt zu haben.
Dann entfernen sie Tablett, Anzeige Spice, Konsole, Video QXL und USB Redirector.
Sound stellen sie falls bei ihnen Verfügbar auf Host Passthrough, sollte es bei ihnen nicht verfügbar sein entfernen sie auch Sound ich6.
Als nächstes fügen sie mit Gerät Hinzufügen/PCI Host-Gerät ihre GPU und den GPU Audiocontroller zur VM hinzu.
Zusätzlich können sie noch einen USB Controller, eine Soundkarte/Onboard Sound, eine Nvme SSD, Netzwerkkarte/Onboard LAN hinzufügen, dafür benötigen sie jedoch meist den ACSO Kernel Patch, welchen sie evtl. schon über GPTools installiert haben oder manuell von hier herunterladen und installieren können.
Bitte beachten sie, das der ACSO Patch es ermöglicht, das vom Gast auf den Host zugegriffen werden kann.
Beachten sie, das diese Geräte dann während die VM läuft nicht für den Host verfügbar sind.
Falls sie keinen USB Controller, an dem sie die USB Geräte für die VM angesteckt haben, als PCI Gerät zur VM hinzugefügt haben, können sie diese über USB Hostgeräte hinzufügen.
Es ist nicht möglich einen USB Hub hinzuzufügen.
Beachten sie, das die ausgewählten USB Geräte während die VM läuft nicht für den Host Verfügbar sind.
Stellen sie sicher das sie mindestens eine Maus und Tastatur zur VM hinzugefügt haben.
Jetzt sollte eure Konfiguration ähnlich wie folgende aussehen.
Jetzt können sie die Installation beginnen.
Wechseln sie nun auf den Monitor, der an der VM GPU angeschlossen ist.
Sie sollten jetzt den Bootvorgang der VM sehen und das Betriebsystem installieren und nutzen können.
Mögliche Probleme
Dies erfordert jedoch mindestens 2 GPUs (oder iGPU + GPU) und das VM Betriebsystem muss UEFI unterstützen. Wie man die GPU unter Debian/Ubuntu basierten Linux Distributionen innerhalb von 5 Minuten nur mit GUI isoliert (Für die folgenden Schritte unbedingt nötig), habe ich bereits in diesem Thread erklärt. Dieser Thread richtet sich an Virt-Manager Anfänger, es wir Schritt für Schritt möglichst einfach gezeigt.
Als erstes muss man Qemu-KVM, Virt-Manager und OVMF installieren, was mit folgendem Terminal Befehl möglich ist.
Alternativ können sie natürlich auch die Pakete über die Paketmanager GUI (z. B. Synaptic) ihres Vertrauens installieren.
Bash:
sudo apt install qemu-system qemu-kvm virt-manager ovmf
Um eine VM zu erstellen, Wählen sie das Bildschirmsymbol links oben aus.
Dann öffnet sich folgender Dialog, in dem sie angeben, wie sie das Betriebsystem für ihre VM installieren.
Im normalfall laden sie einfach ein Iso ihres Betriebssystems herunter und wählen Lokales Installationsmedium.
Im nächsten Fenster wählen sie, falls sie Lokales Installationsmedium ausgewählt haben, ihr Iso Installationsmedium aus. Sollte ihr Betriebsystem in der Auswahl unten nicht vefügbar sein, wählen sie einfach Generic Default.
In den nächsten beiden Fenster wählen sie die CPU Kerne und den RAM für die VM aus und erstellen einen Datenträger für die VM.
Später zeige ich ihnen auch noch wie sie die VM CPU Kerne vom Host isolieren, die VM CPU Performance optimieren und ein echtes Laufwerk oder einzelne Partitionen zur VM hinzufügen.
Danach sollte sich folgendes Fenster öffnen, in dem sie den Name der VM ändern und Konfiguration bearbeiten vor der Installation auswählen.
Als Netzwerk wählen sie entweder NAT oder Hostgerät Brücke aus, bei mir hat immer eines der Beiden Optionen Out of the Box funktioniert.
Falls dies bei ihnen nicht der Fall sein sollte, können sie der VM ein physischen Netzwerkadapter hinzufügen oder manuell ein Netzwerkadapter erstellen.
Danach können sie die VM konfigurieren.
Wichtig ist, das sie als Firmware UEFI auswählen. Als Chipsatz würde ich den i440FX empfehlen.
Dann gehen sie auf Boot Optionen und aktivieren das Startmenü, es Empfiehlt sich das OS Laufwerk als Bootoption an erster Stelle ausgewählt zu haben.
Dann entfernen sie Tablett, Anzeige Spice, Konsole, Video QXL und USB Redirector.
Sound stellen sie falls bei ihnen Verfügbar auf Host Passthrough, sollte es bei ihnen nicht verfügbar sein entfernen sie auch Sound ich6.
Als nächstes fügen sie mit Gerät Hinzufügen/PCI Host-Gerät ihre GPU und den GPU Audiocontroller zur VM hinzu.
Zusätzlich können sie noch einen USB Controller, eine Soundkarte/Onboard Sound, eine Nvme SSD, Netzwerkkarte/Onboard LAN hinzufügen, dafür benötigen sie jedoch meist den ACSO Kernel Patch, welchen sie evtl. schon über GPTools installiert haben oder manuell von hier herunterladen und installieren können.
Bitte beachten sie, das der ACSO Patch es ermöglicht, das vom Gast auf den Host zugegriffen werden kann.
Beachten sie, das diese Geräte dann während die VM läuft nicht für den Host verfügbar sind.
Falls sie keinen USB Controller, an dem sie die USB Geräte für die VM angesteckt haben, als PCI Gerät zur VM hinzugefügt haben, können sie diese über USB Hostgeräte hinzufügen.
Es ist nicht möglich einen USB Hub hinzuzufügen.
Beachten sie, das die ausgewählten USB Geräte während die VM läuft nicht für den Host Verfügbar sind.
Stellen sie sicher das sie mindestens eine Maus und Tastatur zur VM hinzugefügt haben.
Jetzt sollte eure Konfiguration ähnlich wie folgende aussehen.
Jetzt können sie die Installation beginnen.
Wechseln sie nun auf den Monitor, der an der VM GPU angeschlossen ist.
Sie sollten jetzt den Bootvorgang der VM sehen und das Betriebsystem installieren und nutzen können.
Mögliche Probleme
- AMD Reset Bug (Der Neustart der VM funktioniert nicht -> Installieren sie den Kernel Patch für ihre AMD GPU)
- Nvidia Windows Problem
- AMD AGESA Bug (Kernel Patch)
- IOMMU Gruppen (Es kann nicht nur ein Gerät aus einer IOMMU Gruppe zur VM hinzugefügt werden, es müssen alle Geräte einer IOMMU Gruppe hinzugefügt werden. -> Installieren sie den ACSO Patch oder einen vorkompilierten ACSO Kernel. Bitte beachten sie, das der ACSO Patch es ermöglicht, das vom Gast auf den Host zugegriffen werden kann.)
Bash:
#!/bin/bash
shopt -s nullglob
for g in /sys/kernel/iommu_groups/*; do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;
CPU Pinning
Das CPU Pinning weist dem VM Kern einen festen echten Kern zu, was zu Performanceverbesserungen führt.
Der CPU Aufbau wird mit dem Befehl lscpu -e angezeigt.
Um es zu aktivieren öffnet man die VM konfiguration über folgenden Befehl.
Dort fügt man zwischen </vcpu> und <os> folgendes ein. Die Anzahl der gepinnten Kerne muss mit der Anzahl der Kerne der VM übereinstimmen.
CPU Isolation
Bisher benutzt auch der Host PC die der VM zugeordneten Kerne, kann diese also auch Auslasten, möchte man jedoch nahezu Bare-metal CPU Performance in der VM, kann man die Kerne mit den Host Bootargumentent
isolieren (In dem Beispiel werden die ersten 6 Kerne Isoliert), welche die Kerne exklusiv für VMs nutzbar macht.
Das Bootargument trägt man einfach in /etc/default/grub in die Zeile GRUB_CMDLINE_LINUX_DEFAULT="Bootargument" ein, wenn ihr PC den Grub 2 Bootloader nutzt. Dann müssen sie diesen nur noch mit
updaten.
Das CPU Pinning weist dem VM Kern einen festen echten Kern zu, was zu Performanceverbesserungen führt.
Der CPU Aufbau wird mit dem Befehl lscpu -e angezeigt.
Um es zu aktivieren öffnet man die VM konfiguration über folgenden Befehl.
Bash:
sudo virsh edit VMName
Bash:
<cputune>
<vcpupin vcpu='Host CPU Kern Nummer(Startend mit 0)' cpuset='VM Kern Nummer'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
<vcpupin vcpu='4' cpuset='4'/>
<vcpupin vcpu='5' cpuset='5'/>
</cputune>
CPU Isolation
Bisher benutzt auch der Host PC die der VM zugeordneten Kerne, kann diese also auch Auslasten, möchte man jedoch nahezu Bare-metal CPU Performance in der VM, kann man die Kerne mit den Host Bootargumentent
Code:
isolcpus=0-5 nohz_full=0-5 rcu_nocbs=0-5
Das Bootargument trägt man einfach in /etc/default/grub in die Zeile GRUB_CMDLINE_LINUX_DEFAULT="Bootargument" ein, wenn ihr PC den Grub 2 Bootloader nutzt. Dann müssen sie diesen nur noch mit
Bash:
sudo update-grub
Beachten sie, das dieses Laufwerk/diese Partition wenn die VM läuft nicht im Hostsystem verfügbar ist.
Mit folgendem Befehl listen sie die Namen der verfügbaren Laufwerke auf.
Notieren sie sich den Name des Laufwerks, welches sie zur VM hinzufügen möchten.
Öffnen sie die VM konfiguration mit folgendem Befehl.
Fügen sie folgendes unter <devices> ein
Mit folgendem Befehl listen sie die Namen der verfügbaren Laufwerke auf.
Bash:
ls /dev/disk/by-id/
Öffnen sie die VM konfiguration mit folgendem Befehl.
Bash:
sudo virsh edit VMName
Code:
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/disk/by-id/Partionsoderlaufwerksname'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</disk>
Anhänge
Zuletzt bearbeitet: