web-dev-qa-db-fra.com

Comment activer KVM de périphérique sous Linux?

J'ai une carte mère MSI-Gd65 Gaming et un Intel i7 4790. VT-D est activé dans la section Fonctionnalités CPU du bios.

J'utilise Ubuntu 14.04.1 LTS et lorsque j'essaie de détacher un périphérique, j'obtiens le message suivant:

# virsh nodedev-detach pci_0000_00_1f_2

erreur: impossible de détacher le périphérique pci_0000_00_1f_2 erreur: opération non prise en charge: ni VFIO ni KVM est actuellement prise en charge sur ce système

Dmesg comprend des informations sur IOMMU mais je ne peux pas dire si cela signifie que VT-D est activé

$ 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,027521] ID IOAPIC 8 sous la base DRHD 0xfed91000 IOMMU 1

Quelqu'un peut-il indiquer ce que je dois faire pour activer VT-D sur ce système et passer par des périphériques PCI à KVM invités s'il vous plaît?

13
Anonymouslemming

La solution à ce problème consiste à activer IOMMU dans vos paramètres de démarrage GRUB.

Vous pouvez le faire en définissant ce qui suit dans/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Si vous utilisez un processeur AMD, vous devez ajouter AMD_iommu=on aux paramètres de démarrage à la place

GRUB_CMDLINE_LINUX_DEFAULT = "splash silencieux AMD_iommu = on"

Exécutez ensuite update-grub et redémarrez

Ce lien m'a beaucoup aidé: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Voir aussi: https://pve.proxmox.com/wiki/Pci_passthrough

Cela m'a quelque peu échappé car je pensais que l'iommu était une alternative AMD au VT-D.

11
Anonymouslemming

Ajout à la réponse de Anonymouslemming: Il semble y avoir un bogue dans Ubuntu (18.04 pour moi), ce qui provoque le paramètre pour GRUB_CMDLINE_LINUX_DEFAULT dans/etc/default/grub à ignorer.

Il peut être corrigé en commentant GRUB_CMDLINE_LINUX_DEFAULT dans /etc/default/grub.d/50-curtin-settings.cfg

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

5
Mads Y

Vous semblez avoir la configuration matérielle requise car un autre module l'utilise (IOAPIC) Dans ce cas, vous devez simplement configurer la fin du logiciel.

Il semble que vous devez vous assurer que toutes les conditions préalables sont installées pour prendre en charge le détachement du périphérique approprié. Il semble que vous ne les ayez pas installés ou qu'ils ne soient pas configurés.

Vous devez avoir installé et initialisé les bibliothèques et modules de noyau appropriés avant d'essayer de les utiliser dans un cas comme celui-ci. Il s'agira de divers utilitaires système "hôte" et modules de noyau pour votre configuration KVM.

Vous devez lire la section du manuel sur la façon de configurer correctement votre solution KVM appropriée) et suivre ces étapes avant d'essayer de simplement exécuter les utilitaires. Ils ne se contentent pas de premier lancement juste parce que les packages nécessaires sont installés.

Veuillez noter que si le périphérique en question est intégré dans la carte mère, il peut ne pas être techniquement un périphérique PCI, mais un périphérique PCI-Mapped. Ces périphériques sont en fait connectés par d'autres moyens, mais sont mappés à l'espace BIOS PCI à l'aide de leur BIOS. Ils peuvent être compatibles ou non avec le détachement du périphérique, selon divers aspects de la façon dont ils sont connectés au système.

En outre, vous ne pourrez peut-être pas détacher des sous-périphériques sans détacher les périphériques parents, si leurs pilotes sont interdépendants. Vous pouvez uniquement détacher des périphériques avec une certitude absolue qui est le périphérique parent est le contrôleur PCI, le pont PCI ou tout autre contrôleur ou pont de bus pris en charge

1

Je suis sur centos7

J'ai eu cette erreur qui m'a conduit ici mais mon problème n'était pas avec la mise à jour du (dans mon cas) vim /etc/sysconfig/grub et en ajoutant intel_iommu=on à la fin de la ligne pour GRUB_CMDLINE_LINUX

Je devais exécuter cette commande

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

puis redémarrez

remarque: j'ai également exécuté grub2-mkconfig avec un redémarrage avant la commande ci-dessus et cela n'a rien fait pour moi d'après ce que j'ai vu.

référence: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Commentaire 11 et 12

0
gstlouis