J'essaie d'utiliser PCI-Passthrough pour attacher une ancienne carte vidéo (Radeon 4770) à une machine virtuelle. J'utilise Linux-KVM pour exécuter mes machines virtuelles sur un hôte Debian Linux (Wheezy, 3.2.0-4-amd64).
Question
Pour clarifier, je ne sais pas quel est le «chemin» correct pour implémenter PCI-Passthrough avec Linux KVM. À ce stade, je soupçonne que la bonne action consiste à ajouter CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
et CONFIG_PCI_STUB
à la section "Options de bus (PCI, etc.)" de la source du noyau et de recompiler.
Mais je ne suis pas sûr qu'il s'agisse d'une liste exhaustive des ajouts nécessaires avant de la refaire. Ou si la recompilation du noyau est nécessaire - il existe peut-être une méthode plus simple?
Parmi les guides auxquels j'ai fait référence, seul linux-kvm.org mentionne explicitement que la compilation est nécessaire. Linux-KVM est déjà installé et fonctionne comme un hyperviseur.
Recherche
À ce stade, je pense que mon problème est lié à mon noyau. Ma principale ressource a été le guide sur linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Cependant, j'ai trouvé d'autres ressources qui indiquent des méthodes légèrement différentes qui sont (apparemment) spécifiques à la distribution:
SUSE - "openSUSE: virtualisation avec KVM" (lien omis en raison de la faible pertinence et de la limite de 2 liens)
Le guide Fedora fonctionne jusqu'au référencement setsebool
qui semble être spécifique à RedHat. Le guide SUSE indique que l'affectation des cartes graphiques n'est pas prise en charge par SUSE, mais je le fais également référence car il indique que je dois trouver une CONFIG_DMAR_DEFAULT_ON
chaîne dans / boot / config-`uname -r`. Le site linux-kvm.org fait également référence CONFIG_DMAR_DEFAULT_ON
, donc cela semble être un composant commun et nécessaire.
Remarque: je n'ai pas trouvé de restrictions pour les cartes graphiques dans les guides pour Fedora ou Debian. Le document SUSE référencé est daté de 2006-2013.
Je ne trouve pas CONFIG_DMAR_DEFAULT_ON
dans / boot / config-`uname -r` sur mon système. D'autres recherches suggèrent que CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
et CONFIG_PCI_STUB
sont des éléments de configuration du noyau Linux qui sont pertinents pour les instructions sur linux-kvm.org . En tant que tel, je pense que je dois recompiler le noyau de mon hôte avec ces 3 éléments de configuration du noyau (au moins). Le démarrage avec intel_iommu=on
comme paramètre du noyau sur mon hôte OS semble insuffisant.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Confirmation de la prise en charge de VT-d / IOMMU / KVM
Mes recherches indiquent que PCI-Passthrough nécessite à la fois le CPU et la carte mère pour VT-d.
VT-d
J'ai confirmé que mon processeur, un INTEL i7-3770 non k (per ark.intel.com/products/65719), prend en charge VT-d:
Technologie de virtualisation Intel® pour les E / S dirigées (VT-d) ‡ Oui
Ma carte mère Asrock Z77 Extreme4 prend également en charge VT-d (selon la page 62 du manuel de l'utilisateur):
VT-d Utilisez-le pour activer ou désactiver la technologie Intel® VT-d (Intel® Virtualization Technology for Directed I / O). La valeur par défaut de cette fonction est [Désactivé].
IOMMU
J'ai vérifié que mon système est compatible avec IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM est installé et fonctionnel, à part le support PCI-Passthrough:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Je me suis assuré que VT-d est activé via le BIOS de ma carte mère. En tant que tel, je ne soupçonne pas de problèmes matériels / BIOS qui empêcheraient l'utilisation de VT-d. Quoi qu'il en soit, je ne parviens pas à détacher ma carte vidéo de mon hôte et à la réaffecter à une machine virtuelle .
Pensées de clôture
Enfin, je voudrais mentionner que j'ai également essayé de tester:
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
et a obtenu l'erreur suivante après avoir essayé de créer la machine virtuelle cible:
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
Je suppose que cela est dû au fait que l'hôte ne renoncera toujours pas au contrôle de la carte vidéo et est probablement dû au fait que le noyau n'est pas compilé avec les éléments de configuration appropriés.
C'est un nouveau territoire pour moi, alors pardonnez mon inexpérience. J'apprécierais grandement tout commentaire, même s'il s'agit simplement d'une confirmation que je suis sur la bonne voie. Veuillez me faire savoir si j'ai fait une erreur flagrante ou si je réfléchis trop. La critique constructive de ma question est également la bienvenue. Faites-moi savoir si je n'ai pas fourni suffisamment d'informations pour "vous aider à m'aider" (ou si j'en ai trop inclus!). Je serais plus qu'heureux d'aider à rendre ma question plus claire ou plus facile à répondre.
Merci d'avance,
la source
Réponses:
Article mentionné pour le passthrough PCI, la configuration du noyau est requise
Cependant, je n'ai pas pu trouver ces options sous "Options de bus" et à la place sous "Pilotes de périphérique -> Support matériel IOMMU".
Après avoir suivi l'article mentionné, j'ai toujours eu des problèmes pour démarrer la machine invitée et obtenir des erreurs indiquant que "le périphérique 'pci-assign' n'a pas pu être initialisé". J'ai réussi à le faire démarrer en exécutant:
Reportez-vous à l'article suivant si vous rencontrez toujours des problèmes: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html
la source