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.
Important

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
  • 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
    
    VF_MIGRATION_MODE                           MIGRATION_ENABLED(2)
    • Vous pouvez remplacer VF_MIGRATION_MODE par MIGRATION_ENABLED à l'aide de la commande suivante :

      # mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
  • Le paquetage openvswitch est installé à la fois sur l'hôte source et sur l'hôte de destination :

    # dnf install openvswitch
  • 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 :

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • 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) :

      1. Régénérer la configuration GRUB avec les paramètres intel_iommu=on et iommu=pt:

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
      2. Redémarrer l'hôte.
    • Sur un hôte AMD, activez AMD-Vi :

      1. Régénérer la configuration GRUB avec le paramètre iommu=pt:

        # grubby --args="iommu=pt" --update-kernel=ALL
      2. 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 the virtqemud socket is enabled and running on the destination host.

    # systemctl enable --now virtqemud.socket
    • 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
    • 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

Procédure

  1. 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
  2. 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

    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

  3. Sur l'hôte source, détachez le VF de son pilote.

    # virsh nodedev-detach <vf_pci_address> --driver pci-stub

    Vous pouvez afficher l'adresse PCI du VF à l'aide de la commande suivante :

    # lshw -c network -businfo
    
    Bus info                     Device             Class           Description
    ===========================================================================
    pci@0000:e1:00.0  enp225s0np0    network        MT2910 Family [ConnectX-7]
    pci@0000:e1:00.1  enp225s0v0     network        ConnectX Family mlx5Gen Virtual Function
  4. Sur l'hôte source, activez la fonction de migration du VF.

    # devlink port function set pci/0000:e1:00.0/1 migratable enable

    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.

  5. 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.

    1. Assurez-vous que le service openvswitch est en cours d'exécution.

      # systemctl start openvswitch
    2. Activer le délestage matériel pour améliorer les performances du réseau.

      # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
    3. 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
    4. Créer un nouveau pont dans l'instance OVS.

      # ovs-vsctl add-br <bridge_name>
    5. Redémarrez le service openvswitch.

      # systemctl restart openvswitch
    6. Ajoutez l'appareil physique Mellanox au pont OVS.

      # ovs-vsctl add-port <bridge_name> enp225s0np0

      Dans cet exemple, <bridge_name> est le nom du pont que vous avez créé à l'étape d et enp225s0np0 est le nom de l'interface réseau du périphérique Mellanox.

    7. Ajouter le VF de l'appareil Mellanox au pont OVS.

      # ovs-vsctl add-port <bridge_name> enp225s0npf0vf0

      Dans cet exemple, <bridge_name> est le nom du pont que vous avez créé à l'étape d et enp225s0npf0vf0 est le nom de l'interface réseau du VF.

  6. Répétez les étapes 1 à 5 sur le site destination host.
  7. Sur l'hôte source, ouvrez un nouveau fichier, tel que mlx_vf.xml, et ajoutez la configuration XML suivante du VF :

     <interface type='hostdev' managed='yes'>
          <mac address='52:54:00:56:8c:f7'/>
          <source>
            <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/>
          </source>
     </interface>

    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.

  8. Sur l'hôte source, attachez le fichier XML VF à la VM.

    # virsh attach-device <vm_name> mlx_vf.xml --live --config

    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.

  9. 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

Vérification

  1. Dans la VM migrée, affichez le nom de l'interface réseau du VF Mellanox.

    # ifconfig
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)
            RX packets 100000  bytes 6543210 (6.5 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 100000  bytes 6543210 (6.5 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.10  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::a00:27ff:fe4e:66c3  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:c3  txqueuelen 1000  (Ethernet)
            RX packets 200000  bytes 12345678 (12.3 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 200000  bytes 12345678 (12.3 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  2. Dans la VM migrée, vérifiez que le VF Mellanox fonctionne, par exemple :

    # ping -I <VF_interface_name> 8.8.8.8
    
    PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms
    
    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1002ms
    rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 ms
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.