Come abilito il passthrough del dispositivo KVM in Linux?


13

Ho una scheda madre da gioco MSI-GD65 e un Intel i7 4790. VT-D è abilitato nella sezione Funzionalità CPU del BIOS.

Sto eseguendo Ubuntu 14.04.1 LTS e quando provo a staccare un dispositivo, ricevo il seguente messaggio:

# virsh nodedev-detach pci_0000_00_1f_2

errore: impossibile scollegare il dispositivo pci_0000_00_1f_2 errore: Operazione non supportata: né l'assegnazione del dispositivo VFIO né KVM è attualmente supportata su questo sistema

Dmesg include alcune informazioni su IOMMU ma non so dire se ciò significhi che VT-D è abilitato

$ dmesg | grep -i iommu

[0.027450] dmar: IOMMU 0: reg_base_addr fed90000 ver 1: 0 cap c0000020660462 ecap f0101a
[0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1: 0 cap d2008020660462 ecap f010da
[0.02x21MDICAP 1010

Qualcuno può consigliare cosa devo fare per abilitare VT-D su questo sistema e passare i dispositivi PCI agli ospiti KVM per favore?


hai fatto un ciclo completo dopo aver abilitato VT e VT-d?
dyasny,

Risposte:


11

La soluzione a questo problema è abilitare IOMMU nei parametri di avvio di GRUB.

Puoi farlo impostando quanto segue in / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Se si utilizza un processore AMD, è necessario invece aggiungere amd_iommu=oni parametri di avvio

GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash amd_iommu = on"

Quindi eseguire update-grube riavviare

Questo link mi ha aiutato parecchio: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Vedi anche: https://pve.proxmox.com/wiki/Pci_passthrough

Questo mi ha eluso un po 'poiché credevo che iommu fosse un'alternativa AMD a VT-D.


E se questo non funziona la tua CPU potrebbe non supportare VT-D o AMD-VI (la domanda lo chiarisce - sto postando qui per altri)
ndemou

5

Aggiungendo alla risposta di Anonymouslemming: sembra che ci sia un bug in Ubuntu (18.04 per me), che causa l'impostazione di GRUB_CMDLINE_LINUX_DEFAULT in / etc / default / grub.

Può essere corretto commentando il GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub.d/50-curtin-settings.cfg

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567


1

Sembra che tu abbia i requisiti hardware perché un altro modulo lo sta utilizzando (IOAPIC) In questo caso devi semplicemente impostare la fine del software.

Sembra che sia necessario assicurarsi di avere tutti i prerequisiti installati per supportare il distacco del dispositivo appropriato. Sembra che tu non li abbia installati o che non siano impostati.

È necessario disporre delle librerie e dei moduli del kernel appropriati installati e inizializzati prima di tentare di usarli in un caso come questo. Questi saranno vari programmi di utilità "host" e moduli del kernel per la tua configurazione di KVM.

Devi leggere la sezione del manuale su come impostare in modo appropriato la soluzione KVM appropriata e seguire questi passaggi, prima di provare a eseguire le utility. Non si installano semplicemente al primo avvio solo perché sono installati i pacchetti necessari.

Si noti che se il dispositivo in questione è incorporato nella scheda madre, potrebbe non essere tecnicamente un dispositivo PCI, ma un dispositivo mappato PCI. Questi dispositivi sono effettivamente collegati con altri mezzi, ma sono mappati allo spazio BIOS PCI usando il loro BIOS. Possono essere o meno compatibili con il distacco del dispositivo, a seconda di vari aspetti di come sono collegati al sistema.

Inoltre, potresti non essere in grado di staccare i sotto-dispositivi senza staccare i dispositivi principali, se i loro driver sono interdipendenti. È possibile scollegare solo dispositivi con assoluta certezza chi sia il dispositivo principale è il controller PCI, PCI Bridge o qualche altro controller o bridge Bus supportato


Grazie per l'informazione. Immagino che la mia domanda avrebbe dovuto includere "Dove posso trovare la documentazione per farlo in KVM" per essere più specifici.
Anonimo il

0

Sono su centos7

Ho avuto questo errore che mi ha portato qui, ma il mio problema non era con l'aggiornamento (nel mio caso) vim /etc/sysconfig/grube l'aggiunta intel_iommu=onalla fine della riga perGRUB_CMDLINE_LINUX

Ho dovuto eseguire questo comando

grub2-mkconfig -o /boot/grub2/grub.cfg

quindi riavviare

nota: ho anche eseguito grub2-mkconfig con un riavvio prima del comando sopra e che non ha fatto nulla per me da quello che ho visto.

riferimento: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Commento 11 e 12

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.