Erfahrungsbericht Teil 2: GPU Passthrough mit AMD Ryzen 3700X und einer AMD Radeon RX470 sowie NVIDIA GTX 1050TI auf einen MSI B450 Mortar Titanium.

ibm9001

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
464
Hallo zusammen,

dies ist der zweite Teil meiner Erfahrungen mit dem Thema virtuelle Maschinen. Ich hab das hier ausgelagert, da die Anzahl der Bilder pro Thread begrenzt ist. (Der erste Teil ist hier zu finden)

Die Daten des zweiten Systems sind (zwischenzeitlich etwas angepasst):

CPU: AMD Ryzen 5900X.
Mainboard: MSI B450 MORTAR TITANIUM (mit BIOS 1.2.07).
Arbeitsspeicher: 96 GByte RAM@3000 MHZ.
Grafikkarten: AMD RX470/8Gbyte VRAM@PCIe 3.0 x 16, NVIDIA GT 1030/2 GByte VRAM@PCIe 2.0 x 4.
Monitore: 1xSamsung an AMD RX470, 1xAsus 248 an NVIDIA GT 1030.

Verwendete Software: Windows 10/11 Pro, MacOS sowie Nobara Linux in der VM, Fedora 36 / Debian 12 als Host Betriebssystem. Virtualisierung per QEMU / KVM / Virtueller Maschinenverwaltung unter Fedora / Debian.

In die jeweilige VM soll die AMD Radeon RX470 durchgereicht werden.

Folgende Einstellungen wurden im Mainboard BIOS vorgenommen:

BIOS CSM/UEFI Mode : [UEFI]
Secure Boot : [Deaktiviert]
SMT Control : [Auto] -> Ist an zwei Stellen im BIOS zu finden.
SVM Mode : [Aktiviert]
NX Mode : [Aktiviert]
IOMMU : [Aktiviert]
Security Device Support : [Enable]
AMD fTPM switch : [AMD CPU fTPM]
Re-Size BAR Support : [Aktiviert]
Above 4G memory/Crypto Currency mining : [Deaktiviert] -> wichtig, sonst funktioniert MacOS
nicht mit GPU Passthrough.
VGA Detection : [Auto]


Die Installation des Host Systems gestaltet sich fast identisch wie bei dem in Teil 1 verwendeten Alma Linux,
wesentlicher Unterschied ist die Verwendung des sudo Kommandos . Der Vollständigkeit halber beschreibe ich das ganze hier nochmals wegen der unterschiedlichen Hardware.

a) Die Fedora-ISO unter Windows mit Rufus oder von Linux aus mit BaleanaFetcher auf einen
USB Stick schreiben. -> Im Fall von Rufus die aktuellste Version nutzen, ältere Versionen können bei der
Installation Probleme bereiten.

b) Vom so vorbereiteten USB-Stick booten (Bootauswahl mit der Taste F11 der Tastatur, den USB-Stick auswählen) und Fedora auf die bereitgestellte NVMe, SSD oder HDD installieren.

c) Nach der Installation Fedora updaten. Dafür ein Terminal Fenster öffnen und mit

$ sudo dnf update --refresh

das Update ausführen (LAN muss aktiv sein). Anschließend das System neu starten.

d) Die notwendige Virtualisierungssoftware installieren. D.h. wieder Terminal öffnen und

$ sudo dnf -y install bridge-utils libvirt virt-install qemu-kvm

sowie anschließend

$ sudo dnf install libvirt-devel virt-top libguestfs-tools guestfs-tools

installieren. Danach den KVM Daemon libvirtd starten.

$ sudo systemctl start libvirtd

und um diesen dann bei jedem Systemstart aufrufen

$ sudo systemctl enable libvirtd

Jetzt die Virtuelle Maschinenverwaltung installieren

$ sudo dnf -y install virt-manager

Quelle: https://computingforgeeks.com/how-to-install-kvm-on-fedora/

e) Prüfen in welcher IOMMU Gruppe sich die durchzureichende Grafikkarte (hier RADEON
RX 470) befindet, sowie deren Geräte-ID ermitteln. D.h. Terminal öffnen und anschließend das
Script aus Link3 eingeben (eher copy & paste) und ausführen lassen.

#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;

Als Ergebnis erhält man u. a. mit der hier verwendeten Hardwarekonfiguration:
...
IOMMU Group 13:

03:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
03:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
03:00.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
20:00.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)

20:01.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
20:04.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
22:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
25:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)
25:00.1 Audio device [0403]: NVIDIA Corporation GP107GL High Definition Audio Controller [10de:0fb9] (rev a1)

IOMMU Group 14:
26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev cf)
26:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
...

