Implémentation de PCI-Passthrough avec Linux-KVM sur Debian


10

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_ONet 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:

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

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 setseboolqui 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_ONchaî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_ONdans / boot / config-`uname -r` sur mon système. D'autres recherches suggèrent que CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONet CONFIG_PCI_STUBsont 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=oncomme 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,


Ce qui se passe est que vous ne laissez pas la carte vidéo s’attacher du tout à un hôte (par exemple, démarrer sans attacher cette carte vidéo à votre hôte. Soit en ne fournissant / désactivant pas de pilote, soit en utilisant un paramètre de démarrage du noyau pour qu’il soit ignoré lors du démarrage) ?
Hennes

Réponses:


1

Article mentionné pour le passthrough PCI, la configuration du noyau est requise

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 "*"

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:

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.