Udostępnij za pośrednictwem


Konfigurowanie zestawu DPDK na maszynie wirtualnej z systemem Linux

Data Plane Development Kit (DPDK) na platformie Azure oferuje szybszy framework przetwarzania pakietów w przestrzeni użytkownika dla aplikacji wymagających wysokiej wydajności. Ta struktura pomija stos sieciowy jądra maszyny wirtualnej.

W typowym przetwarzaniu pakietów używającym jądrowego stosu sieciowego, proces jest sterowany przerwaniami. Gdy interfejs sieciowy odbiera pakiety przychodzące, następuje przerwanie jądra w celu przetworzenia pakietu i przełączanie kontekstu z przestrzeni jądra do przestrzeni użytkownika. DPDK eliminuje przełączanie kontekstu i metodę sterowaną przerwaniami na rzecz implementacji w przestrzeni użytkownika, która używa sterowników w trybie sondowania do szybkiego przetwarzania pakietów.

Zestaw DPDK składa się z zestawów bibliotek przestrzeni użytkownika, które zapewniają dostęp do zasobów niższego poziomu. Te zasoby mogą obejmować sprzęt, rdzenie logiczne, zarządzanie pamięcią i sterowniki trybu sondowania dla kart interfejsu sieciowego.

Zestaw DPDK może działać na maszynach wirtualnych platformy Azure, które obsługują wiele dystrybucji systemu operacyjnego. DPDK zapewnia kluczowe zróżnicowanie wydajności w implementacjach wirtualizacji funkcji sieciowych. Te implementacje mogą mieć postać wirtualnych urządzeń sieciowych (WUS), takich jak routery wirtualne, zapory, sieci VPN, moduły równoważenia obciążenia, rdzenie pakietów następnej generacji i aplikacje DDoS.

Lista instrukcji dotyczących konfiguracji zestawu DPDK na maszynach wirtualnych MANA jest dostępna tutaj: Karta sieciowa platformy Microsoft Azure (MANA) i zestaw DPDK w systemie Linux

Korzyści

Wyższe pakiety na sekundę (PPS): Pomijanie jądra i przejmowanie kontroli nad pakietami w przestrzeni użytkownika zmniejsza liczbę cykli przez wyeliminowanie przełączników kontekstowych. Poprawia również szybkość przetwarzania pakietów na sekundę na maszynach wirtualnych z systemem Linux platformy Azure.

Obsługiwane wersje minimalne systemów operacyjnych

Obsługiwane są następujące dystrybucje z witryny Azure Marketplace:

System operacyjny Linux Wersja jądra
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+

Zanotowane wersje są minimalnymi wymaganiami. Nowsze wersje są również obsługiwane.

Lista wymagań dotyczących zestawu DPDK na maszynach wirtualnych MANA jest dostępna tutaj: Karta sieciowa platformy Microsoft Azure (MANA) i zestaw DPDK w systemie Linux

Obsługa niestandardowego jądra

W przypadku każdej wersji jądra systemu Linux, która nie znajduje się na liście, zobacz Patches for building an Azure-tuned Linux kernel (Poprawki do kompilowania jądra systemu Linux dostrojonego na platformie Azure). Aby uzyskać więcej informacji, możesz również skontaktować się z aznetdpdk@microsoft.com.

Obsługa regionów

Wszystkie regiony platformy Azure obsługują zestaw DPDK.

Wymagania wstępne

Przyspieszona sieć musi być włączona na maszynie wirtualnej z systemem Linux. Maszyna wirtualna powinna mieć co najmniej dwa interfejsy sieciowe z jednym interfejsem do zarządzania. Włączanie przyspieszonej sieci w interfejsie zarządzania nie jest zalecane. Dowiedz się, jak utworzyć maszynę wirtualną z systemem Linux z włączoną przyspieszoną siecią.

