14.7. Gestion des dispositifs SR-IOV


Un périphérique virtuel émulé utilise souvent plus de CPU et de mémoire qu'un périphérique réseau matériel. Cela peut limiter les performances d'une machine virtuelle (VM). Toutefois, si l'un des périphériques de votre hôte de virtualisation prend en charge la virtualisation d'E/S à racine unique (SR-IOV), vous pouvez utiliser cette fonctionnalité pour améliorer les performances du périphérique et, éventuellement, les performances globales de vos machines virtuelles.

14.7.1. Qu'est-ce que le SR-IOV ?

La virtualisation des E/S à racine unique (SR-IOV) est une spécification qui permet à un seul périphérique PCI Express (PCIe) de présenter au système hôte plusieurs périphériques PCI distincts, appelés virtual functions (VF). Chacun de ces périphériques :

  • Est capable de fournir un service identique ou similaire à celui de l'appareil PCIe d'origine.
  • Apparaît à une adresse différente sur le bus PCI de l'hôte.
  • Peut être affecté à une VM différente en utilisant l'affectation VFIO.

Par exemple, un seul périphérique réseau compatible SR-IOV peut présenter des VF à plusieurs VM. Bien que tous les VF utilisent la même carte physique, la même connexion réseau et le même câble réseau, chaque VM contrôle directement son propre périphérique réseau matériel et n'utilise aucune ressource supplémentaire de l'hôte.

Comment fonctionne le SR-IOV

La fonctionnalité SR-IOV est possible grâce à l'introduction des fonctions PCIe suivantes :

  • Physical functions (PFs) - Une fonction PCIe qui fournit la fonctionnalité de son dispositif (par exemple la mise en réseau) à l'hôte, mais qui peut également créer et gérer un ensemble de VF. Chaque périphérique compatible SR-IOV possède un ou plusieurs PF.
  • Virtual functions (VFs) - Fonctions PCIe légères qui se comportent comme des dispositifs indépendants. Chaque VF est dérivé d'un PF. Le nombre maximum de VF qu'un périphérique peut avoir dépend du matériel du périphérique. Chaque VF ne peut être attribué qu'à une seule VM à la fois, mais plusieurs VF peuvent être attribués à une VM.

Les VM reconnaissent les VF comme des périphériques virtuels. Par exemple, un VF créé par un périphérique réseau SR-IOV apparaît comme une carte réseau pour une VM à laquelle il est assigné, de la même manière qu'une carte réseau physique apparaît au système hôte.

Figure 14.1. Architecture SR-IOV

virt SR IOV

Avantages

Les principaux avantages de l'utilisation de VF SR-IOV plutôt que de dispositifs émulés sont les suivants :

  • Amélioration des performances
  • Réduction de l'utilisation des ressources de l'unité centrale et de la mémoire de l'hôte

Par exemple, un VF attaché à une VM en tant que vNIC a des performances presque identiques à celles d'un NIC physique, et bien meilleures que celles des NIC paravirtualisés ou émulés. En particulier, lorsque plusieurs VF sont utilisés simultanément sur un même hôte, les avantages en termes de performances peuvent être significatifs.

Inconvénients

  • Pour modifier la configuration d'un PF, vous devez d'abord changer le nombre de VFs exposés par le PF à zéro. Par conséquent, vous devez également supprimer les périphériques fournis par ces VFs de la VM à laquelle ils sont assignés.
  • Une VM à laquelle sont attachés des périphériques assignés par VFIO, y compris des VF SR-IOV, ne peut pas être migrée vers un autre hôte. Dans certains cas, vous pouvez contourner cette limitation en associant le périphérique attribué à un périphérique émulé. Par exemple, vous pouvez lier un VF de réseau attribué à un vNIC émulé, et retirer le VF avant la migration.
  • En outre, les périphériques attribués par VFIO nécessitent l'épinglage de la mémoire de la VM, ce qui augmente la consommation de mémoire de la VM et empêche l'utilisation du ballooning de la mémoire sur la VM.

