Intel NUC & Proxmox – Passthrough der Intel HD Grafikkarte

Wir haben Proxmox am Laufen! Ich weiß, ich hab an dieser Stelle ein anderes Tutorial versprochen, aber ich möchte dieses hier dazwischenschieben, bevor ich vergesse, was ich alles gemacht habe. Ich habe hier ein paar Stunden meines Lebens investiert, weil die Tutorials die man derzeit online findet, nicht ganz eindeutig sind und man wieder einmal mehrere Quellen zu Rate ziehen muss. Daher möchte ich mein Wissen einmal hier zusammentragen.

Und zwar geht es in diesem Post einmal um das Durchreichen der Host-Grafikkarte an eine KVM Instanz. Da unser Hostbetriebssystem nun läuft und mit einem Textinterface auskommt, welches über SSH erreichbar ist, wollte ich die integrierte Grafiklösung des NUC an eine VM durchreichen. Ich habe daher vorab ein Windows 10 in einer KVM installiert, eingerichtet und aktiviert.

Auf Seite des Hosts sind nun mehrere Vorgänge durchzuführen. Alle diese Features sind experimentell und mit Vorsicht zu genießen. Man kann sich hier das komplette Betriebssystem zerschießen. Also macht vorher Backups von eurer Umgebung. Die Schritte sind nur über die Commandline ausführbar. Das Webinterface von Proxmox hat diese nicht integriert.

Passthrough-Unterstützung aktivieren

Zunächst einmal muss man den PVE Host darauf vorbereiten, dass er nun eine Grafikkarte nutzen oder – sagen wir – zumindest verwalten darf. Dazu schalten wir in Grub die IOMMU Funktion im Kernel ein.

In der Datei /etc/default/grub ist dementsprechend die Line

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

in

GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on"

zu ändern. Danach update-grub ausführen.

Beim Neustart müssen neue Kernel Module geladen werden die in der Standardinstallation von PVE nicht eingetragen sind. In der Datei /etc/modules daher die folgenden Module eintragen und die Datei speichern:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Wir müssen nun herausfinden, ob unser System das Remapping für Interrupts unterstützt. Dazu filtern wir die Ausgabe von dmesg nach ecap

dmesg | grep ecap

Die Ausgabe des Wertes ecap muss mit 8, 9, a, b, c, d, e oder f abschließen. Ist dies nicht der Fall unterstützt das Gerät kein Remapping und man kann nur unsecure interrupt remapping nutzen. Dies ist aber nicht im Scope dieses Tutorials da es nicht wirklich empfohlen wird, dies zu tun.

Damit die Karte nun an die VM durchgereicht werden kann, müssen wir sie vom Hostsystem trennen. Dazu öffnet man die Datei /etc/modprobe.d/blacklist.conf und blacklisted Folgendes:

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

An dieser Stelle ist es eine gute Idee das Hostsystem neuzustarten.

reboot

Anbinden der Grafikkarte an die VM.

Wie gesagt. Wir gehen davon aus, dass wir bereits eine fertig installierte Windows 10 VM haben. Diese müssen wir nun ausschalten und die folgenden Änderungen an der KVM Config Datei vornehmen:

Wir lassen uns zunächst die IDs der Grafikkarte ausgeben:

root@haruka:~# lspci
00:00.0 Host bridge: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Host Bridge (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Device 5a85 (rev 0b)
00:0e.0 Audio device: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Audio Cluster (rev 0b)
00:0f.0 Communication controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Trusted Execution Engine (rev 0b)
00:12.0 SATA controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SATA AHCI Controller (rev 0b)
00:13.0 PCI bridge: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #1 (rev fb)
00:13.1 PCI bridge: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #2 (rev fb)
00:13.2 PCI bridge: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #3 (rev fb)
00:15.0 USB controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series USB xHCI (rev 0b)
00:16.0 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #1 (rev 0b)
00:18.0 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series HSUART Controller #1 (rev 0b)
00:19.0 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #1 (rev 0b)
00:19.1 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #2 (rev 0b)
00:19.2 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #3 (rev 0b)
00:1a.0 Serial bus controller [0c80]: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PWM Pin Controller (rev 0b)
00:1f.0 ISA bridge: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Low Pin Count Interface (rev 0b)
00:1f.1 SMBus: Intel Corporation Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SMBus Controller (rev 0b)
01:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader (rev 01)
02:00.0 Network controller: Intel Corporation Device 24fb (rev 10)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
root@haruka:~#
root@haruka:~# lspci -n -s 02:00
02:00.0 0280: 8086:24fb (rev 10)
root@haruka:~#

Wir tragen die Hardware IDs in die Datei /etc/modprobe.d/vfio.conf ein:

echo "options vfio-pci ids=8086:5a85 disable_vga=1" > /etc/modprobe.d/vfio.conf

Danach fügen wir in der Config Datei der VM noch die Zeile

args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on

ein.

Jetzt die virtuelle Maschine starten und mit tail -f /var/log/syslog überprüfen, ob Fehlermeldungen auftreten. Sollte alles okay sein, kann man im Gastbetriebssystem nun wie gewohnt die Treiber für die Grafikkarte installieren.

Ab diesem Zeitpunkt sollten wir über eine funktionierende VM mit Grafik-Beschleunigung verfügen.

Nicht über die Disk Auslastung wundern. Für diesen Test läuft die VM auf einer externen Festplatte, die scheinbar sehr langsam angebunden ist ^^’
Wir können die Funktion der Grafikkarte prüfen, indem wir ein kleines Spiel laufen lassen.

ACHTUNG: Es kann vorkommen, dass die interne Konsole von Proxmox nicht mehr funktioniert. Daher muss man vor den Änderungen sicherstellen, dass man per RDP Zugang zum System hat.

Von einer Intel HD sind natürlich keine großen Wunder zu erwarten. Allerdings entlasten wir bei grafischen Anwendungen die CPU immens indem wir die Operationen auf die Grafikkarte auslagern.

Leave a Reply

Your email address will not be published. Required fields are marked *

I confirm

This site uses Akismet to reduce spam. Learn how your comment data is processed.