Implementazione PCI-Passthrough con Linux-KVM su Debian


10

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_ONe CONFIG_PCI_STUBalla 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:

Fedora-- https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

SUSE - "openSUSE: virtualizzazione con KVM" (collegamento omesso a causa di bassa rilevanza e limite di 2 collegamenti)

La guida Fedora funziona fino alla referenziazione setseboolche 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_ONstringa 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_ONin / boot / config-`uname -r` sul mio sistema. Ulteriori ricerche suggeriscono che CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONe CONFIG_PCI_STUBsono 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=oncome 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,


Quello che succede è che non lasci che la videocard si colleghi ad un host (es. Avvio senza collegare quella videocard al tuo host. O non fornendo / disabilitando un driver o usando un parametro di avvio del kernel in modo che venga saltato durante l'avvio) ?
Hennes,

Risposte:


1

Articolo citato per il passthrough PCI, è richiesta la configurazione del kernel

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

Tuttavia, non ho trovato queste opzioni in "Opzioni bus" e invece in "Driver dispositivo -> Supporto hardware IOMMU".

Dopo aver seguito l'articolo menzionato, avevo ancora problemi ad avviare il computer guest e ho ricevuto errori che "Impossibile inizializzare" pci-assegnato "al dispositivo". Sono riuscito ad avviarlo eseguendo:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Fare riferimento al seguente articolo se i problemi persistono: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.