Share via


Carte réseau Microsoft Azure (MANA) et DPDK sur Linux

La carte réseau Microsoft Azure (MANA) est un nouveau composant matériel destiné à améliorer le débit et la fiabilité des machines virtuelles Azure. Pour utiliser MANA, les utilisateurs doivent modifier leurs routines d’initialisation du kit DPDK. MANA nécessite deux modifications par rapport au matériel hérité :

  • Les arguments EAL de MANA pour le pilote en mode interrogation (PMD) sont différents de ceux du composant matériel précédent.
  • Le noyau Linux doit libérer le contrôle des interfaces réseau MANA avant le commencement de l’initialisation du kit DPDK.

La procédure d’installation du kit DPDK MANA est décrite dans l’exemple de code.

Introduction

Les machines virtuelles Azure Linux héritées s’appuient sur les pilotes mlx4 ou mlx5 et le matériel associé pour les performances réseau accélérées. Les utilisateurs du kit DPDK Azure sélectionnent les interfaces à inclure ou exclure en passant les adresses de bus à la couche EAL du kit DPDK. La procédure d’installation du kit DPDK MANA est légèrement différente, car l’hypothèse d’une adresse de bus par interface de performances réseau accélérées ne tient plus. Au lieu d’utiliser une adresse de bus PCI, le pilote PMD MANA utilise l’adresse MAC pour déterminer à quelle l’interface il doit se lier.

Arguments EAL du kit DPDK MANA

Le pilote PMD MANA sonde l’ensemble des appareils et des ports du système lorsqu’aucun argument --vdev n’est présent ; l’argument --vdev n’est pas obligatoire. Dans les environnements de test, il est souvent souhaitable de laisser une interface (principale) disponible pour la maintenance de la connexion SSH à la machine virtuelle. Pour utiliser le kit DPDK avec un sous-ensemble des fonctions virtuelles (VF) disponibles, les utilisateurs doivent passer à la fois l’adresse de bus de l’appareil MANA et l’adresse MAC des interfaces indiquées dans l’argument --vdev. Pour plus d’informations, un exemple de code est disponible pour illustrer l’initialisation de la couche EAL du kit DPDK sur MANA.

Pour obtenir des informations générales sur la couche d’abstraction d’environnement (EAL) du kit DPDK :

Exigences du kit DPDK pour MANA

L’utilisation de DPDK sur le matériel MANA nécessite le noyau Linux 6.2 ou et versions ultérieures, ou un rétroportage des pilotes Ethernet et InfiniBand depuis le dernier noyau Linux. Elle nécessite également des versions spécifiques de DPDK et de pilotes d’espace utilisateur.

Le kit DPDK MANA nécessite le jeu de pilotes suivant :

  1. Pilote Ethernet du noyau Linux (noyau 5.15 et versions ultérieures)
  2. Pilote InfiniBand du noyau Linux (noyau 6.2 et versions ultérieures)
  3. Pilote d’interrogation MANA DPDK (DPDK 22.11 et versions ultérieures)
  4. Pilotes d’espace utilisateur Libmana (rdma-core v44 et versions ultérieures)

Notes

Le kit DPDK MANA n’est pas disponible pour Windows ; il fonctionne uniquement sur les machines virtuelles Linux.

Exemple : vérifier la présence de MANA

Notes

Cet article suppose que le package pciutils contenant la commande lspci est installé sur le système.

# check for pci devices with ID:
#   vendor: Microsoft Corporation (1414)
#   class:  Ethernet Controller (0200)
#   device: Microsft Azure Network Adapter VF (00ba)
if [[ -n `lspci -d 1414:00ba:0200` ]]; then
    echo "MANA device is available."
else
    echo "MANA was not detected."
fi

Exemple : installation du kit DPDK (Ubuntu 22.04)

Notes

Cet article suppose qu’un noyau compatible et rdma-core sont installés sur le système.

DEBIAN_FRONTEND=noninteractive sudo apt-get install -q -y build-essential libudev-dev libnl-3-dev libnl-route-3-dev ninja-build libssl-dev libelf-dev python3-pip meson libnuma-dev

