Dekoratives Bildchen

VT-d / IOMMU mit Intel Haswell und Z87 Chipsatz

Ein Teilprojekt von Homeserver 2.0 war die Virtualisierung meines bestehenden Routers.
Das externe Interface wollte ich direkt an die VM durchreichen, damit der Hauptrechner keinen externen Traffic sieht.

Gut und schön, virt-manager gestartet und folgende Schritte durchgeführt:
add-pci-1 add-pci-2

Beim Reboot der VM bekam ich dann einen Fehler: Connection reset by peer und auch der qemu Prozess lief nicht.

Eine genauere Fehlermeldung gabs über die virsh:

server # virsh
virsh # start router-linz --console
error: Failed to start domain router-linz
error: internal error process exited while connecting to monitor: qemu-kvm: 
-device pci-assign,host=03:00.0,id=hostdev0,configfd=24,bus=pci.0,addr=0x5: 
No IOMMU found.  Unable to assign device "hostdev0"
qemu-kvm: -device pci-assign,host=03:00.0,id=hostdev0,configfd=24,bus=pci.0
,addr=0x5: Device 'kvm-pci-assign' could not be initialized
2013-10-01 17:44:52.566+0000: shutting down

Ok, “No IOMMU found”. Ich hatte mir aber extra einen i5-4570 gekauft der VT-d unterstützt. Neu gebootet und ins Bios, VT-d war dort auch an.

Nach ein bisschen Recherche im Netz fand ich ein VT-d HowTo für Xen. Dort gibts einen extra Abschnitt und man muss trotz im Kernel aktivierter Unterstützung noch einen Parameter beim booten übergeben.

Ich habe also iommu=1 getestet und hatte keinen Erfolg. Auch alle anderen möglichen Kombinationen der erwähnten Kernel Parameter waren nicht erfolgreich.

Nach zwei (!) Stunden kurz vor dem Aufgeben fand ich einen Artikel auf einer Mailinglist. Den Link dazu habe ich jetzt nicht mehr hier, der den Kernel Parameter intel_iommu=1 erwähnt.

Grub menu.lst angepasst, rebootet und schon hats geklappt.

Kurzfassung:

Um VT-d unter Linux zu aktivieren muss man beim Booten den Kernel Parameter intel_iommu=1 übergeben. Die Unterstützung im Kernel alleine aktiviert das Feature nicht.

Leave a Reply