14.7.2. Attacher des périphériques de réseau SR-IOV à des machines virtuelles

Pour attacher un périphérique réseau SR-IOV à une machine virtuelle (VM) sur un hôte Intel ou AMD, vous devez créer une fonction virtuelle (VF) à partir d'une interface réseau compatible SR-IOV sur l'hôte et affecter la VF en tant que périphérique à une VM spécifiée. Pour plus de détails, voir les instructions suivantes.

Conditions préalables

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

  • Le périphérique réseau physique prend en charge SR-IOV. Pour vérifier si des périphériques réseau de votre système prennent en charge SR-IOV, utilisez la commande lspci -v et recherchez Single Root I/O Virtualization (SR-IOV) dans le résultat.

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
  • L'interface réseau de l'hôte que vous voulez 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 :

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

Procédure

  1. Optional: Confirmez le nombre maximum de VF que votre périphérique de réseau peut utiliser. Pour ce faire, utilisez la commande suivante et remplacez eth1 par votre périphérique réseau compatible SR-IOV.

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. La commande suivante permet de créer une fonction virtuelle (VF) :

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs

    Dans la commande, remplacez :

    • VF-number avec le nombre de FV que vous souhaitez créer sur la CP.
    • network-interface avec le nom de l'interface réseau pour laquelle les VF seront créés.

    L'exemple suivant crée 2 VF à partir de l'interface réseau eth1 :

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
  3. Vérifier que les VF ont été ajoutés :

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
  4. Rendez les VF créés persistants en créant une règle udev pour l'interface réseau que vous avez utilisée pour créer les VF. Par exemple, pour l'interface eth1, créez le fichier /etc/udev/rules.d/eth1.rules et ajoutez la ligne suivante :

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"

    Cela garantit que les deux VF qui utilisent le pilote ixgbe seront automatiquement disponibles pour l'interface eth1 au démarrage de l'hôte. Si vous n'avez pas besoin de périphériques SR-IOV persistants, ignorez cette étape.

    Avertissement

    Actuellement, le paramètre décrit ci-dessus ne fonctionne pas correctement lorsque l'on tente de rendre les VF persistants sur les adaptateurs Broadcom NetXtreme II BCM57810. En outre, l'attachement de VF basés sur ces adaptateurs à des machines virtuelles Windows n'est actuellement pas fiable.

  5. Branchez à chaud l'un des périphériques d'interface VF nouvellement ajoutés à une VM en cours d'exécution.

    # virsh attach-interface testguest1 hostdev 0000:82:10.0 --managed --live --config

Vérification

  • Si la procédure réussit, le système d'exploitation invité détecte une nouvelle carte d'interface réseau.

14.7.3. Dispositifs pris en charge pour l'affectation SR-IOV

Tous les périphériques ne peuvent pas être utilisés pour le SR-IOV. Les périphériques suivants ont été testés et vérifiés comme étant compatibles avec SR-IOV dans RHEL 9.

Dispositifs de mise en réseau

  • Intel 82599ES 10 Gigabit Ethernet Controller - utilise le pilote ixgbe
  • Intel Ethernet Controller XL710 Series - utilise le pilote i40e
  • Intel Ethernet Network Adapter XXV710 - utilise le pilote i40e
  • Intel 82576 Gigabit Ethernet Controller - utilise le pilote igb
  • Broadcom NetXtreme II BCM57810 - utilise le pilote bnx2x
  • Contrôleur Ethernet E810-C pour QSFP - utilise le pilote ice
  • SFC9220 10/40G Ethernet Controller - utilise le pilote sfc
  • Contrôleur FastLinQ QL41000 Series 10/25/40/50GbE - utilise le pilote qede
  • Cartes d'adaptateur Ethernet Mellanox ConnectX-5
  • Famille Mellanox MT2892 [ConnectX-6 Dx]
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.