14.10. Attacher des périphériques PCI à des machines virtuelles sur IBM Z
En utilisant le pilote de périphérique vfio-pci
, vous pouvez affecter des périphériques PCI en mode pass-through à vos machines virtuelles (VM) sur les hôtes IBM Z. Cela permet par exemple à la VM d'utiliser des disques flash NVMe pour gérer les bases de données.
Conditions préalables
- Vous disposez d'un système hôte doté de l'architecture matérielle IBM Z.
- Vous disposez d'une VM cible du système d'exploitation Linux.
Les modules nécessaires du noyau
vfio
ont été chargés sur l'hôte.# lsmod | grep vfio
La sortie de cette commande doit contenir les modules suivants :
-
vfio_pci
-
vfio_pci_core
-
vfio_iommu_type1
-
Procédure
Obtenez l'identifiant de l'adresse PCI de l'appareil que vous souhaitez utiliser.
# lspci -nkD 0000:00:00.0 0000: 1014:04ed Kernel driver in use: ism Kernel modules: ism 0001:00:00.0 0000: 1014:04ed Kernel driver in use: ism Kernel modules: ism 0002:00:00.0 0200: 15b3:1016 Subsystem: 15b3:0062 Kernel driver in use: mlx5_core Kernel modules: mlx5_core 0003:00:00.0 0200: 15b3:1016 Subsystem: 15b3:0062 Kernel driver in use: mlx5_core Kernel modules: mlx5_core
Ouvrez la configuration XML de la VM à laquelle vous souhaitez attacher le périphérique PCI.
# virsh edit vm-name
Ajoutez la configuration suivante
<hostdev>
à la section<devices>
du fichier XML.Remplacez les valeurs de la ligne
address
par l'adresse PCI de votre appareil. Par exemple, si l'adresse de l'appareil est0003:00:00.0
, utilisez la configuration suivante :<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/> </source> <address type="pci"/> </hostdev>
Optional: Pour modifier la façon dont le système d'exploitation invité détectera le périphérique PCI, vous pouvez également ajouter un sous-élément
<zpci>
à l'élément<address>
. Dans la ligne<zpci>
, vous pouvez ajuster les valeursuid
etfid
, ce qui modifie l'adresse PCI et l'ID de fonction du périphérique dans le système d'exploitation invité.<hostdev mode="subsystem" type="pci" managed="yes"> <driver name="vfio"/> <source> <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/> </source> <address type="pci"> <zpci uid="0x0008" fid="0x001807"/> </address> </hostdev>
Dans cet exemple :
-
uid="0x0008"
définit l'adresse PCI de domaine du périphérique dans la VM à0008:00:00.0
. fid="0x001807"
définit la valeur de l'emplacement de l'appareil à0x001807
. Par conséquent, la configuration du périphérique dans le système de fichiers de la VM est enregistrée à l'adresse/sys/bus/pci/slots/00001087/address
.Si ces valeurs ne sont pas spécifiées,
libvirt
les configure automatiquement.
-
- Sauvegarder la configuration XML.
Si la VM est en cours d'exécution, arrêtez-la.
# virsh shutdown vm-name
Vérification
- Démarrez la VM et connectez-vous à son système d'exploitation invité.
Dans le système d'exploitation invité, vérifiez que le périphérique PCI est répertorié.
Par exemple, si l'adresse de l'appareil est
0003:00:00.0
, utilisez la commande suivante :# lspci -nkD | grep 0003:00:00.0 0003:00:00.0 8086:9a09 (rev 01)