Share via


Microsoft Azure hálózati adapter (MANA) és DPDK Linux rendszeren

A Microsoft Azure hálózati adapter (MANA) az Azure-beli virtuális gépek új hardvere, amely nagyobb átviteli sebességet és megbízhatóságot tesz lehetővé. A MANA használatához a felhasználóknak módosítaniuk kell a DPDK inicializálási rutinjait. A MANA két módosítást igényel az örökölt hardverhez képest:

  • A lekérdezési módú illesztőprogram (PMD) MANA EAL-argumentumai eltérnek a korábbi hardverektől.
  • A Linux kernelnek ki kell szabadítania a MANA hálózati adapterek vezérlését a DPDK inicializálásának megkezdése előtt.

A MANA DPDK beállítási eljárását a példakód ismerteti.

Bevezetés

Az örökölt Azure Linux rendszerű virtuális gépek az mlx4 vagy mlx5 illesztőprogramokra és a gyorsított hálózatkezeléshez szükséges hardverekre támaszkodnak. Az Azure DPDK-felhasználók a DPDK EAL-nak átadott buszcímek révén kiválasztanak bizonyos interfészeket, amelyeket belefoglalnak vagy kizárnak. A MANA DPDK beállítási eljárása némileg eltér, mivel a gyorsított hálózati adapterenként egy buszcím feltételezése már nem igaz. A PCI bus-cím használata helyett a MANA PMD a MAC-cím használatával határozza meg, hogy melyik adapterhez kell kapcsolódnia.

MANA DPDK EAL argumentumok

A MANA PMD a rendszeren lévő összes eszközt és portot mintavételi, ha nincs --vdev argumentum; az --vdev argumentum nem kötelező. Tesztelési környezetekben gyakran kívánatos, hogy egy (elsődleges) felület legyen elérhető a virtuális gép SSH-kapcsolatának karbantartásához. Ha a DPDK-t az elérhető virtuális gépek egy részhalmazával szeretné használni, a felhasználóknak meg kell adniuk a MANA-eszköz buszcímét és az adapterek MAC-címét az --vdev argumentumban. További részletekért példakód érhető el a DPDK EAL inicializálásának bemutatásához a MANA-n.

A DPDK környezeti absztrakciós rétegével (EAL) kapcsolatos általános információk:

A MANA DPDK-követelményei

A DPDK MANA-hardveren való használatához a Linux kernel 6.2-es vagy újabb verziója, illetve a legújabb Linux-kernel Ethernet- és InfiniBand-illesztőinek háttérportja szükséges. Emellett a DPDK és a felhasználói hely illesztőprogramjainak meghatározott verzióira is szükség van.

A MANA DPDK-nak a következő illesztőprogram-készletre van szüksége:

  1. Linux kernel Ethernet-illesztőprogram (5.15-ös és újabb kernel)
  2. Linux kernel InfiniBand illesztőprogram (6.2-es és újabb kernel)
  3. DPDK MANA lekérdezési módú illesztőprogram (DPDK 22.11 és újabb)
  4. Libmana felhasználói térillesztők (rdma-core v44 és újabb)

Megjegyzés

A MANA DPDK nem érhető el Windows rendszeren; Csak Linux rendszerű virtuális gépeken fog működni.

Példa: A MANA ellenőrzése

Megjegyzés

Ez a cikk feltételezi, hogy az lspci parancsot tartalmazó pciutils-csomag telepítve van a rendszeren.

# 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

Példa: DPDK telepítése (Ubuntu 22.04)

Megjegyzés

Ez a cikk feltételezi, hogy kompatibilis kernel és rdma-core van telepítve a rendszeren.

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

Példa: Testpmd setup and netvsc test

Jegyezze fel az alábbi példakódot a DPDK MANA-val való futtatásához. Az Azure-ban a direct-to-vf "netvsc" konfigurációja ajánlott a MANA maximális teljesítményéhez.

Megjegyzés

A DPDK-hoz 2 MB-os vagy 1 GB-os hatalmas lapokat kell engedélyezni

# 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

Hibaelhárítás

Nem sikerült beállítani az illesztőt.

Ha nem állítja be a MANA-hez kötött eszközt DOWN értékre, az alacsony vagy nulla csomag-átviteli sebességet eredményezhet. Az eszköz kiadásának sikertelensége az üzenetsorok küldéséhez kapcsolódó EAL-hibaüzenetet eredményezheti.

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

Nem sikerült engedélyezni a hatalmas oldalakat.

Próbálja meg engedélyezni a hatalmas oldalakat, és győződjön meg arról, hogy az információ látható a meminfo-ban.

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

Alacsony átviteli sebesség a --vdev="net_vdev_netvsc0,iface=eth1" használatával

A vagy a net_failsafenet_vdev_netvsc lekérdezési módú illesztőprogramok feladatátvételi konfigurációja nem ajánlott az Azure nagy teljesítményéhez. A DPDK 20.11-es vagy újabb verziójával rendelkező netvsc-konfiguráció jobb eredményeket adhat. Az optimális teljesítmény érdekében győződjön meg arról, hogy a Linux-kernel-, rdma-core- és DPDK-csomagok megfelelnek a DPDK-ra és a MANA-ra vonatkozó felsorolt követelményeknek.