Heute wieder ein kurzer Bericht zum Thema PCI Passthrough in KVM mit einer IntelQuadNIC Karte und wie man den Fehlern „virsh PCI Einheit kann nicht zugeordnet werden“ bzw. „Requested operation is not valid: PCI device is not assignable“
beikommt.
Zwar habe ich die Karte schon länger eingebaut, aber heute wollte nach den Lernmonaten das Teil endlich in Betrieb nehmen. Die Rede ist von einer Intel Quad-Netzwerkkarte, die ich mir gekauft hatte, um evtl eine Routerapplikation über KVM laufen zu lassen. Wie bei meinem virtuellen Fileserver habe ich daher die PCI-Express Karte per Passthrough direkt an die VM durchreichen wollen, was jedoch mit dem Fehler
virsh PCI Einheit 0000:0b:00.0 kann nicht zugeordnet werden
quittiert wurde. Da mein Server auf Deutsch konfiguriert ist, ist halt auch die Fehlermeldung auf Deutsch, sodass ich erstmal das genaue Pendant im Englischen finden musste.
Das englische Gegenstück lautet also in etwa:
ERROR Requested operation is not valid: PCI device 0000:06:00.1 is not assignable
was ich im Thread von Ivan Kabainov auf der Maillingliste fand.
Lange Rede kurzer Sinn: Die Karte liegt hinter einem ACS Switch, was QEMU wenn er strenger konfiguriert ist dazu veranlasst, die PCI-Karte nicht an den Gast zu binden. Die einzigen weiteren Infos zum Thema ACS (Access Control Switch) bei PCI-SIG habe ich nur bei Knowledgebase bei VMware gefunden. Jedenfalls kann man in der qemu.conf, die bei mir unter /etc/libvirt/qemu.conf residiert den Parameter:
relaxed_acs_check = 1
setzen, Dazu kommt dann noch, dass man ein weiteres IOMMU-Gruppenproblem umgeht, wenn man direkt darauf achtet, dass man alle Interfaces an den Gast bindet, weil die Karte eine Gruppe darstellt und nicht ohne weiteres nur einzelne Gruppenmitglieder durchgereicht werden können.
Also an dieser Stelle von mir nochmal Dank an Ivan Kabainov, der sein Problem lösen konnte und es auf der Mailingliste gepostet hat, statt einfach zu verschwinden 🙂