In diesem Dokument wird beschrieben, wie Sie das Data Plane Development Kit (DPDK) auf einer VM-Instanz (virtuelle Maschine) aktivieren, um die Netzwerkpaketverarbeitung zu beschleunigen.
DPDK ist ein Framework für leistungsintensive Anwendungen, die eine schnelle Paketverarbeitung, eine geringe Latenz und eine gleichbleibende Leistung erfordern. DPDK bietet eine Reihe an Bibliotheken auf Datenebene und einen Netzwerkschnittstellen-Controller (NIC). Diese Elemente umgehen das Kernel-Netzwerk und werden direkt im Nutzerbereich ausgeführt. Das Aktivieren von DPDK auf Ihrer VM ist beispielsweise bei folgenden Anwendungen nützlich:
Bereitstellungen der Netzwerkfunktionsvirtualisierung (NFV)
Software-definierte Netzwerke (SDN)
Videostreaming- oder Voice-over-IP-Anwendungen
Sie können DPDK auf einer VM mit einem der folgenden vNIC-Typen (virtuelle NIC) ausführen:
Empfohlen: gVNIC
Eine leistungsstarke, sichere und skalierbare virtuelle Netzwerkschnittstelle, die speziell für die Compute Engine entwickelt wurde und virtIO als vNIC der nächsten Generation ablöst.
-
Ein Open-Source-Ethernet-Treiber, mit dem VMs effizient auf physische Hardware wie Blockspeicher und Netzwerkadapter zugreifen können.
Ein Problem beim Ausführen von DPDK in einer virtuellen Umgebung anstelle von physischer Hardware ist, dass virtuelle Umgebungen keine Unterstützung für SR-IOV und I/O Memory Management Unit (IOMMU) für leistungsstarke Anwendungen bieten. Um diese Einschränkung zu überwinden, müssen Sie DPDK mit einem der folgenden Treiber auf physischen Gastadressen statt auf virtuellen Hostadressen ausführen:
IOMMU-freie virtuelle Funktions-E/A (VFIO)
Hinweise
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Verwenden Sie zwei Virtual Private Cloud-Netzwerke, um beim Ausführen Ihrer Anwendungen einen Ausfall der Netzwerkverbindung zu vermeiden:
Ein VPC-Netzwerk für die Steuerungsebene
Ein VPC-Netzwerk für die Datenebene
Beide VPC-Netzwerke müssen Folgendes angeben:
Ein Subnetz mit einem eindeutigen IP-Adressbereich
dieselbe Region für ihre Subnetze
Derselbe vNIC-Typ – entweder gVNIC oder VirtIO-Net
Beim Erstellen der VM:
Sie müssen dieselbe Region angeben wie die Subnetze der beiden VPC-Netzwerke.
Sie müssen den vNIC-Typ angeben, den Sie mit DPDK verwenden möchten.
Sie müssen eine unterstützte Maschinenserie für gVNIC oder VirtIO-Net angeben.
Sie können Single-Stack-Subnetze nur für die beiden in der VM verwendeten VPC-Netzwerke nutzen.
Wenn Sie gVNIC als vNIC-Typ für die beiden VPC-Netzwerke verwenden, müssen Sie Folgendes beachten:
Sie müssen DPDK-Version 22.11 oder höher verwenden.
Sie können nur unterstützte Laufwerk-Images verwenden.
Wenn Sie beim Erstellen der VM die Netzwerkleistung pro VM-Tier_1 für eine höhere Netzwerkleistung aktivieren möchten, müssen Sie Folgendes angeben:
gVNIC als vNIC-Typ
Ein unterstützter Maschinentyp mit mindestens 30 vCPUs
Erstellen Sie ein VPC-Netzwerk für die Datenebene:
Wechseln Sie in der Google Cloud Console zu VPC-Netzwerke.
Die Seite VPC-Netzwerke wird geöffnet.
Klicken Sie auf
VPC-Netzwerk erstellen.Die Seite VPC-Netzwerk erstellen wird geöffnet.
Geben Sie im Feld Name einen Namen für Ihr Netzwerk ein.
Führen Sie im Bereich Neues Subnetz die folgenden Schritte aus:
Geben Sie im Feld Name einen Namen für Ihr Subnetz ein.
Wählen Sie im Menü Region eine Region für das Subnetz aus.
Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.
Geben Sie im Feld IPv4-Bereich eine gültige IPv4-Adresse in CIDR-Notation ein.
Klicken Sie auf Fertig.
Klicken Sie auf Erstellen.
Die Seite VPC-Netzwerke wird geöffnet. Es kann bis zu einer Minute dauern, bis das VPC-Netzwerk erstellt ist.
Erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zulässt:
Klicken Sie noch einmal auf
VPC-Netzwerk erstellen.Die Seite VPC-Netzwerk erstellen wird geöffnet.
Geben Sie im Feld Name einen Namen für Ihr Netzwerk ein.
Führen Sie im Bereich Neues Subnetz die folgenden Schritte aus:
Geben Sie im Feld Name einen Namen für das Subnetz ein.
Wählen Sie im Menü Region dieselbe Region aus, die Sie für das Subnetz des Dataplane-Netzwerks angegeben haben.
Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.
Geben Sie im Feld IPv4-Bereich eine gültige IPv4-Adresse in CIDR-Notation ein.
Klicken Sie auf Fertig.
Markieren Sie auf dem Tab IPv4-Firewallregeln das Kästchen NETWORK_NAME-allow-ssh.
Dabei ist NETWORK_NAME der Netzwerkname, den Sie in den vorherigen Schritten angegeben haben.
Klicken Sie auf Erstellen.
Die Seite VPC-Netzwerke wird geöffnet. Es kann bis zu einer Minute dauern, bis das VPC-Netzwerk erstellt ist.
So erstellen Sie ein VPC-Netzwerk für die Datenebene:
Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz, indem Sie den
gcloud compute networks create
-Befehl verwenden, wobei das--subnet-mode
-Flag aufcustom
gesetzt ist.gcloud compute networks create DATA_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
Ersetzen Sie Folgendes:
DATA_PLANE_NETWORK_NAME
: Den Namen des VPC-Netzwerks für die Datenebene.MTU
: Die maximale Übertragungseinheit (MTU), also die größte Paketgröße des Netzwerks. Der Wert muss zwischen1300
und8896
liegen. Der Standardwert ist1460
. Bevor Sie die MTU auf einen höheren Wert als1460
setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.
Erstellen Sie mit dem
gcloud compute networks subnets create
-Befehl ein Subnetz für das gerade erstellte Netzwerk der VPC-Datenebene.gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \ --network=DATA_PLANE_NETWORK_NAME \ --range=DATA_PRIMARY_RANGE \ --region=REGION
Ersetzen Sie Folgendes:
DATA_PLANE_SUBNET_NAME
: Den Namen des Subnetzes für das Datenebenennetzwerk.DATA_PLANE_NETWORK_NAME
: Den Namen des Netzwerks der Datenebene, das Sie in den vorherigen Schritten angegeben haben.DATA_PRIMARY_RANGE
: Ein gültiger IPv4-Bereich für das Subnetz in CIDR-Notation.REGION
: Die Region, in der das Subnetz erstellt werden soll.
So erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zuläßt:
Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz, indem Sie den
gcloud compute networks create
-Befehl verwenden, wobei das--subnet-mode
-Flag aufcustom
gesetzt ist.gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
Ersetzen Sie Folgendes:
CONTROL_PLANE_NETWORK_NAME
: Der Namen des VPC-Netzwerks für die Steuerungsebene.MTU
: Die MTU, die die größte Paketgröße des Netzwerks ist. Der Wert muss zwischen1300
und8896
liegen. Der Standardwert ist1460
. Bevor Sie die MTU auf einen höheren Wert als1460
setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.
Erstellen Sie mit dem
gcloud compute networks subnets create
-Befehl ein Subnetz für das gerade erstellte Netzwerk der VPC-Steuerungsebene.gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \ --network=CONTROL_PLANE_NETWORK_NAME \ --range=CONTROL_PRIMARY_RANGE \ --region=REGION
Ersetzen Sie Folgendes:
CONTROL_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie in den vorherigen Schritten angegeben haben.CONTROL_PRIMARY_RANGE
: Ein gültiger IPv4-Bereich für das Subnetz in CIDR-Notation.REGION
: Die Region, in der das Subnetz erstellt werden soll. Sie muss mit der Region übereinstimmen, die Sie im Subnetz des Datenebenenetzwerks angegeben haben.
Erstellen Sie eine VPC-Firewallregel, die SSH im Netzwerk der Steuerungsebene mit dem
gcloud compute firewall-rules create
-Befehl zulässt, wobei das--allow
-Flag auftcp:22
gesetzt ist.gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --action=allow \ --network=CONTROL_PLANE_NETWORK_NAME \ --rules=tcp:22
Ersetzen Sie Folgendes:
FIREWALL_RULE_NAME
: Der Name der Firewallregel.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie in den vorherigen Schritten erstellt haben.
So erstellen Sie ein VPC-Netzwerk für die Datenebene:
Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz. Stellen Sie dazu eine
POST
-Anfrage an dienetworks.insert
-Methode, wobei dasautoCreateSubnetworks
-Feld auffalse
gesetzt ist.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "DATA_PLANE_NETWORK_NAME", "mtu": MTU }
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des aktuellen Projekts.DATA_PLANE_NETWORK_NAME
: Der Name des Netzwerks für die Datenebene.MTU
: Die maximale Übertragungseinheit (MTU), also die größte Paketgröße des Netzwerks. Der Wert muss zwischen1300
und8896
liegen. Der Standardwert ist1460
. Bevor Sie die MTU auf einen höheren Wert als1460
setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.
Erstellen Sie ein Subnetz für das Netzwerk der VPC-Datenebene. Stellen Sie dazu eine
POST
-Anfrage an diesubnetworks.insert
-Methode.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "DATA_PRIMARY_RANGE", "name": "DATA_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/DATA_PLANE_NETWORK_NAME" }
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des Projekts, in dem sich das Netzwerk der Datenebene befindet.REGION
: Die Region, in der Sie das Subnetz erstellen möchten.DATA_PRIMARY_RANGE
: Der primäre IPv4-Bereich für das neue Subnetz in CIDR-Notation.DATA_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Datenebene, das Sie im vorherigen Schritt erstellt haben.DATA_PLANE_NETWORK_NAME
: Der Name des Datenebenennetzwerks, das Sie im vorherigen Schritt erstellt haben.
So erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zuläßt:
Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz. Stellen Sie dazu eine
POST
-Anfrage an dienetworks.insert
-Methode, wobei dasautoCreateSubnetworks
-Feld auffalse
gesetzt ist.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "CONTROL_PLANE_NETWORK_NAME", "mtu": MTU }
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des aktuellen Projekts.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks für die Steuerungsebene.MTU
: Die MTU, die die größte Paketgröße des Netzwerks ist. Der Wert muss zwischen1300
und8896
liegen. Der Standardwert ist1460
. Bevor Sie die MTU auf einen höheren Wert als1460
setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.
Erstellen Sie ein Subnetz für das VPC-Datenkontrollnetzwerk. Senden Sie dazu eine
POST
-Anfrage an diesubnetworks.insert
-Methode.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "CONTROL_PRIMARY_RANGE", "name": "CONTROL_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des Projekts, in dem sich das Netzwerk der Steuerungsebene befindet.REGION
: Die Region, in der Sie das Subnetz erstellen möchten.CONTROL_PRIMARY_RANGE
: Der primäre IPv4-Bereich für das neue Subnetz in CIDR-Notation.CONTROL_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene, das Sie im vorherigen Schritt erstellt haben.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie im vorherigen Schritt erstellt haben.
Erstellen Sie eine VPC-Firewallregel, die SSH im Netzwerk der Steuerungsebene zulässt. Stellen Sie dazu eine
POST
-Anfrage an diefirewalls.insert
-Methode. Setzen Sie in der Anfrage dasIPProtocol
-Feld auftcp
und dasports
-Feld auf22
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
Ersetzen Sie Folgendes:
PROJECT_ID
: Die Projekt-ID des Projekts, in dem sich das Netzwerk der Steuerungsebene befindet.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie in den vorherigen Schritten erstellt haben.
Rufen Sie in der Google Cloud Console VM-Instanzen auf.
Die Seite VM-Instanzen wird geöffnet.
Klicken Sie auf
Instanz erstellen.Die Seite Instanz erstellen wird geöffnet.
Geben Sie im Feld Name einen Namen für Ihre VM ein.
Wählen Sie im Menü Region dieselbe Region aus, in der Sie in den vorherigen Schritten Ihre Netzwerke erstellt haben.
Wählen Sie im Menü Zone eine Zone für Ihre VM aus.
Führen Sie im Abschnitt Maschinenkonfiguration die folgenden Schritte aus:
Wählen Sie eine der folgenden Optionen aus:
Wählen Sie für allgemeine Arbeitslasten den Tab Allgemein (Standardeinstellung).
Wählen Sie für leistungsintensive Arbeitslasten den Tab Computing-optimiert.
Wählen Sie für große Arbeitsspeicher-zu-vCPUs-Verhältnisse den Tab Speicheroptimiert.
Wählen Sie für Arbeitslasten, die GPUs verwenden, den Tab GPUs.
Optional. Wenn Sie im vorherigen Schritt GPUs angegeben haben und die GPU ändern möchten, damit sie der VM hinzugefügt wird, führen Sie auf eine der folgenden Weisen vor:
Wählen Sie im Menü GPU-Typ einen GPU-Typ.
Wählen Sie im Menü Anzahl der GPUs die Anzahl der GPUs aus.
Wählen Sie im Menü Reihe eine Maschinenserie.
Wählen Sie im Menü Maschinentyp einen Maschinentyp.
Optional: Maximieren Sie Erweiterte Konfigurationen und folgen Sie den Eingabeaufforderungen, um die Maschine für diese VM weiter anzupassen.
Optional: Klicken Sie im Abschnitt Bootlaufwerk auf Ändern und folgen Sie den Aufforderungen zum Ändern des Speicherabbilds.
Maximieren Sie den Bereich Erweiterte Optionen.
Maximieren Sie den Bereich Netzwerk.
Führen Sie im Abschnitt Konfiguration der Netzwerkleistung die folgenden Schritte aus:
Wählen Sie im Menü Netzwerkkarte eine der folgenden Optionen aus:
Wenn Sie gVNIC verwenden möchten, wählen Sie gVNIC aus.
Wenn Sie VirtIO-Net verwenden möchten, wählen Sie VirtIO aus.
Optional: Markieren Sie für eine höhere Netzwerkleistung und geringere Latenz das Kästchen Tier_1-Netzwerk aktivieren.
Führen Sie im Bereich Netzwerkschnittstellen folgende Schritte aus:
Klicken Sie in der Zeile standard auf
Element „standard“ löschen.Klicken Sie auf Netzwerkschnittstelle hinzufügen.
Der Bereich Neue Netzwerkschnittstelle wird angezeigt.
Wählen Sie im Menü Netzwerk das Steuerungsebenen-Netzwerk aus, das Sie in den vorherigen Schritten erstellt haben.
Klicken Sie auf Fertig.
Klicken Sie noch einmal auf Netzwerkschnittstelle hinzufügen.
Der Bereich Neue Netzwerkschnittstelle wird angezeigt.
Wählen Sie im Menü Netzwerk das Dataplane-Netzwerk aus, das Sie in den vorherigen Schritten erstellt haben.
Klicken Sie auf Fertig.
Klicken Sie auf Erstellen.
Die Seite VM-Instanzen wird geöffnet. Es kann bis zu einer Minute dauern, bis die VM erstellt ist.
VM_NAME
ist der Name der VM.IMAGE_FAMILY
: die Image-Familie für das Betriebssystem, mit dem das Bootlaufwerk initialisiert wird. Alternativ können Sie das--image=IMAGE
-Flag angeben undIMAGE
durch eine bestimmte Version eines Images ersetzen. Liste der im Compute Engine-Image-Projekt verfügbaren Images anzeigen.IMAGE_PROJECT
ist der Name des Image-Projekts, das das Speicherabbild enthält.MACHINE_TYPE
: Ein vordefinierter oder benutzerdefinierter Maschinentyp für die VM.VNIC_TYPE
: Der vNIC-Typ, der für die Netzwerke auf Steuerungs- und Datenebene verwendet werden soll. Der Wert muss einer der folgenden sein:Geben Sie
GVNIC
an, um gVNIC zu verwenden.Geben Sie
VIRTIO_NET
an, um VirtIO-Net zu verwenden.
CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie in den vorherigen Schritten erstellt haben.CONTROL_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene, das Sie im vorherigen Schritt erstellt haben.DATA_PLANE_NETWORK_NAME
: Der Name des Datenebenennetzwerks, das Sie im vorherigen Schritt erstellt haben.DATA_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene, das Sie in den vorherigen Schritten automatisch erstellt haben.ZONE
: Die Zone, in der die VM erstellt werden soll. Geben Sie eine Zone in der Region des Subnetzes an, das Sie in den vorherigen Schritten erstellt haben.PROJECT_ID
: Die Projekt-ID des Projekts, in dem sich die VPC-Netzwerke der Steuerungsebene und der Datenebene befinden.ZONE
: Die Zone, in der die VM erstellt werden soll.VM_NAME
ist der Name der VM.MACHINE_TYPE
: Ein vordefinierter oder benutzerdefinierter Maschinentyp für die VM.IMAGE_PROJECT
ist der Name des Image-Projekts, das das Speicherabbild enthält.IMAGE_FAMILY
: die Image-Familie für das Betriebssystem, mit dem das Bootlaufwerk initialisiert wird. Alternativ können Sie eine bestimmte Version eines Bildes angeben. Liste der Images im Projekt mit Compute Engine-Images anzeigen.CONTROL_PLANE_NETWORK_NAME
: Der Name des Netzwerks der Steuerungsebene, das Sie in den vorherigen Schritten erstellt haben.REGION
: Die Region, in der sich die Subnetze der Steuerungsebenen- und Datenebenennetzwerke befindenCONTROL_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene, das Sie im vorherigen Schritt erstellt haben.VNIC_TYPE
: Der vNIC-Typ, der für die Netzwerke auf Steuerungs- und Datenebene verwendet werden soll. Der Wert muss einer der folgenden sein:Geben Sie
GVNIC
an, um gVNIC zu verwenden.Geben Sie
VIRTIO_NET
an, um VirtIO-Net zu verwenden.
DATA_PLANE_NETWORK_NAME
: Der Name des Datenebenennetzwerks, das Sie im vorherigen Schritt erstellt haben.DATA_PLANE_SUBNET_NAME
: Der Name des Subnetzes für das Netzwerk der Steuerungsebene, das Sie im vorherigen Schritt erstellt haben.Stellen Sie über SSH eine Verbindung zur VM her, die Sie im vorherigen Abschnitt erstellt haben.
Konfigurieren Sie die Abhängigkeiten für die DPDK-Installation:
sudo apt-get update && sudo apt-get upgrade -yq sudo apt-get install -yq build-essential ninja-build python3-pip \ linux-headers-$(uname -r) pkg-config libnuma-dev sudo pip install pyelftools meson
Installieren Sie DPDK:
wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz tar xvf dpdk-23.07.tar.xz cd dpdk-23.07
So erstellen Sie DPDK mit den Beispielen:
meson setup -Dexamples=all build sudo ninja -C build install; sudo ldconfig
Prüfen, ob VFIO aktiviert ist:
cat /boot/config-$(uname -r) | grep NOIOMMU
Wenn VFIO nicht aktiviert ist, folgen Sie der Anleitung unter UIO installieren.
Aktivieren Sie in VFIO den Kein-IOMMU-Modus:
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
Klonen Sie das
igb_uio
-Git-Repository auf einen Datenträger in Ihrer VM:git clone https://dpdk.org/git/dpdk-kmods
Erstellen Sie das Modul im übergeordneten Verzeichnis des geklonten Git-Repositorys und installieren Sie den UIO-Treiber auf DPDK:
pushd dpdk-kmods/linux/igb_uio sudo make sudo depmod && sudo insmod igb_uio.ko popd
dpdk-igb-uio-dkms
-Paket installieren:sudo apt-get install -y dpdk-igb-uio-dkms
So installieren Sie den UIO-Treiber auf DPDK:
sudo modprobe igb_uio
Rufen Sie die PCI-Steckplatznummer (Peripheral Component Interconnect) für die aktuelle Netzwerkschnittstelle ab:
sudo lspci | grep -e "gVNIC" -e "Virtio network device"
Beispiel: Wenn die VM
ens4
als Netzwerkschnittstelle verwendet, ist die PCI-Slotnummer00:04.0
.Beenden Sie die mit dem Netzwerkadapter verbundene Netzwerkschnittstelle:
sudo ip link set NETWORK_INTERFACE_NAME down
Ersetzen Sie
NETWORK_INTERFACE_NAME
durch den Namen der Netzwerkschnittstelle, die in den VPC-Netzwerken angegeben ist. Um zu sehen, welche Netzwerkschnittstelle die VM verwendet, rufen Sie die Konfiguration der Netzwerkschnittstelle auf:sudo ifconfig
Binden Sie DPDK an den Treiber:
sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
Ersetzen Sie Folgendes:
DRIVER
: der Treiber, an den DPDK gebunden werden soll. Geben Sie einen der folgenden Werte an:UIO-Treiber:
igb_uio
IOMMU-freier VFIO-Treiber:
vfio-pci
PCI_SLOT_NUMBER
: die PCI-Steckplatznummer der aktuellen Netzwerkschnittstelle im Format00:0NUMBER.0
.
Erstellen Sie das
/mnt/huge
-Verzeichnis und dann einige Hugepages für DPDK zur Verwendung als Zwischenspeicher:sudo mkdir /mnt/huge sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge sudo bash -c 'echo 4 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages' sudo bash -c 'echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages'
Testen Sie, ob DPDK die in den vorherigen Schritten erstellte Netzwerkschnittstelle verwenden kann. Führen Sie dazu die in den DPDK-Bibliotheken enthaltene Beispielanwendung
testpmd
aus:sudo ./build/app/dpdk-testpmd
Weitere Informationen zum Testen von DPDK finden Sie unter Testpmd-Befehlszeilenoptionen.
DPDK vom Treiber entkoppeln:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
Ersetzen Sie
PCI_SLOT_NUMBER
durch die PCI-Steckplatznummer, die Sie in den vorherigen Schritten angegeben haben. So prüfen Sie die PCI-Steckplatznummer für die aktuelle Netzwerkschnittstelle:sudo lspci | grep -e "gVNIC" -e "Virtio network device"
Beispiel: Wenn die VM
ens4
als Netzwerkschnittstelle verwendet, ist die PCI-Slotnummer00:04.0
.Laden Sie den Compute Engine-Netzwerktreiber neu:
sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind' sudo ip link set NETWORK_INTERFACE_NAME up
Ersetzen Sie Folgendes:
PCI_SLOT_NUMBER
: die PCI-Steckplatznummer, die Sie in den vorherigen Schritten angegeben haben.VNIC_DIRECTORY
: Das Verzeichnis des vNIC. Geben Sie je nach verwendetem vNIC-Typ einen der folgenden Werte an:gVNIC:
gvnic
VirtIO-Net:
virtio-pci
NETWORK_INTERFACE_NAME
: Der Name der Netzwerkschnittstelle, die Sie im vorherigen Abschnitt angegeben haben.
Sehen Sie sich die Netzwerkbandbreitenraten für Ihren Maschinentyp an.
Weitere Informationen zu höheren MTU-Einstellungen mit Jumbo-Frames
Weitere Informationen zur TCP-Optimierung für die Netzwerkleistung
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Voraussetzungen
Beachten Sie beim Erstellen einer VM, auf der DPDK ausgeführt werden soll, Folgendes:
Einschränkungen
Für die Ausführung von DPDK auf einer VM gelten folgende Einschränkungen:
VM für die Ausführung von DPDK konfigurieren
In diesem Abschnitt wird erläutert, wie Sie eine VM erstellen, auf der DPDK ausgeführt werden kann.
VPC-Netzwerke erstellen
Erstellen Sie über die Google Cloud Console, die Google Cloud CLI oder die Compute Engine API zwei VPC-Netzwerke für die Datenebene und die Steuerungsebene. Sie können diese Netzwerke später beim Erstellen der VM angeben.
Console
gcloud
API
Weitere Konfigurationsoptionen beim Erstellen eines VPC-Netzwerk finden Sie unter VPC-Netzwerke erstellen und verwalten.
VM erstellen, die die VPC-Netzwerke für DPDK verwendet
Erstellen Sie eine VM, die gVNIC oder virtIO-Net in den beiden VPC-Netzwerken aktiviert, die Sie zuvor mit der Google Cloud Console, der gcloud CLI oder der Compute Engine API erstellt haben.
Empfohlen: Geben Sie Ubuntu LTS oder Ubuntu Pro als Betriebssystem-Image an, da es dessen Paketmanager unterstützt, um die UIO und IOMMU-freien VFIO-Treiber zu unterstützen. Wenn Sie keines dieser Betriebssysteme angeben möchten, wird für eine schnellere Paketverarbeitung Debian 11 oder höher empfohlen.
Console
So erstellen Sie eine VM, die die beiden in den vorherigen Schritten erstellten VPC-Netzwerk-Subnetze verwendet:
gcloud
Erstellen Sie mit dem
gcloud compute instances create
-Befehl und den folgenden Flags eine VM, die die beiden VPC-Netzwerk-Subnetze verwendet, die Sie in den vorherigen Schritten erstellt haben:gcloud compute instances create VM_NAME \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --network-interface=network=CONTROL_PLANE_NETWORK_NAME,subnet=CONTROL_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --network-interface=network=DATA_PLANE_NETWORK_NAME,subnet=DATA_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --zone=ZONE
Ersetzen Sie Folgendes:
Um beispielsweise eine VM namens
dpdk-vm
in der Zoneus-central1-a
zu erstellen, die einen nichtflüchtigen SSD-Speicher mit 512 GB, einen vordefinierten C2-Maschinentyp mit 60 vCPUs, ein Tier_1-Netzwerk, ein Daten- und ein Steuerungsebenennetzwerk angibt, die beide gVNIC verwenden, führen Sie folgenden Befehl aus:gcloud compute instances create dpdk-vm \ --boot-disk-size=512GB \ --boot-disk-type=pd-ssd \ --image-project=ubuntu-os-cloud \ --image-family=ubuntu-2004-lts \ --machine-type=c2-standard-60 \ --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \ --network-interface=network=control,subnet=control,nic-type=GVNIC \ --network-interface=network=data,subnet=data,nic-type=GVNIC \ --zone=us-central1-a
API
Erstellen Sie eine VM, die die beiden in den vorherigen Schritten erstellten VPC-Netzwerk-Subnetze verwendet. Stellen Sie dazu eine
POST
-Anfrage an dieinstances.insert
-Methode mit folgenden Feldern:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "MACHINE_TYPE", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE_FAMILY" } } ], "networkInterfaces": [ { "network": "global/networks/CONTROL_PLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/CONTROL_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" }, { "network": "global/networks/DATAPLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/DATA_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" } ] }
Ersetzen Sie Folgendes:
Um beispielsweise eine VM namens
dpdk-vm
in der Zoneus-central1-a
zu erstellen, die einen nichtflüchtigen SSD-Speicher mit 512 GB, einen vordefinierten C2-Maschinentyp mit 60 vCPUs, ein Tier_1-Netzwerk, ein Daten- und ein Steuerungsebenennetzwerk angibt, die beide gVNIC verwenden, führen Sie folgendenPOST
-Befehl aus:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances { "name": "dpdk-vm", "machineType": "c2-standard-60", "disks": [ { "initializeParams": { "diskSizeGb": "512GB", "diskType": "pd-ssd", "sourceImage": "projects/ubuntu-os-cloud/global/images/ubuntu-2004-lts" }, "boot": true } ], "networkInterfaces": [ { "network": "global/networks/control", "subnetwork": "regions/us-central1/subnetworks/control", "nicType": "GVNIC" }, { "network": "global/networks/data", "subnetwork": "regions/us-central1/subnetworks/data", "nicType": "GVNIC" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "TIER_1" } }
Weitere Konfigurationsoptionen zum Erstellen einer VM finden Sie unter VM-Instanz erstellen und starten.
DPDK auf der VM installieren
So installieren Sie DPDK auf Ihrer VM:
Treiber installieren.
Um DPDK für die Ausführung auf einem Treiber vorzubereiten, installieren Sie den Treiber mit einer der folgenden Methoden:
IOMMU-freie VFIO installieren
So installieren Sie den IOMMU-freien VFIO-Treiber:
UIO installieren
Wählen Sie eine der folgenden Methoden, um den UIO-Treiber auf DPDK zu installieren:
UIO mit Git installieren
So installieren Sie den UIO-Treiber mit
git
auf DPDK:UIO mit Linux-Paketen installieren
So installieren Sie den UIO-Treiber auf DPDK mit Linux-Paketen:
DPDK an einen Treiber binden und testen
So binden Sie DPDK an den im vorherigen Abschnitt installierten Treiber:
DPDK-Bindung aufheben
Nachdem Sie DPDK verwendet haben, können Sie die Bindung zum Treiber aufheben, den Sie im vorherigen Abschnitt installiert haben. So heben Sie die Bindung von DPDK auf:
Nächste Schritte
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-12-22 (UTC).
-