Ponadto zestaw DPDK używa czasowników RDMA do tworzenia kolejek danych na karcie sieciowej. Na maszynie wirtualnej upewnij się, że załadowano prawidłowe sterowniki jądra RDMA. Mogą być mlx4_ib, mlx5_ib lub mana_ib w zależności od rozmiarów maszyn wirtualnych.

Instrukcje instalacji zestawu DPDK dla maszyn wirtualnych MANA są dostępne tutaj: Microsoft Azure Network Adapter (MANA) i DPDK w systemie Linux

Zainstaluj zależności kompilacji

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

Ręczne kompilowanie i instalowanie zestawu DPDK

  1. Pobierz najnowszy zestaw DPDK. Wersja 22.11 LTS lub nowsza jest zalecana dla platformy Azure.

  2. Skompiluj domyślną konfigurację za pomocą polecenia meson builddir.

  3. Skompiluj za pomocą polecenia ninja -C builddir.

  4. Zainstaluj za pomocą DESTDIR=<output folder> ninja -C builddir install.

Konfigurowanie środowiska uruchomieniowego

Po ponownym uruchomieniu uruchom następujące polecenia:

  1. Hugepages

    • Skonfiguruj HugePage, uruchamiając następujące polecenie raz dla każdego węzła NUMA.
     echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
    
    • Utwórz katalog do instalowania za pomocą polecenia mkdir /mnt/huge.

    • Zamontuj ogromne strony za pomocą mount -t hugetlbfs nodev /mnt/huge.

    • Sprawdź, czy strony ogromne są zarezerwowane za pomocą polecenia grep Huge /proc/meminfo.

    • Powyższy przykład dotyczy 2 mln ogromnych stron. Można również używać stron o wielkości 1G.

    Uwaga

    Istnieje sposób modyfikowania pliku grub, tak aby hugepages były zarezerwowane podczas rozruchu, postępując zgodnie z instrukcjami dla DPDK. Instrukcje znajdują się w dolnej części strony. W przypadku korzystania z maszyny wirtualnej z systemem Linux platformy Azure zmodyfikuj pliki w obszarze /etc/config/grub.d , aby zarezerwować ogromne strony podczas ponownych rozruchów.

  2. Adresy MAC i IP: użyj polecenia ifconfig –a , aby wyświetlić adres MAC i adres IP interfejsów sieciowych. Interfejs sieciowy VF i interfejs sieciowy NETVSC mają ten sam adres MAC, ale tylko interfejs sieciowy NETVSC ma adres IP. Interfejsy VF działają jako interfejsy podrzędne interfejsów NETVSC .

  3. Adresy PCI

    • Użyj ethtool -i <vf interface name>, aby dowiedzieć się, który adres PCI ma być używany dla VF.

    • Jeśli eth0 ma włączoną przyspieszoną sieć, upewnij się, że testpmd nie przejmuje przypadkowo urządzenia pci VF dla eth0. Jeśli aplikacja DPDK przypadkowo przejmuje interfejs sieciowy zarządzania i powoduje utratę połączenia SSH, użyj konsoli szeregowej, aby zatrzymać aplikację DPDK. Możesz również użyć konsoli szeregowej, aby zatrzymać lub uruchomić maszynę wirtualną.

  4. Załaduj ibuverbs przy każdym ponownym uruchomieniu za pomocą polecenia modprobe -a ib_uverbs. Tylko w przypadku systemu SLES 15 załaduj również mlx4_ib za pomocą polecenia modprobe -a mlx4_ib.

Master PMD

Aplikacje DPDK muszą działać za pośrednictwem głównej usługi PMD uwidocznionej na platformie Azure. Jeśli aplikacja działa bezpośrednio na VF PMD, nie odbiera wszystkich pakietów przeznaczonych do maszyny wirtualnej, ponieważ niektóre pakiety pojawiają się w interfejsie syntetycznym. Zestaw DPDK obsługuje dwa typy głównych dysków PMD: NetVSC PMD i Failsafe PMD. Master PMD gwarantuje, że aplikacja odbiera wszystkie pakiety przeznaczone do niej. Gwarantuje to również, że aplikacja działa w trybie DPDK poprzez główną PMD, nawet jeśli VF zostanie unieważniona, gdy host jest obsługiwany.

