Megosztás a következőn keresztül:


A DPDK beállítása Linux rendszerű virtuális gépen

Az Azure-beli Data Plane Development Kit (DPDK) gyorsabb felhasználói területet használó csomagfeldolgozási keretrendszert kínál a teljesítményigényes alkalmazásokhoz. Ez a keretrendszer megkerüli a virtuális gép kernelhálózati vermét.

A kernel hálózati ütemezőt használó tipikus csomagfeldolgozásnál a folyamat megszakításvezérelt. Amikor a hálózati adapter bejövő csomagokat fogad, megszakítás történik a csomag feldolgozására, és kontextusváltás történik a kerneltér és a felhasználói tér között. A DPDK kiküszöböli a környezetváltást és a megszakításalapú módszert egy olyan felhasználói térbeli implementáció javára, amely lekérdezési módú illesztőprogramokat használ a gyors csomagfeldolgozáshoz.

A DPDK olyan felhasználóitér-kódtárakból áll, amelyek hozzáférést biztosítanak az alacsonyabb szintű erőforrásokhoz. Ezek az erőforrások tartalmazhatnak hardvereket, logikai magokat, memóriakezelést és lekérdezési módú illesztőprogramokat a hálózati adapterekhez.

A DPDK több operációsrendszer-disztribúciót támogató Azure-beli virtuális gépeken is futtatható. A DPDK kulcsfontosságú teljesítménybeli különbséget biztosít a hálózati függvény virtualizálási implementációiban. Ezek az implementációk lehetnek hálózati virtuális berendezések (NVA-k), például virtuális útválasztók, tűzfalak, VPN-ek, terheléselosztók, fejlett csomagmagok és szolgáltatásmegtagadási (DDoS-) alkalmazások.

A DPDK beállítási utasításainak listája MANA virtuális gépeken itt érhető el: Microsoft Azure Network Adapter (MANA) és DPDK Linux rendszeren

Előny

Nagyobb csomagok másodpercenként (PPS): A rendszermag megkerülése és a csomagok felhasználói térben való vezérlése csökkenti a ciklusok számát a környezeti kapcsolók kiiktatásával. Emellett javítja a másodpercenként feldolgozott csomagok sebességét az Azure Linux rendszerű virtuális gépeken.

Támogatott operációs rendszerek minimális verziói

Az Azure Marketplace-ről származó alábbi disztribúciók támogatottak:

Linux operációs rendszer Kernel verzió
Ubuntu 18.04 4.15.0-1014-azure+
SLES 15 SP1 4.12.14-8.19-azure+
RHEL 7.5 3.10.0-862.11.6.el7.x86_64+
Debian 10 4.19.0-1-cloud+

A feljegyzett verziók a minimális követelmények. Az újabb verziók is támogatottak.

A DPDK mana virtuális gépekre vonatkozó követelményeinek listája itt érhető el: Microsoft Azure Hálózati Adapter (MANA) és DPDK Linux rendszeren

Egyéni kerneltámogatás

A listán nem szereplő Linux-kernelverziók esetén tekintse meg az Azure-ra hangolt Linux-kernelek létrehozásához szükséges javításokat. További információért lépjen kapcsolatba a következővel aznetdpdk@microsoft.com:

Régiós támogatás

Minden Azure-régió támogatja a DPDK-t.

Előfeltételek

A gyorsított hálózatkezelést linuxos virtuális gépen kell engedélyezni. A virtuális gépnek legalább két hálózati adapterrel kell rendelkeznie, egy kezelőfelülettel. A gyorsított hálózatkezelés engedélyezése a felügyeleti felületen nem ajánlott. Megtudhatja, hogyan hozhat létre linuxos virtuális gépet, ha engedélyezve van a gyorsított hálózatkezelés.

Emellett a DPDK RDMA-igék használatával hoz létre adatsorokat a hálózati adapteren. Ellenőrizze, hogy a virtuális gépen a megfelelő RDMA-kernelillesztők vannak-e betöltve. Ezek a virtuális gépek méretétől függően lehetnek mlx4_ib, mlx5_ib vagy mana_ib.