In der IOMMU Group 13 findet man neben USB und SATA Controller u.a. die NVIDIA Grafikkarte, und in der
IOMMU Group 14 als einziges Device die RADEON Grafikkarte.

Da die Radeon Grafikkarte in die VM´s durchgereicht werden soll, sind deren ID´s zu nutzen.
Die Grafikkarten-ID lautet damit: [1002:67df], die ID des verbauten Audio-Controllers auf der
Grakfikkarte: [1002:aaf0]

Hinweis: Die Grafikkarten-ID´ s sind natürlich Hardware abhängig, d.h. mit einer anderen Grafikkarte ändern sich natürlich auch die ID´s.

f) Jetzt den Bootloader Grub folgendermaßen anpassen:

1) Wieder ein Terminal öffnen und dann mit einem Editor Grub bearbeiten.

$ sudo nano /etc/sysconfig/grub

2) In Grub die Zeile GRUB_CMDLINE_LINUX=" ...quiet" finden und nach quiet folgendes einfügen:

amd_iommu=on rd.driver.pre=vfio-pci vfio-pci.ids=1002:67df,1002:aaf0 video=efifb:off kvm.ignore_msrs=1

3) und speichern. Anschließend Grub neu konfigurieren:

$ sudo grub2-mkconfig -o /etc/grub2-efi.cfg

g) Jetzt die Datei /etc/dracut.conf.d/10-vfio.conf mit folgenden Inhalt erzeugen:

add_drivers+=" vfio_pci vfio vfio_iommu_type1 vfio_virqfd "

Das ganze mit dem Editor der Wahl ausführen, hier

$ sudo nano /etc/dracut.conf.d/10-vfio.conf

aufrufen, die Zeile

add_drivers+=" vfio_pci vfio vfio_iommu_type1 vfio_virqfd "

einfügen, bzw. hinein kopieren und dann speichern.

Anmerkung: vfio_virqfd wird bei neueren Kernelversionen (ab Kernel Version 6.2) nicht
mehr benötigt, bzw. wurde in das das Basismodul vfio integriert. Deshalb nur noch die Zeile
add_drivers+=" vfio_pci vfio vfio_iommu_type1 " verwenden.
(Welche Version das eigene System hat, erfährt man mit: $ uname -a).

h) Anschließend

$ sudo dracut -f

im Terminal ausführen damit initramfs für das aktuell laufende System neu generiert wird.

Danach das Host System neu starten (reboot).

Wenn alles richtig funktioniert, dann wird nach dem Neustart des Host Systems nur noch der
Monitor, der an der zweiten Grafikkarte (GT1030) angeschlossen ist von Fedora initialisiert
und benutzt.

Jetzt kann zusätzlich mit

$ lspci -nnk

geprüft werden, ob die Einbindung des Treibers gelungen ist. Dazu muss die Grafikkarte, die
durchgereicht werden soll, folgenden Eintrag enhalten: Kernel driver in use: vfio-pci

26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev cf)
Subsystem: PC Partner Limited / Sapphire Technology Radeon RX 470/480 [174b:e347]
Kernel driver in use: vfio-pci
Kernel modules: amdgpu
26:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
Subsystem: PC Partner Limited / Sapphire Technology Device [174b:aaf0]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel


Das gilt für die Grafikarte selbst, und falls vorhanden, dem auf der Karte verbautem Audiochip.

Nachtrag: Nach dem Installieren der Virtualisierungsumgebung sollte man noch der Gruppe libvirt
beitreten.

$ sudo usermod -aG libvirt BENUTZERNAME

eingeben. Anderenfalls wird man beim Starten der Virtuellen Maschinenverwaltung immer nach dem sudo
Passwort gefragt.

Die Installation einer Windows VM gestaltet sich hier genauso wie bereits unter Alma Linux beschrieben. Von daher verweise ich auf Teil 3 der GPU-Passthrough Beschreibung in Teil 1 meines Erfahrungsberichts. Einzig bei der Installation von Windows 11 muss noch das TPM Modul bei der Konfiguration der VM hinzugefügt werden,

Anhang anzeigen 1266309

ansonsten wird der Installationsvorgang vom Windowsinstaller abgebrochen.

[Oder siehe weiter unten, die Beschreibung unter Debian]

Nach der Erstellung der Windows 10 VM hat sich ein Problem mit dem Anschluss der Netzwerkkarte
gezeigt. Es war kein Internetzugang möglich. Nach kurzer Überprüfung im Gerätemanager war ersichtlich,
dass sich kein Netzwerktreiber installieren lies.

Nach einer Recherche hat es sich gezeigt, das dieses Problem schon andere hatten (u.a. Unraid und
Proxmox). Die Lösung dieses Problems hat sich dann als einfach heraus gestellt:

