12.8. Migration en direct d'une machine virtuelle avec une fonction virtuelle Mellanox attachée
En tant qu'aperçu technologique, vous pouvez migrer en direct une machine virtuelle (VM) avec une fonction virtuelle (VF) attachée à un dispositif de mise en réseau Mellanox. Actuellement, cela n'est possible qu'en utilisant un dispositif de mise en réseau Mellanox CX-7. Le VF sur le périphérique de mise en réseau Mellanox CX-7 utilise un nouveau pilote mlx5_vfio_pci
, qui ajoute des fonctionnalités nécessaires à la migration en direct, et libvirt
lie automatiquement le nouveau pilote au VF.
Limites
Actuellement, certaines fonctions de virtualisation ne peuvent pas être utilisées lors de la migration en direct d'une VM à laquelle est attachée une fonction virtuelle Mellanox :
- Calcul du taux de génération de pages de mémoire sale de la VM.
- Utilisation d'une migration post-copie en direct.
- Utilisation d'une unité virtuelle de gestion de la mémoire d'E/S (vIOMMU) dans la VM.
Cette fonctionnalité n'est incluse dans RHEL 9 qu'en tant qu'aperçu technologique, ce qui signifie qu'elle n'est pas prise en charge.
Conditions préalables
Vous avez un périphérique réseau Mellanox CX-7 dont la version du micrologiciel est égale ou supérieure à 28.36.1010.
Reportez-vous à la documentation de Mellanox pour plus de détails sur les versions du micrologiciel.
Le paquetage
mstflint
est installé à la fois sur l'hôte source et sur l'hôte de destination :dnf install mstflint
# dnf install mstflint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le périphérique de mise en réseau Mellanox CX-7 a pour adresse
VF_MIGRATION_MODE
MIGRATION_ENABLED
:mstconfig -d <device_pci_address> query | grep -i VF_migration
# mstconfig -d <device_pci_address> query | grep -i VF_migration VF_MIGRATION_MODE MIGRATION_ENABLED(2)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez remplacer
VF_MIGRATION_MODE
parMIGRATION_ENABLED
à l'aide de la commande suivante :mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
# mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Le paquetage
openvswitch
est installé à la fois sur l'hôte source et sur l'hôte de destination :dnf install openvswitch
# dnf install openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L'unité centrale et le micrologiciel de votre hôte prennent en charge l'unité de gestion de la mémoire d'E/S (IOMMU).
- Si vous utilisez un processeur Intel, il doit supporter la technologie de virtualisation Intel pour Directed I/O (VT-d).
- Si vous utilisez un processeur AMD, il doit prendre en charge la fonction AMD-Vi.
Le système hôte utilise le service de contrôle d'accès (ACS) pour assurer l'isolation de l'accès direct à la mémoire (DMA) pour la topologie PCIe. Vérifiez ce point auprès du fournisseur du système.
Pour plus d'informations, voir Considérations matérielles pour l'implémentation du SR-IOV.
L'interface réseau hôte que vous souhaitez utiliser pour créer des VF est en cours d'exécution. Par exemple, pour activer l'interface eth1 et vérifier qu'elle fonctionne, utilisez les commandes suivantes :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour que l'attribution de périphériques SR-IOV fonctionne, la fonction IOMMU doit être activée dans le BIOS et le noyau de l'hôte. Pour ce faire, il faut
Sur un hôte Intel, activez la technologie de virtualisation Intel pour Directed I/O (VT-d) :
Régénérer la configuration GRUB avec les paramètres
intel_iommu=on
etiommu=pt
:grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
# grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Redémarrer l'hôte.
Sur un hôte AMD, activez AMD-Vi :
Régénérer la configuration GRUB avec le paramètre
iommu=pt
:grubby --args="iommu=pt" --update-kernel=ALL
# grubby --args="iommu=pt" --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Redémarrer l'hôte.
- L'hôte source et l'hôte de destination utilisent tous deux l'hyperviseur KVM.
-
L'hôte source et l'hôte de destination sont en mesure de se joindre l'un l'autre sur le réseau. Utilisez l'utilitaire
ping
pour le vérifier. Les ports suivants sont ouverts sur l'hôte de destination.
- Le port 22 est nécessaire pour se connecter à l'hôte de destination en utilisant SSH.
- Le port 16509 est nécessaire pour se connecter à l'hôte de destination en utilisant TLS.
- Le port 16514 est nécessaire pour se connecter à l'hôte de destination en utilisant TCP.
- Les ports 49152-49215 sont nécessaires à QEMU pour transférer les données de migration de la mémoire et du disque.
- L'hôte source et l'hôte de destination utilisent des systèmes d'exploitation et des types de machines qui autorisent la migration. Pour s'en assurer, voir Hôtes pris en charge pour la migration des machines virtuelles.
- La machine virtuelle doit être compatible avec les caractéristiques du processeur de l'hôte de destination. Pour s'en assurer, voir Vérification de la compatibilité du CPU de l'hôte pour la migration de la machine virtuelle.
Les images de disque des machines virtuelles qui seront migrées sont situées sur un emplacement réseau distinct accessible à la fois à l'hôte source et à l'hôte de destination. Cette opération est facultative pour la migration hors ligne, mais obligatoire pour la migration d'une VM en cours d'exécution.
Pour obtenir des instructions sur la configuration d'un tel stockage partagé de VM, voir Partage d'images de disques de machines virtuelles avec d'autres hôtes.
- Lors de la migration d'une VM en cours d'exécution, la bande passante de votre réseau doit être supérieure à la vitesse à laquelle la VM génère des pages de mémoire sale.
Une prise réseau virtuelle correspondant au protocole de connexion est activée.
When performing a VM migration, the
virsh
client on the source host can use one of several protocols to connect to the libvirt daemon on the destination host. Examples in the following procedure use an SSH connection, but you can choose a different one. ** If you want libvirt to use an SSH connection, ensure that thevirtqemud
socket is enabled and running on the destination host.systemctl enable --now virtqemud.socket
# systemctl enable --now virtqemud.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si vous souhaitez que libvirt utilise une connexion TLS, assurez-vous que le socket
virtproxyd-tls
est activé et fonctionne sur l'hôte de destination.systemctl enable --now virtproxyd-tls.socket
# systemctl enable --now virtproxyd-tls.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si vous souhaitez que libvirt utilise une connexion TCP, assurez-vous que le socket
virtproxyd-tcp
est activé et fonctionne sur l'hôte de destination.systemctl enable --now virtproxyd-tcp.socket
# systemctl enable --now virtproxyd-tcp.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procédure
Sur l'hôte source, configurez le périphérique réseau Mellanox en mode
switchdev
.devlink dev eswitch set pci/<device_pci_address> mode switchdev
# devlink dev eswitch set pci/<device_pci_address> mode switchdev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sur l'hôte source, créez une fonction virtuelle sur le dispositif Mellanox.
echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
# echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La partie
/0000\:e1\:00.0/
du chemin d'accès au fichier est basée sur l'adresse PCI de l'appareil. Dans l'exemple, il s'agit de :0000:e1:00.0
Sur l'hôte source, détachez le VF de son pilote.
virsh nodedev-detach <vf_pci_address> --driver pci-stub
# virsh nodedev-detach <vf_pci_address> --driver pci-stub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous pouvez afficher l'adresse PCI du VF à l'aide de la commande suivante :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Sur l'hôte source, activez la fonction de migration du VF.
devlink port function set pci/0000:e1:00.0/1 migratable enable
# devlink port function set pci/0000:e1:00.0/1 migratable enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple,
pci/0000:e1:00.0/1
fait référence au premier VF sur le périphérique Mellanox avec l'adresse PCI donnée.Sur l'hôte source, configurez Open vSwitch (OVS) pour la migration du VF. Si le périphérique Mellanox est en mode
switchdev
, il ne peut pas transférer de données sur le réseau.Assurez-vous que le service
openvswitch
est en cours d'exécution.systemctl start openvswitch
# systemctl start openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Activer le délestage matériel pour améliorer les performances du réseau.
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
# ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Augmentez la durée maximale d'inactivité pour vous assurer que les connexions réseau restent ouvertes pendant la migration.
ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
# ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer un nouveau pont dans l'instance OVS.
ovs-vsctl add-br <bridge_name>
# ovs-vsctl add-br <bridge_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Redémarrez le service
openvswitch
.systemctl restart openvswitch
# systemctl restart openvswitch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajoutez l'appareil physique Mellanox au pont OVS.
ovs-vsctl add-port <bridge_name> enp225s0np0
# ovs-vsctl add-port <bridge_name> enp225s0np0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple,
<bridge_name>
est le nom du pont que vous avez créé à l'étape d etenp225s0np0
est le nom de l'interface réseau du périphérique Mellanox.Ajouter le VF de l'appareil Mellanox au pont OVS.
ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
# ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple,
<bridge_name>
est le nom du pont que vous avez créé à l'étape d etenp225s0npf0vf0
est le nom de l'interface réseau du VF.
- Répétez les étapes 1 à 5 sur le site destination host.
Sur l'hôte source, ouvrez un nouveau fichier, tel que
mlx_vf.xml
, et ajoutez la configuration XML suivante du VF :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cet exemple configure un passage du VF en tant qu'interface réseau pour la VM. Assurez-vous que l'adresse MAC est unique et utilisez l'adresse PCI du VF sur l'hôte source.
Sur l'hôte source, attachez le fichier XML VF à la VM.
virsh attach-device <vm_name> mlx_vf.xml --live --config
# virsh attach-device <vm_name> mlx_vf.xml --live --config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple,
mlx_vf.xml
est le nom du fichier XML contenant la configuration du VF. Utilisez l'option--live
pour attacher le périphérique à une VM en cours d'exécution.Sur l'hôte source, démarrez la migration en direct de la VM en cours d'exécution avec le VF joint.
virsh migrate --live --domain <vm_name> --desturi qemu ssh://<destination_host_ip_address>/system
# virsh migrate --live --domain <vm_name> --desturi qemu ssh://<destination_host_ip_address>/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Dans la VM migrée, affichez le nom de l'interface réseau du VF Mellanox.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans la VM migrée, vérifiez que le VF Mellanox fonctionne, par exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow