Ich versuche, mit PCI-Passthrough eine alte Grafikkarte (Radeon 4770) an eine virtuelle Maschine anzuschließen. Ich verwende Linux-KVM, um meine virtuellen Maschinen auf einem Debian Linux-Host (Wheezy, 3.2.0-4-amd64) auszuführen.
Frage
Zur Verdeutlichung bin ich mir nicht sicher, welcher Pfad für die Implementierung von PCI-Passthrough mit Linux KVM richtig ist. In diesem Stadium vermute ich , die richtige Aktion ist zu addieren CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
und CONFIG_PCI_STUB
die „Bus - Optionen (PCI etc.)“ -Abschnitt der Kernel - Quelle und neu kompilieren.
Ich bin mir jedoch nicht sicher, ob dies eine vollständige Liste der erforderlichen Ergänzungen ist, bevor ich sie erneut zusammenstelle. Oder wenn eine Neukompilierung des Kernels erforderlich ist - vielleicht gibt es eine einfachere Methode?
Von den Handbüchern, auf die ich verwiesen habe, erwähnt nur linux-kvm.org ausdrücklich, dass eine Kompilierung erforderlich ist. Linux-KVM ist bereits installiert und fungiert als Hypervisor.
Forschung
An diesem Punkt denke ich, dass mein Problem mit meinem Kernel zusammenhängt. Meine primäre Ressource war der Leitfaden unter linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Ich habe jedoch andere Ressourcen gefunden, die auf leicht unterschiedliche Methoden hinweisen, die (scheinbar) verteilungsspezifisch sind:
SUSE - "openSUSE: Virtualisierung mit KVM" (Link wegen geringer Relevanz und 2-Link-Limit weggelassen)
Der Fedora-Leitfaden funktioniert bis zur Referenzierung, setsebool
die RedHat-spezifisch zu sein scheint. Das SUSE-Handbuch gibt an, dass die Zuweisung von Grafikkarten von SUSE nicht unterstützt wird. Ich verweise jedoch auch darauf, da darin angegeben ist, dass ich eine CONFIG_DMAR_DEFAULT_ON
Zeichenfolge in / boot / config-`uname -r` finden sollte. Auf die Website linux-kvm.org wird ebenfalls verwiesen CONFIG_DMAR_DEFAULT_ON
, sodass dies eine häufige und notwendige Komponente zu sein scheint.
Hinweis: Ich habe in den Anleitungen für Fedora oder Debian keine Einschränkungen für Grafikkarten gefunden. Das referenzierte SUSE-Dokument ist vom 2006-2013.
Ich kann CONFIG_DMAR_DEFAULT_ON
in / boot / config-`uname -r` auf meinem System nicht finden . Weitere Untersuchungen legen nahe, dass CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
und CONFIG_PCI_STUB
Linux-Kernel-Konfigurationselemente sind, die für die Anweisungen auf linux-kvm.org relevant sind . Daher glaube ich, dass ich den Kernel meines Hosts mit diesen 3 (mindestens) Kernel-Konfigurationselementen neu kompilieren muss. Das Booten mit intel_iommu=on
als Kernel-Parameter für mein Host-Betriebssystem scheint unzureichend zu sein.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Bestätigung der VT-d / IOMMU / KVM-Unterstützung
Meine Forschung zeigt, dass PCI-Passthrough sowohl CPU- als auch Motherboard-Unterstützung für VT-d erfordert.
VT-d
Ich habe bestätigt, dass mein Prozessor, ein nicht-k INTEL i7-3770 (per ark.intel.com/products/65719), VT-d unterstützt:
Intel® Virtualisierungstechnologie für gerichtete E / A (VT-d) ‡ Ja
Mein Asrock Z77 Extreme4-Motherboard unterstützt auch VT-d (siehe Seite 62 des Benutzerhandbuchs):
VT-d Verwenden Sie diese Option, um die Intel ® VT-d-Technologie (Intel ® Virtualisierungstechnologie für gerichtete E / A) zu aktivieren oder zu deaktivieren. Der Standardwert dieser Funktion ist [Deaktiviert].
IOMMU
Ich habe überprüft, ob mein System IOMMU-Unterstützung bietet:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM ist installiert und funktionsfähig, abgesehen von der PCI-Passthrough-Unterstützung:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Ich habe sichergestellt, dass VT-d über das BIOS meines Motherboards aktiviert ist. Daher vermute ich keine Hardware- / BIOS-Probleme, die die Verwendung von VT-d verhindern würden. Unabhängig davon kann ich meine Grafikkarte nicht erfolgreich von meinem Host trennen und einer virtuellen Maschine zuweisen .
Gedanken schließen
Abschließend möchte ich erwähnen, dass ich auch versucht habe zu testen:
echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0
und hat nach dem Versuch, die Ziel-VM zu erstellen, den folgenden Fehler erhalten:
Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized
Ich vermute, dies liegt daran, dass der Host die Kontrolle über die Grafikkarte immer noch nicht aufgibt und wahrscheinlich daran liegt, dass der Kernel nicht mit den entsprechenden Konfigurationselementen kompiliert wird.
Dies ist Neuland für mich, bitte verzeihen Sie meine Unerfahrenheit. Ich würde sehr schätzen jedes Feedback auch immer, auch wenn es nur eine Bestätigung ist , dass ich auf dem richtigen Weg bin. Bitte lassen Sie mich wissen, wenn ich ein grelles Versehen gemacht habe oder überdenke. Konstruktive Kritik an meiner Frage ist ebenfalls willkommen. Lassen Sie mich wissen, wenn ich nicht genügend Informationen bereitgestellt habe, um "Ihnen zu helfen, mir zu helfen" (oder wenn ich zu viel aufgenommen habe!). Gerne helfe ich Ihnen, meine Frage klarer oder leichter zu beantworten.
Danke im Voraus,