Die verwendete Version des benutzten Q35 Chipsatzes ist zu hoch. Unter Fedora wird bei der
Installation die Version 6.2 benutzt, mit der die Windows 10 VM ein Problem hat.

Das kann man sich in der XML Ansicht in der Maschinenverwaltung ansehen, dazu nach
<type arch="x86_64" machine="pc-q35-6.2">hvm</type> schauen.

Die Lösung ist dann auch entsprechend einfach, man muss nur die markierte Zeile entsprechend anpassen.
<type arch="x86_64" machine="pc-q35-6.0">hvm</type>.

Anhang anzeigen 1266313

Die Änderung übernehmen und dann die VM neu starten. In der laufenden VM den Gerätemanager
öffnen. Ist die Netzwerkkarte dort als fehlerhaft gekennzeichnet, diese deinstallieren und die VM
erneut neu starten. Nach dem Neustart wieder den Gerätemanager öffnen und falls notwendig den
Treiber der Netzwerkkarte installieren.

a) Die Geräte-ID der angeschlossenen Maus und Tastatur feststellen.

Dazu im einem Terminal folgendes eingeben:
[vm@fedora ~]$ ls /dev/input/by-id

Daraufhin erscheint (bei dem System hier) folgende Ausgabe:

usb-04d9_USB_Keyboard-event-kbd
usb-04d9_USB_Keyboard-if01-event-kbd
usb-Logitech_USB_Optical_Mouse-event-mouse
usb-Logitech_USB_Optical_Mouse-mouse
usb-SEMICCHIP_Usb_Mouse-event-mouse
usb-SEMICCHIP_Usb_Mouse-mouse

Benötigt werden die Angaben die "event" im Namen enthalten. Ignoriert werden Geräte-ID ́s
die If01 oder If02 usw. enthalten.

b) Jetzt per Terminal die Datei

/etc/libvirt/qemu.conf

mit dem Editor der Wahl

[vm@fedora ~]$ sudo nano /etc/libvirt/qemu.conf

öffnen und die nachfolgende Passage

cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet",
"/dev/input/by-id/usb-04d9_USB_Keyboard-event-kbd",
"/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse",
]
user = "evdev"
group = "evdev"
clear_emulator_capabilities = 0
security_default_confined = 0

am Ende einfügen und speichern.

Jetzt noch einen neuen Nutzer/Gruppe anlegen der „evdev“ heißt. In einem Terminal Fenster also
folgendes eingeben :

[vm@fedora ~]$ sudo useradd -s /usr/sbin/nologin -r -M -d /dev/null evdev
[vm@fedora ~]$ sudo groupadd evdev
[vm@fedora ~]$ sudo usermod -a -G input evdev

Damit hat man einen Nutzer angelegt, der kein Homeverzeichnis hat und sich nicht über eine
Login Shell anmelden kann. Zusätzlich wurde dieser Nutzer „evdev“ zur input Gruppe hinzugefügt.

Anschliesend im Terminal mit

[vm@fedora ~]$ sudo systemctl restart libvirtd

libvirtd neu starten.

c) Jetzt in der virtuelen Maschinenverwaltung, in der XML Ansicht, die erste Zeile

<domain type="kvm">

1692295787027.png


durch

<domain type='kvm' id='1' xmlns:qemu='[URL]http://libvirt.org/schemas/domain/qemu/1.0[/URL]'>

ersetzen.

1692295880773.png


Anschließend, ganz am Ende, vor </domain> folgendes einfügen

<qemu:commandline>
<qemu:arg value="-object"/>
<qemu:arg value="input-linux,id=kbd1,evdev=/dev/input/by-id/usb-04d9_USB_Keyboard-event-kbd,grab_all=on,repeat=on"/>
<qemu:arg value="-object"/>
<qemu:arg value="input-linux,id=mouse1,evdev=/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse"/>
</qemu:commandline>


und mit dem Anklicken von „Anwenden“ übernehmen.

1692295938192.png


Wird die virtuelle Maschine jetzt gestartet geht die Kontrolle von Maus und Tastatur sofort
an die VM über. D.h. jetzt ist es möglich in der Windows VM mit Maus und Tastatur zu ar-
beiten.

Werden Maus und Tastatur wieder auf dem Host System benötigt, dann kann mit dem gleich-
zeitigen Betätigen der beiden Steuerungstasten [Strg] auf der Tastatur von der VM auf das Host
System umgeschaltet werden.Das ganze funktioniert wechselseitig, damit wird das bequeme
Umschalten von Maus und Tastatur zwischen VM und Host einfach möglich.

Quelle


