Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Data Plane Development Kit (DPDK) in Azure bietet ein schnelles Paketverarbeitungsframework auf Benutzerseite für leistungsintensive Anwendungen. Dieses Framework umgeht den Kernelnetzwerkstapel des virtuellen Computers.
Der Vorgang bei der herkömmlichen Paketverarbeitung mit Kernelnetzwerkstapel wird durch Interrupts gesteuert. Wenn die Netzwerkschnittstelle eingehende Pakete empfängt, wird ein Kernelinterrupt zum Verarbeiten des Pakets erzeugt, und es findet ein Kontextwechsel vom Kernel- zum Benutzerbereich statt. Mit DPDK entfallen der Kontextwechsel und die interruptgesteuerte Methode zugunsten einer Implementierung im Benutzerbereich mit Treibern im Abrufmodus, damit Pakete schnell verarbeitet werden können.
DPDK umfasst Gruppen von Benutzerbereichsbibliotheken, die Zugriff auf Ressourcen niedrigerer Ebene bereitstellen. Diese Ressourcen schließen Hardware, logische Kerne, Speicherverwaltung und Treiber im Abrufmodus für Netzwerk-Schnittstellenkarten ein.
DPDK kann auf Azure-VMs ausgeführt werden, die mehrere Betriebssystemverteilungen unterstützen. DPDK bietet eine zentrale Leistungsdifferenzierung bei der Steuerung von Implementierungen der Netzwerksfunktionsvirtualisierung. Diese Implementierungen können die Form virtueller Netzwerkgeräte (NVAs) annehmen, z.B. virtuelle Router, Firewalls, VPNs, Lastenausgleichsmodule, hoch entwickelte Paketkerne und DDoS-Anwendungen (Denial-of-Service).
Eine Liste der Setupanweisungen für DPDK auf MANA-VMs finden Sie hier: Microsoft Azure-Netzwerkadapter (MANA) und DPDK unter Linux.
Vorteil
Mehr Pakete pro Sekunde (pps) : Das Umgehen des Kernels und das Steuern der Pakete auf Benutzerseite verringern die Zyklen, da keine Kontextwechsel notwendig sind. Zudem wird die Rate der pro Sekunde verarbeiteten Pakete auf Linux-VMs in Azure verbessert.
Unterstützte Mindestversionen von Betriebssystemen
Die folgenden Distributionen aus dem Azure Marketplace werden unterstützt:
| Linux-Betriebssystem | Kernelversion |
|---|---|
| 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 und höher |
Die aufgeführten Versionen sind die Mindestanforderungen. Neuere Versionen werden ebenfalls unterstützt.
Eine Liste der Anforderungen für DPDK auf MANA-VMs finden Sie hier: Microsoft Azure-Netzwerkadapter (MANA) und DPDK unter Linux.
Benutzerdefinierte Kernelunterstützung
Nicht aufgeführte Linux-Kernelversionen finden Sie unter Patches zum Erstellen eines Linux-Kernels für Azure. Weitere Informationen erhalten Sie auch bei aznetdpdk@microsoft.com.
Unterstützung für Regionen
Alle Azure-Regionen unterstützen DPDK.
Voraussetzungen
Auf der Linux-VM muss der beschleunigte Netzwerkbetrieb aktiviert sein. Die VM sollte mindestens zwei Netzwerkschnittstellen haben, davon eine für die Verwaltung. Die Aktivierung des beschleunigten Netzwerks auf der Verwaltungsschnittstelle wird nicht empfohlen. Weitere Informationen finden Sie unter Erstellen eines virtuellen Linux-Computers mit beschleunigtem Netzwerkbetrieb.
Darüber hinaus verwendet DPDK RDMA-Verben, um Datenwarteschlangen auf dem Netzwerkadapter zu erstellen. Stellen Sie sicher, dass auf der VM die richtigen RDMA-Kerneltreiber geladen werden. Sie können je nach VM-Größe „mlx4_ib“, „mlx5_ib“ oder „mana_ib“ sein.
Manuelles Installieren von DPDK (empfohlen)
Eine Liste der DPDK-Installationsanweisungen für MANA-VMs finden Sie hier: Microsoft Azure-Netzwerkadapter (MANA) und DPDK unter Linux.
Installieren von Buildabhängigkeiten
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
Manuelles Kompilieren und Installieren von DPDK
Laden Sie das aktuellste DPDK herunter. Für Azure wird die Version 22.11 LTS oder höher empfohlen.
Erstellen Sie die Standardkonfiguration mit
meson builddir.Kompilieren Sie mit
ninja -C builddir.Installieren Sie mit
DESTDIR=<output folder> ninja -C builddir install.
Konfigurieren der Laufzeitumgebung
Führen Sie nach einem Neustart die folgenden Befehle einmalig aus:
Umfangreiche Seiten
- Konfigurieren Sie umfangreiche Seiten, indem Sie den folgenden Befehl einmal für jeden NUMA-Knoten ausführen:
echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepagesErstellen Sie ein Verzeichnis für die Bereitstellung mit
mkdir /mnt/huge.Stellen Sie umfangreiche Seiten mit
mount -t hugetlbfs nodev /mnt/hugebereit.Vergewissern Sie sich mit
grep Huge /proc/meminfo, dass umfangreiche Seiten reserviert sind.Das obige Beispiel gilt für 2M große Seiten. Es können auch 1G große Seiten verwendet werden.
Hinweis
Sie können die GRUB-Datei so ändern, dass umfangreiche Seiten beim Starten reserviert werden. Befolgen Sie dazu die Anweisungen für DPDK. Die Anweisungen befinden sich unten auf der Seite. Wenn Sie eine Linux-VM in Azure verwenden, ändern Sie Dateien stattdessen unter /etc/config/grub.d, um umfangreiche Seiten über Neustarts hinweg zu reservieren.
MAC- und IP-Adressen: Verwenden Sie
ifconfig –a, um die MAC- und IP-Adresse der Netzwerkschnittstellen anzuzeigen. Die VF-Netzwerkschnittstelle und die NETVSC-Netzwerkschnittstelle haben dieselbe MAC-Adresse, allerdings hat nur die NETVSC-Netzwerkschnittstelle eine IP-Adresse. VF-Schnittstellen werden als untergeordnete Schnittstellen von NETVSC-Schnittstellen ausgeführt.PCI-Adressen
Finden Sie mit
ethtool -i <vf interface name>heraus, welche PCI-Adresse Sie fürethtool -i <vf interface name>verwenden können.Wenn für eth0 der beschleunigte Netzwerkbetrieb aktiviert ist, vergewissern Sie sich, dass testpmd nicht versehentlich das VF-PCI-Gerät für eth0 übernimmt. Wenn die DPDK-Anwendung versehentlich die Verwaltungsnetzwerkschnittstelle übernimmt und dadurch die SSH-Verbindung unterbrochen wird, beenden Sie die DPDK-Anwendung über die serielle Konsole. Sie können die serielle Konsole auch zum Beenden oder Starten des virtuellen Computers verwenden.
Laden Sie bei jedem Neustart ibuverbs mit
modprobe -a ib_uverbs. Nur für SLES 15: Laden Sie auch mlx4_ib mitmodprobe -a mlx4_ib.
Master-PMD
DPDK-Anwendungen müssen über den Master-PMD ausgeführt werden, der in Azure verfügbar gemacht wird. Wenn die Anwendung direkt über den VF-PMD ausgeführt wird, empfängt sie nicht alle Pakete, die an die VM gerichtet sind, da einige Pakete über die synthetische Schnittstelle angezeigt werden. DPDK unterstützt zwei Arten von Master-PMDs: NetVSC PMD und Failsafe PMD. Ein Master-PMD gewährleistet, dass die Anwendung alle Pakete erhält, die für sie bestimmt sind. Es wird außerdem sichergestellt, dass die Anwendung weiterhin im DPDK-Modus über den Master-PMD ausgeführt wird, auch wenn VF während der Wartung des Hosts aufgehoben wird.
NetVSC PMD
NetVSC ist die empfohlene PMD für die Ausführung als Master-PMD in Azure. NetVSC gewährleistet, dass die Anwendung alle Pakete erhält, die für sie bestimmt sind. Es wird außerdem sichergestellt, dass die Anwendung weiterhin im DPDK-Modus ausgeführt wird, auch wenn VF während der Wartung des Hosts aufgehoben wird. Weitere Informationen zur Verwendung und Konfiguration von NetVSC PMD finden Sie unter (https://doc.dpdk.org/guides/nics/netvsc.html).
Ausfallsicherer PMD
Hinweis: Die Ausführung mit Failsafe PMD wird in Azure nicht empfohlen. Wenn Ihre DPDK-Version 22.11 LTS oder höher ist, wird die Verwendung von NetVSC PMD empfohlen.
Alternativ können Sie eine DPDK-Anwendung über den ausfallsicheren PMD ausführen. Weitere Informationen zum ausfallsicheren PMD finden Sie unter Fail-safe poll mode driver library (Ausfallsicherheits-PMD-Bibliothek).
Ausführen von testpmd
Verwenden Sie sudo vor dem Befehl sudo, um testpmd im root-Modus auszuführen.
Basic: Integritätsprüfung, Initialisierung des Ausfallsicherheitsadapters
Führen Sie die folgenden Befehle aus, um eine testpmd-Anwendung mit einem einzigen Port zu starten:
testpmd -w <pci address from previous step> \ -- -i \ --port-topology=chainedFühren Sie die folgenden Befehle aus, um eine testpmd-Anwendung mit zwei Ports zu starten:
testpmd -w <pci address nic1> \ -w <pci address nic2> \ -- -i
Führen Sie nach dem Start show port info all aus, um die Portinformationen zu überprüfen. Es sollten ein oder zwei DPDK-Ports vom Typ „net_netvsc“ angezeigt werden.
- Starten Sie mit
start <port> /stop <port>den Datenverkehr.
Die vorherigen Befehle starten testpmd im interaktiven Modus. Dies wird empfohlen, um einige testpmd-Befehle zu testen.
Basic: einzelner Absender/einzelner Empfänger
Mit den folgenden Befehlen werden Pakete in einem regelmäßigen Sekundentakt gedruckt:
Führen Sie auf Absenderseite den folgenden Befehl aus:
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>Führen Sie auf Empfängerseite den folgenden Befehl aus:
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>
Wenn Sie die vorherigen Befehle auf einer VM ausführen, ändern Sie IP_SRC_ADDR und IP_DST_ADDR in app/test-pmd/txonly.c vor dem Kompilieren entsprechend der tatsächlichen IP-Adresse der VM. Andernfalls werden die Pakete gelöscht, bevor sie den Empfänger erreichen.
Erweitert: einzelner Absender/einzelne Weiterleitung
Mit den folgenden Befehlen werden Pakete in einem regelmäßigen Sekundentakt gedruckt:
Führen Sie auf Absenderseite den folgenden Befehl aus:
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>Führen Sie auf Weiterleitungsseite den folgenden Befehl aus:
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>
Wenn Sie die vorherigen Befehle auf einer VM ausführen, ändern Sie IP_SRC_ADDR und IP_DST_ADDR in app/test-pmd/txonly.c vor dem Kompilieren entsprechend der tatsächlichen IP-Adresse der VM. Andernfalls werden die Pakete gelöscht, bevor sie die Weiterleitung erreichen. Es ist nicht möglich, dass ein dritter Computer den weitergeleiteten Datenverkehr empfängt, da die testpmd-Weiterleitung die Adressen der Schicht 3 nicht ändert, es sei denn, Sie nehmen einige Codeänderungen vor.
Installieren von DPDK über das Systempaket (nicht empfohlen)
sudo yum install -y dpdk
References
EAL-Optionen (in englischer Sprache)
Testpmd-Befehle (in englischer Sprache)