A MANA virtuális gépek DPDK-telepítési utasításai itt érhetők el: Microsoft Azure Network Adapter (MANA) és DPDK Linux rendszeren

Buildfüggőségek telepítése

RHEL7.5

yum -y groupinstall "Infiniband Support"
sudo dracut --add-drivers "mlx4_en mlx4_ib mlx5_ib" -f
yum install -y gcc kernel-devel-`uname -r` numactl-devel.x86_64 librdmacm-devel libmnl-devel meson

A DPDK manuális fordítása és telepítése

  1. Töltse le a legújabb DPDK-t. Az Azure-hoz a 22.11 LTS-es vagy újabb verzió ajánlott.

  2. Hozza létre az alapértelmezett konfigurációt a következővel meson builddir: .

  3. Fordítsa le a(z) ninja -C builddir.

  4. Telepítsd a DESTDIR=<output folder> ninja -C builddir install-tal.

A futtatókörnyezet konfigurálása

Az újraindítás után futtassa egyszer a következő parancsokat:

  1. Nagyoldalak

    • Konfigurálja a hugepage parancsot az alábbi parancs futtatásával, minden numa-csomóponthoz egyszer:
     echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
    
    • Hozzon létre egy könyvtárat a következő csatoláshoz mkdir /mnt/huge.

    • Nagyoldalak felcsatolása a mount -t hugetlbfs nodev /mnt/huge.

    • Ellenőrizze, hogy a hugepages le vannak-e foglalva grep Huge /proc/meminfo.

    • A fenti példa a 2M nagy oldalakra vonatkozik. 1G nagy oldalak is használhatók.

    Feljegyzés

    A grubfájlt úgy módosíthatja, hogy a DPDK utasításait követve a rendszerindításkor hatalmas lapok legyenek fenntartva. Az utasítások az oldal alján találhatók. Ha Azure Linux rendszerű virtuális gépet használ, módosítsa a fájlokat a /etc/config/grub.d könyvtárban, hogy újraindításkor is fenntartsa a hugepage-eket.

  2. MAC > IP-címek: A hálózati adapterek MAC- és IP-címének megtekintésére használható ifconfig –a . A VF hálózati adapter és a NETVSC hálózati adapter ugyanazzal a MAC-címmel rendelkezik, de csak a NETVSC hálózati adapter rendelkezik IP-címmel. A VF-felületek a NETVSC-felületek alárendelt felületeiként futnak.

  3. PCI-címek

    • Használja a ethtool -i <vf interface name>-t, hogy megtudja, melyik PCI-címet kell a VF-hez használni.

    • Ha az eth0 interfészen engedélyezett a gyorsított hálózatkezelés, úgy ellenőrizze, hogy a testpmd nem veszi-e át véletlenül a VF PCI eszközt az eth0 interfész számára. Ha a DPDK-alkalmazás véletlenül átveszi a felügyeleti hálózati adaptert, és az SSH-kapcsolat megszakadását okozza, használja a soros konzolt a DPDK-alkalmazás leállításához. A soros konzollal is leállíthatja vagy elindíthatja a virtuális gépet.

  4. Töltse be az ibuverbs-eket minden újraindításkor modprobe -a ib_uverbs. Csak SLES 15 esetén töltse be a mlx4_ib modult modprobe -a mlx4_ib is.

Master PMD

A DPDK-alkalmazásoknak az Azure-ban elérhető fő PMD-en kell futniuk. Ha az alkalmazás közvetlenül a VF PMD-n fut, nem kapja meg a virtuális gépre szánt összes csomagot, mivel egyes csomagok a szintetikus felületen jelennek meg. A DPDK kétféle fő PMD-t támogat: NetVSC PMD és Failsafe PMD. A fő PMD garantálja, hogy az alkalmazás megkapja a neki szánt összes csomagot. Emellett gondoskodik arról is, hogy az alkalmazás DPDK módban futjon a fő PMD-n keresztül, még akkor is, ha a virtuális gépet visszavonják a gazdagép szervizelésekor.

NetVSC PMD

