Sto tentando di utilizzare PCI Passthrough per collegare una vecchia scheda video (Radeon 4770) a una macchina virtuale. Sto usando Linux-KVM per far funzionare le mie macchine virtuali su un host Debian Linux (Wheezy, 3.2.0-4-amd64).
Domanda
Per chiarire, non sono sicuro di quale sia il "percorso" corretto per impiantare PCI-Passthrough con Linux KVM. A questo punto sospetto che l'azione corretta sia quella di aggiungere CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
e CONFIG_PCI_STUB
alla sezione "Opzioni bus (PCI ecc.)" Del sorgente del kernel e ricompilare.
Ma non sono sicuro che si tratti di un elenco esaustivo di aggiunte necessarie prima di ricominciare. O se è necessaria la ricompilazione del kernel, forse esiste un metodo più semplice?
Delle guide a cui ho fatto riferimento, solo linux-kvm.org menziona esplicitamente la compilazione è necessaria. Linux-KVM è già installato e funziona come hypervisor.
Ricerca
A questo punto penso che il mio problema sia legato al mio kernel. La mia risorsa principale è stata la guida su linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Tuttavia, ho trovato altre risorse che indicano metodi leggermente diversi che sono (apparentemente) specifici per la distribuzione:
SUSE - "openSUSE: virtualizzazione con KVM" (collegamento omesso a causa di bassa rilevanza e limite di 2 collegamenti)
La guida Fedora funziona fino alla referenziazione setsebool
che sembra essere specifica per RedHat. La guida di SUSE indica che l'assegnazione della scheda grafica non è supportata da SUSE, tuttavia mi riferisco anche perché indicava che dovrei trovare una CONFIG_DMAR_DEFAULT_ON
stringa in / boot / config-`uname -r`. Anche il sito linux-kvm.org fa riferimento CONFIG_DMAR_DEFAULT_ON
, quindi questo sembra essere un componente comune e necessario.
Nota: non ho trovato restrizioni per le schede grafiche nelle guide per Fedora o Debian. Il documento SUSE di riferimento è datato 2006-2013.
Non riesco a trovare CONFIG_DMAR_DEFAULT_ON
in / boot / config-`uname -r` sul mio sistema. Ulteriori ricerche suggeriscono che CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
e CONFIG_PCI_STUB
sono elementi di configurazione del kernel Linux che sono rilevanti per le istruzioni su linux-kvm.org . Pertanto, credo di dover ricompilare il kernel del mio host con questi 3 (almeno) elementi di configurazione del kernel. L'avvio intel_iommu=on
come parametro del kernel nel mio sistema operativo host sembra essere insufficiente.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Conferma supporto VT-d / IOMMU / KVM
La mia ricerca indica che PCI-Passthrough richiede sia il supporto CPU che la scheda madre per VT-d.
VT-d
Ho confermato che il mio processore, un INTEL i7-3770 non k (per ark.intel.com/products/65719), supporta VT-d:
Tecnologia di virtualizzazione Intel® per I / O diretto (VT-d) ‡ Sì
La mia scheda madre Asrock Z77 Extreme4 supporta anche VT-d (per pagina 62 del Manuale dell'utente):
VT-d Utilizzare questa opzione per abilitare o disabilitare la tecnologia Intel ® VT-d (Intel® Virtualization Technology for Directed I / O). Il valore predefinito di questa funzione è [Disabilitato].
IOMMU
Ho verificato che il mio sistema ha il supporto IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM è installato e funzionale, oltre al supporto PCI-Passthrough:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Ho assicurato che VT-d è abilitato tramite il BIOS della mia scheda madre. Pertanto, non sospetto problemi hardware / BIOS che impedirebbero l'utilizzo di VT-d. Indipendentemente da ciò, non sono in grado di staccare con successo la mia scheda video dal mio host e riassegnarla a una macchina virtuale .
Pensieri di chiusura
Infine, vorrei menzionare che ho anche provato i test:
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
e ho ottenuto il seguente errore dopo aver provato a creare la VM di destinazione:
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
Immagino che ciò sia dovuto al fatto che l'host non rinuncerà ancora al controllo della scheda video ed è probabilmente dovuto al fatto che il kernel non viene compilato con gli elementi di configurazione appropriati.
Questo è un nuovo territorio per me, quindi ti prego di perdonare la mia inesperienza. Vorrei molto apprezzare tutte le risposte di sorta, anche se è semplicemente la conferma che sono sulla strada giusta. Per favore fatemi sapere se ho fatto una supervisione clamorosa o sto pensando troppo. Anche le critiche costruttive alla mia domanda sono benvenute. Fammi sapere se non ho fornito abbastanza informazioni per "aiutarti ad aiutarmi" (o se ne ho incluse troppe!). Sarei più che felice di aiutare a rendere la mia domanda più chiara o più facile da rispondere.
Grazie in anticipo,