pip3 install pyelftools

# Try latest LTS DPDK, example uses DPDK tag v23.07-rc3
git clone https://github.com/DPDK/dpdk.git -b v23.07-rc3 --depth 1
pushd dpdk
meson build
cd build
ninja
sudo ninja install
popd

Exemple : configuration de Testpmd et test netvsc

Notez l’exemple de code suivant pour exécuter le kit DPDK avec MANA. La configuration « netvsc » direct-to-vf sur Azure est recommandée pour bénéficier de performances maximales avec MANA.

Notes

Le kit DPDK exige des hugepages de 2 Mo ou 1 Go pour être activé

# Enable 2MB hugepages.
echo 1024 | tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages

# Assuming use of eth1 for DPDK in this demo
PRIMARY="eth1"

# $ ip -br link show master eth1 
# > enP30832p0s0     UP             f0:0d:3a:ec:b4:0a <... # truncated
# grab interface name for device bound to primary
SECONDARY="`ip -br link show master $PRIMARY | awk '{ print $1 }'`"
# Get mac address for MANA interface (should match primary)
MANA_MAC="`ip -br link show master $PRIMARY | awk '{ print $3 }'`"


# $ ethtool -i enP30832p0s0 | grep bus-info
# > bus-info: 7870:00:00.0
# get MANA device bus info to pass to DPDK
BUS_INFO="`ethtool -i $SECONDARY | grep bus-info | awk '{ print $2 }'`"

# Set MANA interfaces DOWN before starting DPDK
ip link set $PRIMARY down
ip link set $SECONDARY down


## Move synthetic channel to user mode and allow it to be used by NETVSC PMD in DPDK
DEV_UUID=$(basename $(readlink /sys/class/net/$PRIMARY/device))
NET_UUID="f8615163-df3e-46c5-913f-f2d2f965ed0e"
modprobe uio_hv_generic
echo $NET_UUID > /sys/bus/vmbus/drivers/uio_hv_generic/new_id
echo $DEV_UUID > /sys/bus/vmbus/drivers/hv_netvsc/unbind
echo $DEV_UUID > /sys/bus/vmbus/drivers/uio_hv_generic/bind

# MANA single queue test
dpdk-testpmd -l 1-3 --vdev="$BUS_INFO,mac=$MANA_MAC" -- --forward-mode=txonly --auto-start --txd=128 --rxd=128 --stats 2

# MANA multiple queue test (example assumes > 9 cores)
dpdk-testpmd -l 1-9 --vdev="$BUS_INFO,mac=$MANA_MAC" -- --forward-mode=txonly --auto-start --nb-cores=8  --txd=128 --rxd=128 --txq=8 --rxq=8 --stats 2

Dépannage

Échec de la définition de l’interface sur down.

L’échec de la définition de l’appareil lié à MANA sur DOWN peut se traduire par un débit de paquets faible voire nul. L’échec de la libération de l’appareil peut entraîner le message d’erreur EAL lié aux files d’attente de transmission.

mana_start_tx_queues(): Failed to create qp queue index 0
mana_dev_start(): failed to start tx queues -19

Échec de l’activation des hugepages.

Essayez d’activer les hugepages et de vérifier que les informations sont visibles dans meminfo.

EAL: No free 2048 kB hugepages reported on node 0
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
EAL: Error - exiting with code: 1
Cause: Cannot init EAL: Permission denied

Débit faible avec l’utilisation de --vdev="net_vdev_netvsc0,iface=eth1"

Il est déconseillé de configurer le basculement des pilotes en mode interrogation net_failsafe ou net_vdev_netvsc pour des performances élevées sur Azure. La configuration de netvsc avec le kit DPDK version 20.11 ou supérieure peut donner de meilleurs résultats. Pour des performances optimales, vérifiez que vos packages (noyau Linux, rdma-core et DPDK) répondent aux exigences listées pour le kit DPDK et MANA.