a) Die Debian-ISO unter Windows mit Rufus oder von Linux aus mit baleanaFetcher auf einen
USB Stick schreiben. -> Im Fall von Rufus die aktuellste Version nutzen, ältere Versionen
können bei der Installation Probleme bereiten.

b) Vom so vorbereiteten USB-Stick booten (Bootauswahl mit der Taste F11 der Tastatur, den USB-
Stick auswählen) und Debian auf die bereitgestellte NVMe, SSD oder HDD installieren.

c) Nach der Installation Debian updaten. Dafür ein Terminal Fenster öffnen und mit

$ su --login
$ apt-get update
$ apt-get upgrade

das Update ausführen (LAN muss aktiv sein). Anschließend das System neu starten.

d) Die notwendige Virtualisierungssoftware installieren. D.h. wieder Terminal öffnen und

$ su --login
$ apt install qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin
$ apt install libguestfs-tools virt-manager qemu-system

sowie anschließend (zum Booten von VM’s im UEFI Modus)

$ apt install install ovmf swtpm swtpm-tools

installieren. Danach den KVM Daemon libvirtd starten.

$ su --login
$ systemctl start libvirtd

und um diesen dann bei jedem Systemstart aufrufen

$ su --login
$ systemctl enable libvirtd

e) Prüfen in welcher IOMMU Gruppe sich die durchzureichende Grafikkarte (hier RADEON
RX 470) befindet, sowie deren Geräte-ID ermitteln. D.h. Terminal öffnen und anschlie-
ßend das Script aus dem Link eingeben und ausführen lassen.

#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;

Als Ergebnis erhält man u. a. mit der hier verwendeten Hardwarekonfiguration:

...
IOMMU Group 13:
03:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
03:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
03:00.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
20:00.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
20:01.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
20:04.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
22:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
25:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)
25:00.1 Audio device [0403]: NVIDIA Corporation GP107GL High Definition Audio Controller [10de:0fb9] (rev a1)
IOMMU Group 14:
26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev cf)
26:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]

...

In der IOMMU Group 13 findet man neben USB und SATA Controller u.a. die NVIDIA Grafik-
karte, und in der IOMMU Group 14 als einziges Device die RADEON Grafikkarte.
Da die Radeon Grafikkarte in die VM ́s durchgereicht werden soll, sind deren ID ́s zu nutzen.
Die Grafikkarten-ID lautet damit: [1002:67df], die ID des verbauten Audio-Controllers auf der
Grakfikkarte: [ 1002:aaf0 ]

Hinweis: Die Grafikkarten-ID´ s sind natürlich Hardware abhängig, d.h. mit einer anderen Grafikkarte ändern sich natürlich auch die ID´s.

f) Jetzt den Bootloader Grub folgendermaßen anpassen:

I) Wieder ein Terminal öffnen und dann mit einem Editor Grub bearbeiten.

$ su --login
$ nano /etc/default/grub

II) In Grub die Zeile GRUB_CMDLINE_LINUX=" ...quiet" finden und nach quiet folgen-
des einfügen (um damit IOMMU im Host zu aktivieren)

amd_iommu=on

III) und speichern. Anschließend Grub neu konfigurieren:

$ su --login
$ update-grub

g) Jetzt die Datei /etc/modprobe.d/vfio.conf mit folgenden Inhalt erzeugen:

Das ganze mit dem Editor der Wahl ausführen, hier

$ su --login
$ nano /etc/modprobe.d/vfio.conf

aufrufen, die Zeilen

# AMD GPU
softdep amdgpu pre: vfio-pci
# alte AMD GPU
# softdep radeon pre: vfio-pci
# NVIDIA GPU
# softdep nouveau pre: vfio-pci
options vfio-pci ids=1002:67df,1002:aaf0

einfügen, bzw. hinein kopieren und dann speichern.

h) Dann als Root die Datei /etc/modules bearbeiten

$ su --login
$ nano /etc/modules

und darin folgendes einfügen

vfio_pci
vfio
vfio_iommu_type1
vfio_virqfd

und speichern.

i) Anschließend

$ su --login
$ update-initramfs -u

im Terminal ausführen, damit initramfs für das aktuell laufende System neu generiert wird.

Danach das Host System neu starten (reboot).

Wenn alles richtig funktioniert, dann wird nach dem Neustart des Host Systems nur noch der
Monitor, der an der zweiten Grafikkarte (GTX1030) angeschlossen ist von Debian 12
initialisiert und benutzt.

Jetzt kann zusätzlich mit

$ lspci -nnk

geprüft werden, ob die Einbindung des Treibers gelungen ist. Dazu muss die Grafikkarte, die
durchgereicht werden soll, folgenden Eintrag enhalten: Kernel driver in use: vfio-pci

26:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev cf)
Subsystem: PC Partner Limited / Sapphire Technology Radeon RX 470/480 [174b:e347]
Kernel driver in use: vfio-pci
Kernel modules: amdgpu

26:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
Subsystem: PC Partner Limited / Sapphire Technology Device [174b:aaf0]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel


Das gilt für die Grafikarte selbst, und falls vorhanden, dem auf der Karte verbautem Audiochip.

Nachtrag: Nach dem Installieren der Virtualisierungsumgebung sollte man noch der Gruppe libvirt
beitreten.

$ su --login
$ usermod -a -G libvirt eigenerBENUTZERNAME

Anderenfalls wird man beim Starten der Virtuellen Maschinenverwaltung immer nach dem Root
Passwort gefragt.

Quellen:

https://wiki.debianforum.de/QEMU/KVM_mit_GPU_Passthrough#Paketinstallation
https://wiki.debian.org/KVM
https://www.server-world.info/en/note?os=Debian_12&p=kvm&f=1
https://www.server-world.info/en/note?os=Debian_12&p=kvm&f=13
https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Isolating_the_GPU

Jetzt kann mit dem Einrichten einer Windows VM begonnen werden. Dazu wird ein Windows
ISO-Abbild benötigt. Falls das nicht schon vorhanden ist, dann sollte jetzt ein ISO-Abbild von
Windows 10 oder 11 von der Microsoft Homepage herunter geladen werden (Link).

Um eine virtuelle Maschine aufzusetzen ist jetzt die virtuelle Maschinenverwaltung zu starten.

1692298396500.png


Nach dem Start der Maschinenverwaltung unter dem Menüpunkt

Bearbeiten -> Einstellungen

den Haken an „Enable XML editing“ setzen. Somit ist es später möglich den XML Code der
VM zwecks Anpassungen zu bearbeiten.

1692298445467.png














Die eigentliche Erstellung einer VM gestaltet sich wie folgt:

a) Unter Datei den Menüpunkt „Neue virtuelle Maschine“ anwählen.

1692298758823.png


Die Vorauswahl „Lokales Installationsmedium (ISO-Abbild oder CDROM“ stehen lassen und auf
den Button „Vor“ klicken.

1692298725071.png


b) Das Installationsmedium auswählen.

1692298806053.png


Dazu auf „Durchsuchen“ klicken und das vorher geladene ISO-Abbild von Windows 10 auswäh-
len. Anschließend wieder die Taste „Vor“ anklicken.

c) Speicher (RAM) und CPU Settings.

1692298831075.png


Die Voreinstellungen für Speicher und CPU stehen lassen, diese können noch im späteren Verlauf
angepasst werden. Daher wieder die Taste „Vor“ anklicken.

d) Speicherplatz für die virtuelle Maschine einrichten

1692298860586.png


Für erste Versuche die Voreinstellungen stehen lassen, eventuell den Speicherplatz für den Daten-
träger auf 60 oder mehr GB erhöhen (sofern genügend Platz auf dem System zur Verfügung
steht). Anschließend wieder die Taste „Vor“ anklicken.

e) Installation beginnen

1692298892968.png


Hier einen Haken bei „Konfiguration bearbeiten vor der Installation“ setzen und danach die Taste
„Fertig“ anklicken.

Jetzt erscheint das Fenster zum Start der Installation.

1692298925508.png


Bevor man damit beginnt sind noch einige Einstellungen vorzunehmen.

Der Reihe nach wären das wie auf den nachfolgenden Bildern gezeigt:

Die Firmware von BIOS auf UEFI... umzustellen:

1692298961391.png
1692298972486.png


Die CPU und den Arbeitsspeicher (RAM) zu konfigurieren:

1692299015953.png
1692299030280.png


Die Bootreihenfolge festlegen, dazu einen Haken bei SATA CDROM1 setzen..

1692299084934.png


[Generell empfiehlt es sich, ebenfalls einen Haken bei „Startmenü aktivieren“ zu setzen.]

Anschließend erfolgt das Hinzufügen der durchzureichenden Grafikkarte und deren Audiochip über
den Button „Gerät hinzufügen“ und dann die Auswahl der Geräte unter PCI Host-Gerät.
[Hinweis: Das Hinzufügen von Grafikkarte und Audiochip kann auch nachträglich, nach der Installa-
tion des Betriebssystem, erfolgen.]

1692299294928.png


Hinweis: An dieser Stelle noch nicht „Anzeige Spice“ und „Video QXL“ aus der Geräteliste entfernen, sonst
bleibt ansonsten der Installationsbildschirm dunkel!