A NetVSC az ajánlott PMD, amely fő PMD-ként fut az Azure-ban. Garantálja, hogy az alkalmazás megkapja a neki szánt összes csomagot. Emellett gondoskodik arról is, hogy az alkalmazás DPDK módban fusson, még akkor is, ha a virtuális gépet visszavonják a gazdagép szervizelésekor. További információ a NetVSC PMD használatáról és konfigurálásáról: (https://doc.dpdk.org/guides/nics/netvsc.html).

Failsafe PMD

Megjegyzés: a nem biztonságos PMD-vel való futtatás nem ajánlott az Azure-ban. Ha a DPDK-verziója 22.11 LTS vagy újabb, akkor a NetVSC PMD használata ajánlott.

Másik lehetőségként futtathat DPDK-alkalmazást a feladatbiztonsági PMD-en keresztül. A nem biztonságos PMD-ről további információt a sikertelen lekérdezési mód illesztőprogram-kódtárában talál.

A testpmd futtatása

A testpmd gyökér módban való futtatásához használja sudo a testpmd parancs előtt.

Alapszintű: Önellenőrzés, biztonságos adapter inicializálás

  1. Futtassa a következő parancsokat egyetlen porttesztpmd-alkalmazás elindításához:

    testpmd -w <pci address from previous step> \
      -- -i \
      --port-topology=chained
    
  2. Futtassa a következő parancsokat egy kettős portos tesztpmd alkalmazás elindításához:

    testpmd -w <pci address nic1> \
    -w <pci address nic2> \
    -- -i
    

Indítás után futtassa a show port info all parancsot a portinformációk ellenőrzéséhez. Látnia kellene egy vagy két net_netvsc DPDK-portot.

  1. Forgalom indítására használható start <port> /stop <port> .

Az előző parancsok interaktív módban indítják el a testpmd parancsokat, ami a testpmd parancsok kipróbálása esetén ajánlott.

Alapszintű: Egy feladó/egy fogadó

A következő parancsok rendszeresen nyomtatják ki a másodpercenkénti adatcsomag-statisztikákat.

  1. A TX oldalon futtassa a következő parancsot:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=txonly \
      --eth-peer=<port id>,<receiver peer MAC address> \
      --stats-period <display interval in seconds>
    
  2. Az RX oldalon futtassa a következő parancsot:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=rxonly \
      --eth-peer=<port id>,<sender peer MAC address> \
      --stats-period <display interval in seconds>
    

Ha az előző parancsokat egy virtuális gépen futtatja, fordítás előtt módosítsa IP_SRC_ADDR és IP_DST_ADDRapp/test-pmd/txonly.c úgy, hogy megfeleljenek a virtuális gépek tényleges IP-címének. Ellenkező esetben a csomagok el lesznek dobva, mielőtt elérnék a fogadót.

Speciális: Egyetlen feladó/egy továbbító

A következő parancsok rendszeresen nyomtatják ki a másodpercenkénti adatcsomag-statisztikákat.

  1. A TX oldalon futtassa a következő parancsot:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=txonly \
      --eth-peer=<port id>,<receiver peer MAC address> \
      --stats-period <display interval in seconds>
    
  2. Az FWD oldalán futtassa a következő parancsot:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address NIC1> \
      -w <pci address NIC2> \
      -- --nb-cores <number of cores to use for test pmd> \
      --forward-mode=io \
      --eth-peer=<recv port id>,<sender peer MAC address> \
      --stats-period <display interval in seconds>
    

Ha az előző parancsokat egy virtuális gépen futtatja, fordítás előtt módosítsa IP_SRC_ADDR és IP_DST_ADDRapp/test-pmd/txonly.c úgy, hogy megfeleljenek a virtuális gépek tényleges IP-címének. Ellenkező esetben a csomagok el lesznek dobva, mielőtt elérnék a továbbítót. Harmadik gép nem fogadhat továbbított forgalmat, mert a testpmd forwarder nem módosítja a 3. rétegbeli címeket, hacsak nem módosít néhány kódmódosítást.

sudo yum install -y dpdk

Hivatkozások