NetVSC PMD

NetVSC to zalecany pmD do uruchomienia jako główny PMD na platformie Azure. Gwarantuje to, że aplikacja odbiera wszystkie pakiety, które są do niego przeznaczone. To również zapewnia, że aplikacja nadal działa w trybie DPDK, nawet jeśli VF zostanie cofnięta, gdy serwer jest serwisowany. Aby uzyskać więcej informacji o sposobie używania i konfigurowania funkcji NETVSC PMD, zobacz (https://doc.dpdk.org/guides/nics/netvsc.html).

Niezawodny PMD

Uwaga: uruchamianie z trybem failsafe PMD nie jest zalecane na platformie Azure. Jeśli wersja DPDK to 22.11 LTS lub nowsza, zaleca się użycie narzędzia NetVSC PMD.

Alternatywnie można uruchomić aplikację DPDK w trybie failsafe PMD. Aby uzyskać więcej informacji na temat funkcji failsafe PMD, zobacz Fail-safe poll mode driver library (Biblioteka sterowników trybu fail-safe poll).

Uruchamianie testpmd

Aby uruchomić testpmd w trybie głównym, użyj sudo przed testpmd polecenia.

Podstawowe: Sprawdzanie kondycji, inicjalizacja adaptera failsafe

  1. Uruchom następujące polecenia, aby uruchomić aplikację testpmd dla pojedynczego portu.

    testpmd -w <pci address from previous step> \
      -- -i \
      --port-topology=chained
    
  2. Uruchom następujące komendy, aby rozpocząć aplikację testpmd z podwójnym portem.

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

Po uruchomieniu uruchom polecenie show port info all , aby sprawdzić informacje o porcie. Powinny zostać wyświetlone jeden lub dwa porty DPDK, które są net_netvsc.

  1. Użyj polecenia start <port> /stop <port> , aby uruchomić ruch.

Poprzednie polecenia uruchamiają testpmd w trybie interaktywnym, co jest zalecane do wypróbowania poleceń testpmd.

Podstawowa: pojedynczy nadawca/pojedynczy odbiornik

Następujące polecenia okresowo wyświetlają statystyki dotyczące liczby pakietów na sekundę.

  1. Po stronie TX uruchom następujące polecenie:

    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. Po stronie RX uruchom następujące polecenie:

    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>
    

Po uruchomieniu poprzednich poleceń na maszynie wirtualnej zmień IP_SRC_ADDR i IP_DST_ADDRapp/test-pmd/txonly.c tak, aby pasowały do rzeczywistych adresów IP maszyn wirtualnych przed skompilowaniem. W przeciwnym razie pakiety są porzucane przed dotarciem do odbiornika.

Zaawansowane: pojedynczy nadawca/pojedynczy przekaźnik

Następujące polecenia okresowo wyświetlają statystyki pakietów na sekundę:

  1. Po stronie TX uruchom następujące polecenie:

    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. Po stronie FWD uruchom następujące polecenie:

    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>
    

Po uruchomieniu poprzednich poleceń na maszynie wirtualnej zmień IP_SRC_ADDR i IP_DST_ADDR w app/test-pmd/txonly.c, aby pasowały do rzeczywistego adresu IP maszyn wirtualnych przed skompilowaniem. W przeciwnym razie pakiety są porzucane, zanim dotrą do forwardera. Nie można odebrać ruchu przekazywanego przez trzecią maszynę, ponieważ usługa przesyłania dalej testpmd nie modyfikuje adresów warstwy 3, chyba że wprowadzisz pewne zmiany w kodzie.

sudo yum install -y dpdk

Bibliografia