Soll Windows 11 installiert werden, dann ist noch das TPM Modul hinzuzufügen, weil ohne dieses
Modul der Installationsvorgang vom Windowsinstaller abgebrochen wird.

1692299386296.png


Jetzt kann die Installation der VM gestartet werden indem man auf das Feld „Installation beginnen“
klickt. Die Installation beginnt und die VM will von dem virtuellen CDROM Laufwerk booten.
Jetzt muss man schnell sein und eine Taste auf der Tastatur betätigen damit die Installation per
CDROM in der VM erfolgen kann.

1692299419099.png


Verpasst man den Zeitpunkt des Tastendrucks, dann landet man im BIOS der VM. Diese verläßt man
wieder durch Anwahl von „Continue“ und die Abfrage des Tastendrucks erfolgt von neuem.

[Hinweis: Hier besteht dann auch eine gute Möglichkeit, Secure Boot im BIOS der VM auszu-
schalten, das erspart einem dann später eventueller Mehraufwand falls virtio Treiber installiert
werden sollen.]

Nach Betätigen des Tastendrucks beginnt eine normale Windows Installation.

1692299462739.png


Nach erfolgreicher Installation wird man in der Konsole vom Windows Desktop begrüßt.

1692299483812.png


Zum jetzigen Zeitpunkt läuft Windows nur in der Konsole. Um das zu ändern muss der Treiber der
dedizierten Grafikkarte installiert werden. D.h. den Treiber (hier AMD Radeon) der durchgereichten
Grafikkarte in der VM von der Herstellerseite downloaden und dort installieren. Nach Installation des
Treibers wird jetzt auch die dedizierte Grafikkarte angesteuert und auf dem zweiten Bildschirm er-
scheint jetzt der Windows Desktop (wenn die Grafikkarte zuvor in die VM durchgereicht wurde).

In dieser Konfigutation muss man immer zuerst auf den Desktop in der Konsole klicken, damit ein
Arbeiten in der VM auf dem zweiten Bildschirm überhaupt möglich ist. Dieser Zustand ändert sich,
wenn die Einträge für die emulierte Grafikkarte aus der Maschinenkonfiguration der VM entfernt
werden („Konsole“, „Anzeige Spice“, „Video QXL“). Beim nachfolgenden Neustart der VM wird
diese jetzt nur noch auf der dedizitieren Grafikkarte gestartet.

Jetzt wäre es allerdings auch notwendig eine zweite Maus / Tastatur in die VM durchzureichen, damit
sowohl Host als auch VM gleichzeitig bedient werden können. Das läßt sich z.B. mit einem KVM Switch
(mit zusätzlichen Kosten) umgehen.
Oder man löst das Problem per Software, z.B. mittels Evdev. Um was es sich bei Evdev handelt wird auf
der Seite passthroughpo.st unter dem nachfolgenden Link erklärt.

Quellen:
Link: https://rufus.ie/en/
Link: https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Ensuring_that_the_groups_are_valid
Link: https://www.microsoft.com/de-de/software-download/
Link: https://passthroughpo.st/using-evdev-passthrough-seamless-vm-input/

a) Die Geräte-ID der angeschlossenen Maus und Tastatur feststellen.

Dazu im einem Terminal folgendes eingeben:

$ ls /dev/input/by-id

Daraufhin erscheint (bei dem System hier) folgende Ausgabe:

usb-_ADXMK0419_WKNUB-KG240-event-if01
usb-_ADXMK0419_WKNUB-KG240-event-kbd
usb-_ADXMK0419_WKNUB-KG240-if01-event-mouse
usb-_ADXMK0419_WKNUB-KG240-if01-mouse
usb-Logitech_USB_Optical_Mouse-event-mouse
usb-Logitech_USB_Optical_Mouse-mouse
usb-SEMICCHIP_Usb_Mouse-event-mouse
usb-SEMICCHIP_Usb_Mouse-mouse

Benötigt werden die Angaben die "event" im Namen enthalten. Ignoriert werden Geräte-ID ́s
die If01 oder If02 usw. enthalten.

b) Jetzt per Terminal die Datei

/etc/libvirt/qemu.conf

mit dem Editor der Wahl (als Root)

$ su --login
$ nano /etc/libvirt/qemu.conf

öffnen und die nachfolgende Passage

cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet",
"/dev/input/by-id/usb-_ADXMK0419_WKNUB-KG240-event-kbd",
"/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse",
]
user = "evdev"
group = "evdev"
clear_emulator_capabilities = 0
security_default_confined = 0

am Ende einfügen und speichern.

Jetzt noch einen neuen Nutzer/Gruppe anlegen der „evdev“ heißt. In einem Terminal Fenster also
folgendes eingeben:

$ su --login
$ useradd -s /usr/sbin/nologin -r -M -d /dev/null evdev
$ groupadd evdev
$ usermod -a -G input evdev

Damit hat man einen Nutzer angelegt, der kein Homeverzeichnis hat und sich nicht über eine
Login Shell anmelden kann. Zusätzlich wurde dieser Nutzer „evdev“ zur input Gruppe hinzugefügt.

Anschliesend im Terminal (als root) mit

$ systemctl restart libvirtd

libvirtd neu starten.

c) Jetzt in der virtuelen Maschinenverwaltung, in der XML Ansicht, die erste Zeile

<domain type="kvm">#

durch

<domain type='kvm' id='1' xmlns:qemu='[URL]http://libvirt.org/schemas/domain/qemu/1.0[/URL]'>

ersetzen.

1692300798975.png
1692300824407.png


Anschließend, ganz am Ende, vor </domain> folgendes einfügen

<qemu:commandline>
<qemu:arg value="-object"/>
<qemu:arg value="input-linux,id=kbd1,evdev=/dev/input/by-id/usb-_ADXMK0419_WKNUB-KG240-event-kbd,grab_all=on,repeat=on"/>
<qemu:arg value="-object"/>
<qemu:arg value="input-linux,id=mouse1,evdev=/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse"/> </qemu:commandline>


1692300896045.png


und mit dem Anklicken von „Anwenden“ übernehmen.

Wird die virtuelle Maschine jetzt gestartet geht die Kontrolle von Maus und Tastatur sofort
an die VM über. D.h. jetzt ist es möglich in der Windows VM mit Maus und Tastatur zu ar-
beiten.

Werden Maus und Tastatur wieder auf dem Host System benötigt, dann kann mit dem gleich-
zeitigen Betätigen der beiden Steuerungstasten [Strg] auf der Tastatur von der VM auf das Host
System umgeschaltet werden.Das ganze funktioniert wechselseitig, damit wird das bequeme
Umschalten von Maus und Tastatur zwischen VM und Host einfach möglich.

Quelle: https://passthroughpo.st/using-evdev-passthrough-seamless-vm-input/

Nachrag:

Mit dem Aktivieren der Funktion ist ein Fehler der Art

„Could not access KVM kernel module: Permission denied“ aufgetreten.

Als Workaround hat dann im Terminal

$ su --login
$ chmod 666 /dev/kvm

funktioniert. Um das nicht nach jedem Neustart eingeben zu müssen, kann eine Datei

lib/udev/rules.d/99-kvm.rules

mit folgendem Inhalt angelegt werden:

KERNEL=="kvm", GROUP="kvm", MODE="0666"

In einem Terminal also

$ su
$ cd /
$ nano lib/udev/rules.d/99-kvm.rules

aufrufen und die nachfolgende Zeile

KERNEL=="kvm", GROUP="kvm", MODE="0666"

einfügen und die Datei dann abspeichern. Anschließend den Rechner neu starten (rebooten).

Link: https://bugzilla.redhat.com/show_bug.cgi?id=1479558

Mit dem Debian eignen Treiber für die NVIDIA Host Grafikkarte hatte ich auf dem Desktop ab und zu kurze "Ruckler". Z.B. beim Verschieben von Fenstern auf dem Desktop. Deshalb habe habe ich es mit dem
proprietären NVIDIA Treiber probiert. Danach waren die "Ruckler" verschwunden.

Um den Treiber zu installieren wurden folgende Schritte ausgeführt:

a) Über die Softwareverwaltung die Nicht-DFSG-kompatible Software bzw. die Non-DFSG-
kompatible Firmware freigeben.

b) Die NVIDIA Treiber Pakete per Terminal (mit Root-Rechten) installieren

$ su --login

$ apt update && sudo apt install nvidia-detect

$ nvidia-detect

Die Befehle installieren zunächst das Paket „nvidia-detect“ und führen dann den Befehl aus, um
die verbaute GPU zu identifizieren und das empfohlene Treiberpaket zur Installation auszugeben.

1692305557502.png


Das empfohlene Treiberpaket ist normalerweise „nvidia-driver“.

c) Um das Treiberpaket zu installieren, die folgenden Terminal-Befehle ausführen:

$ su --login

$ apt install nvidia-driver

Nach der Installation erscheint das nachfolgende Fenster

1692305621674.png


Mit OK bestätigen (ENTER Taste). Dadurch wird die Installation fertiggestellt.

1692305654024.png

d) Dann das System neu starten (reboot).

Quelle: https://fostips.com/install-nvidia-driver-debian-12/

