Tous les produits
Search
Centre de documentation

Elastic Compute Service:Use the VFIO driver instead of the UIO driver

Dernière mise à jour :Aug 18, 2026

Remplacez le pilote UIO par le pilote VFIO sur les instances ECS et les instances Bare Metal (EBM) pour résoudre les erreurs d'exécution de DPDK.

Prérequis

Contexte

Les applications DPDK exécutées sur les types d'instances de sixième génération (tels que g6, c6 et r6) et ultérieurs peuvent rencontrer des erreurs d'exécution. Par exemple, pktgen-dpdk peut ne pas détecter la carte réseau liée au pilote igb_uio. Si vous observez l'erreur suivante, remplacez le pilote UIO par le pilote VFIO.

EAL: eal_parse_sysfs_value(): cannot open sysfs value /sys/bus/pci/devices/0000:00:06.0/uio/uio0/portio/port0/start

Procédure

  1. Connectez-vous à votre instance ECS ou EBM. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.

  2. Vérifiez la configuration GRUB.

    cat /proc/cmdline
    • Si la sortie inclut intel_iommu=on mais pas iommu=pt, passez directement à l'étape 4.

    • Sinon, accédez à l'étape 3 pour ajouter le paramètre.

      Dans l'exemple suivant, la sortie n'inclut ni intel_iommu=on ni iommu=pt ; il est donc nécessaire d'ajouter intel_iommu=on.

      [test@iZ2ze9h6rn63          ~]$ cat /proc/cmdline
      BOOT_IMAGE=/boot/vmlinuz-4.19.91-27.4.al7.x86_64 root=UUID=90179e0e-4e13-4c59-a6cc-0ce5cxxx ro crashkernel=0M-2G:0M
  3. Ajoutez intel_iommu=on dans le fichier /etc/default/grub.

    1. Ouvrez le fichier.

      sudo vim /etc/default/grub
    2. Appuyez sur i pour passer en mode insertion. Ajoutez intel_iommu=on au paramètre GRUB_CMDLINE_LINUX. Enregistrez et fermez le fichier.

      Exemple de configuration modifiée :

      GRUB_TIMEOUT=1
      GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
      GRUB_DEFAULT=saved
      GRUB_DISABLE_SUBMENU=true
      GRUB_TERMINAL_OUTPUT="console"
      GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet idle=halt biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs intel_iommu=on"
      GRUB_DISABLE_RECOVERY="true"
    3. Appliquez la configuration.

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      [test@iZ2ze9h6rn          ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      Generating grub configuration file ...
      Found linux image: /boot/vmlinuz-4.19.91-27.4.al7.x86_64
      Found initrd image: /boot/initramfs-4.19.91-27.4.al7.x86_64.img
      Found linux image: /boot/vmlinuz-0-rescue-2cea6e3dd20d4251bf6880159559f2c9
      Found initrd image: /boot/initramfs-0-rescue-2cea6e3dd20d4251bf6880159559f2c9.img
      done
    4. Redémarrez l'instance et reconnectez-vous une fois qu'elle a démarré.

      reboot
      Avertissement

      Le redémarrage interrompt brièvement l'instance et peut perturber les services en cours d'exécution. Nous vous recommandons d'effectuer cette opération pendant les heures creuses.

  4. Chargez les pilotes VFIO et VFIO-PCI.

    sudo modprobe vfio && \
    sudo modprobe vfio-pci
  5. Activez le mode noiommu_mode.

    sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
  6. Récupérez la valeur bus-info de la carte réseau.

    ethtool -i ethX

    Remplacez ethX par l'ID de la carte réseau cible. Exemple pour eth1 :

    Le champ bus-info dans la sortie correspond à l'adresse bus de l'interface réseau (dans cet exemple, 0000:00:06.0).

    [root@izxxx ~]# ethtool -i eth1
    driver: virtio_net
    version: 1.0.0
    firmware-version:
    expansion-rom-version:
    bus-info: 0000:00:06.0
    supports-statistics: no
    supports-test: no
    supports-eeprom-access: no
    supports-register-dump: no
    supports-priv-flags: no
  7. Lie la carte réseau au pilote vfio-pci. Accédez au répertoire usertools situé dans le répertoire d'installation de DPDK et exécutez la commande suivante :

    sudo ./dpdk-devbind.py -b vfio-pci 0000:00:06.0
    Remarque

    Remplacez 0000:00:06.0 par la valeur bus-info réelle de votre carte réseau.

    Exécutez ./dpdk-devbind.py --status pour vérifier. La sortie suivante montre que 0000:00:06.0 est lié à vfio-pci :

    [root@izxxxxxxxxxxxxx usertools]# ./dpdk-devbind.py --status
    
    Network devices using DPDK-compatible driver
    =============================================
    0000:00:06.0 'Virtio network device 1000' drv=vfio-pci unused=virtio pci
    
    Network devices using kernel driver
    ====================================
    0000:00:05.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,vfio-pci *Active*
  8. Démarrez l'application DPDK. Accédez au répertoire build/app situé dans le répertoire d'installation de DPDK et exécutez la commande correspondant à votre version.

    • Pour DPDK 18.02 et versions ultérieures :

      sudo ./testpmd -w 0000:00:06.0 -c 0x3 -- --total-num-mbufs=2048 -ai
    • Pour les versions antérieures à DPDK 18.02 :

      sudo ./testpmd -w 0000:00:06.0 -c 0x3 -- --total-num-mbufs=2048 --disable-hw-vlan -ai
    Remarque

    L'option -w 0000:00:06.0 spécifie la carte réseau. La valeur total-num-mbufs=2048 doit correspondre à la taille de vos pages énormes. Adaptez ces deux valeurs selon votre configuration.

    Exemple de sortie d'une application DPDK en cours d'exécution :

    [    @izxxxxxxxxxxxZ app]# ./testpmd -w 0000:00:06.0 -c 0x3 -- --total-num-mbufs=2048 -ai
    EAL: Detected 2 lcore(s)
    EAL: Detected 1 NUMA nodes
    EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
    EAL: No free hugepages reported in hugepages-1048576kB
    EAL: Probing VFIO support...
    EAL: VFIO support initialized
    EAL: PCI device 0000:00:06.0 on NUMA socket -1
    EAL:   Invalid NUMA socket, default to 0
    EAL:   probe driver: 1af4:1000 net_virtio
    EAL:   using IOMMU type 8 (No-IOMMU)
    Auto-start selected
    Interactive-mode selected
    testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=2048, size=2176, socket=0
    testpmd: preferred mempool ops selected: ring_mp_mc
    
    Warning! port-topology=paired and odd forward ports number, the last port will pair with itself.
    
    Configuring Port 0 (socket 0)
    EAL: Error disabling MSI-X interrupts for fd 18
    Port 0: 00:16:3E:35:CC:C4
    Checking link statuses...
    Done
    Start automatic packet forwarding
    io packet forwarding - ports=1 - cores=1 - streams=1 - NUMA support enabled, MP allocation mode: native
    Logical Core 1 (socket 0) forwards packets on 1 streams:
      RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
    
      io packet forwarding packets/burst=32
      nb forwarding cores=1 - nb forwarding ports=1
      port 0: RX queue number: 1 Tx queue number: 1
        Rx offloads=0x0 Tx offloads=0x0
        RX queue: 0
          RX desc=0 - RX free threshold=0
          RX threshold registers: pthresh=0 hthresh=0  wthresh=0
          RX Offloads=0x0
        TX queue: 0
          TX desc=0 - TX free threshold=0
          TX threshold registers: pthresh=0 hthresh=0  wthresh=0
          TX offloads=0x0 - TX RS bit threshold=0
    testpmd>