Hinweis : Klont man eine VM und diese lässt sich anschließend nicht booten, bzw. man kann nur ins BIOS der VM wechseln, dann dort Secure Boot ausschalten. Anscheinend wird beim klonen einer VM Secure Boot per default eingeschaltet.
 

Anhänge

  • 1692298408702.png
    1692298408702.png
    23,7 KB · Aufrufe: 61
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Germinator, BassT, SpamBot und 3 andere
Geiler Beitrag!
Vor allem, weil die Konsolenbefehle gut erklärt werden!
Ich verstehen aber das kleine Script nicht ganz.
Das Echo der Variable ist der Punkt. Was bedeuten die ##*/ ?
Die geschweiften Klammern sind klar.
 
Ganz ehrlich?
Ich hab das Script direkt aus der angegebenen Quelle kopiert und in ein Terminal Fenster eingefügt
und gestartet. Damit werden die IOMMU Gruppen der Hardware ausgelesen und im Terminal angezeigt.

Die genaue Funktionsweise hat mich nicht interessiert, mir war nur das Ergebnis wichtig.
 
Also meine Erfahrung mit GPU Passthrough ist, dass es 2 Wochen funktioniert hat, bis ein SW update kam. Das war mit Proxmox. Es wird nicht wirklich von irgend jemanden unterstützt. Eigentlich will man GPUs mir SR-IOV, alles andere ist Spielerei.

Also jede Woche, besser jeden Tag eine E-Mail an AMD, Nvidia und Intel: Gibt uns endlich SR-IOV!
 
  • Gefällt mir
Reaktionen: ibm9001
@0x7c9aa894,
also für mich hat GPU Passthrough mit meinen beiden Maschinen sehr gut funktioniert, insbesondere die im
ersten Teil gebaute Maschine nutze ich fast täglich. Aber es stimmt, SR-IOV für "normale" Nutzer wäre
natürlich toll.

Was hingegen nicht so gut funktioniert hat war SteamOS bzw. HoloISO. Das hat sich nach einen Update
selbst abgeschossen, bzw. nach Update und nachfolgendem Reboot war der Bildschirm dunkel. Deshalb gibt es dazu hier demnächst ein Update.
 
Feiertags-Updates:

1. Ich habe endlich den fliegenden Aufbau in ein kompaktes Gehäuse (optimiertes UMX3) verbaut, deswegen
auch die GTX 1050 TI gegen eine GT1030 getauscht.

2. Beschreibung zur Installation des Epic Games Store in der SteamOS VM eingefügt.
 
Das ist mal ein 1A Tuto, hat mir sehr weitergeholfen wenn ich auch wegen der GPU (GTX 1660 Super) einen anderen Weg zur IOMMU Isolation gehen musste und das BIOS des MB (B550T-Silver) etwas abweicht.
Da mir der NTFS Zugriff zu heikel erschien habe ich das Problem über einen gemeinsamen Ordner und virtioFS Dateisysteme gelöst, vieleicht hilft es ja dem Einen oder Andern.

HOST
In VM (GUI) <+ Gerät hinzufügen> <Dateisystem>
Auf XML wechseln und ersetzen durch:
<filesystem type="mount" accessmode="passthrough"> <driver type="virtiofs"/> <binary path="/usr/lib/qemu/virtiofsd"/> <source dir="/<YOUR-PATH>/SharedFolder"/> <target dir="SharedFolder"/> <address type="pci" domain="0x0000" bus="0x0c" slot="0x00" function="0x0"/> </filesystem>
VM starten

Windows GUEST:
Virtio Guest Tool installieren (virtio-win-guest-tools.exe)
(LINK https://fedorapeople.org/groups/vir...oads/latest-virtio/virtio-win-guest-tools.exe)
WinFsp File Proxy installieren (winfsp-2.0.23075.msi)
(LINK https://github.com/billziss-gh/winfsp/releases/latest)
Im Windows TERMINAL (nicht PowerShell) als Administrator
sc config VirtioFsSvc start=auto depend="WinFsp.Launcher/VirtioFsDrv" sc start VirtioFsSvc
Optional - Verknüpfung auf dem Desktop erstellen

Funktioniert auch mit Linux GUEST (nicht getestet)
Im user home Laufwerk:
mkdir userSharedFolder
Einmal mounten
sudo mount -t virtiofs SharedFolder /home/<user>/userSharedFolder
Bei jedem Start mounten:
sudo nano /etc/fstab SharedFolder /home/<user>/userSharedFolder virtiofs defaults 0 0 sudo mount -a

Danke
P.S.: Falls die Lösung bekannt ist und ich es nur überlesen habe, einfach ignorieren.
 
Freut mich, wenn mein Erfahrungsbericht weiter geholfen hat. :)
 
Zurück
Oben