In diesem Dokument wird erläutert, wie Sie das Data Plane Development Kit (DPDK) auf einer VM-Instanz aktivieren, um die Netzwerkpaketverarbeitung zu beschleunigen.
DPDK ist ein Framework für leistungsintensive Anwendungen, die eine schnelle Paketverarbeitung, niedrige Latenz und konsistente 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 nützlich, wenn Sie Folgendes ausführen:
NFV-Bereitstellungen (Network Function Virtualization)
Software-definierte Netzwerk-Anwendungen (SDN)
Videostreaming oder Voice-Over-IP-Anwendungen
Sie können DPDK auf einer VM mit einem der folgenden virtuellen NIC-Typen (vNIC) ausführen:
Empfohlen: gVNIC
Eine leistungsstarke, sichere und skalierbare virtuelle Netzwerkschnittstelle, die speziell für Compute Engine entwickelt wurde und virtIO als vNIC der nächsten Generation unterstützt.
-
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 der physischen Hardware besteht darin, dass virtuelle Umgebungen die SR-IOV- und E/A-Arbeitsspeichereinheit (IOMMU) für leistungsstarke Anwendungen nicht unterstützen. Wenn Sie diese Einschränkung umgehen möchten, müssen Sie DPDK auf physischen Gastadressen anstelle von virtuellen Adressen mit einem der folgenden Treiber 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 so bei Compute Engine authentifizieren.
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
Die Region, in der sich die Subnetze befinden
Derselbe Typ von VNIC – entweder gVNIC oder VirtIO-Net
Beim Erstellen der VM:
Sie müssen dieselbe Region wie die Subnetze der beiden VPC-Netzwerke angeben.
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, beachten Sie Folgendes:
Sie müssen DPDK Version 22.11 oder höher verwenden.
Sie können nur unterstützte Laufwerk-Images verwenden.
Wenn Sie die Netzwerkleistung pro VM Stufe 1 aktivieren möchten, um eine höhere Netzwerkleistung beim Erstellen der VM zu erzielen, müssen Sie Folgendes angeben:
gVNIC als vNIC-Typ
Ein unterstützter Maschinentyp mit 30 vCPUs oder mehr
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 Abschnitt Neues Subnetz folgende Schritte aus:
Geben Sie im Feld Name einen Namen für Ihr Subnetz ein.
Wählen Sie im Menü Region eine Region für Ihr Subnetz aus.
Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.
Geben Sie im IPv4-Bereich einen gültigen IPv4-Bereich 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 Abschnitt Neues Subnetz folgende Schritte aus:
Geben Sie im Feld Name einen Namen für das Subnetz ein.
Wählen Sie im Menü Region die Region aus, die Sie für das Subnetz des Datenebenen-Netzwerks angegeben haben.
Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.
Geben Sie im IPv4-Bereich einen gültigen IPv4-Bereich 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. Diese muss mit der Region übereinstimmen, die Sie im Subnetz der Datenebene 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 die Region aus, in der Sie Ihre Netzwerke in den vorherigen Schritten 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 Anweisungen, 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 folgende Schritte aus:
Wählen Sie im Menü Netzwerkkarte eine der folgenden Optionen aus:
Wählen Sie gVNIC aus, um gVNIC zu verwenden.
Wählen Sie VirtIO aus, um VirtIO-Net zu verwenden.
Optional: Markieren Sie für eine höhere Netzwerkleistung und geringere Latenz das Kästchen Tier_1-Netzwerk aktivieren.
Führen Sie im Abschnitt Netzwerkschnittstellen die folgenden Schritte aus:
Klicken Sie in der Zeile Standard auf
Element "default" löschen.Klicken Sie auf Netzwerkschnittstelle hinzufügen.
Der Abschnitt Neue Netzwerkschnittstelle wird angezeigt.
Wählen Sie im Menü Netzwerk das Netzwerk der Steuerungsebene aus, das Sie in den vorherigen Schritten erstellt haben.
Klicken Sie auf Fertig.
Klicken Sie noch einmal auf Netzwerkschnittstelle hinzufügen.
Der Abschnitt Neue Netzwerkschnittstelle wird angezeigt.
Wählen Sie im Menü Netzwerk das Netzwerk der Datenebene 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. Hier finden Sie eine Liste der Images, die im Compute Engine-Image-Projekt verfügbar sind.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 des Images 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 mit SSH eine Verbindung zu der 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 Sie, ob VFIO aktiviert ist:
cat /boot/config-$(uname -r) | grep NOIOMMU
Wenn VFIO nicht aktiviert ist, führen Sie die Schritte unter UIO installieren aus.
Aktivieren Sie in VFIO den Kein-IOMMU-Modus:
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
Klonen Sie das Git-Repository
igb_uio
auf ein Laufwerk in Ihrer VM:git clone https://dpdk.org/git/dpdk-kmods
Erstellen Sie im übergeordneten Verzeichnis des geklonten Git-Repositorys das Modul und installieren Sie den UIO-Treiber für 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
Installieren Sie den UIO-Treiber auf DPDK:
sudo modprobe igb_uio
Rufen Sie die PCI-Slotnummer (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 in den VPC-Netzwerken angegebenen Netzwerkschnittstelle. Wenn Sie sehen möchten, 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
: 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-Slotnummer der aktuellen Netzwerkschnittstelle, die als00:0NUMBER.0
formatiert ist.
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.
Heben Sie die Bindung des DPDK an den Treiber auf:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
Ersetzen Sie
PCI_SLOT_NUMBER
durch die PCI-Slotnummer, die Sie in den vorherigen Schritten angegeben haben. Wenn Sie die PCI-Slotnummer für die aktuelle Netzwerkschnittstelle prüfen möchten, gehen Sie so vor: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-Slot-Nummer, 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.
Netzwerkbandbreitenraten für Ihren Maschinentyp ansehen
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
Achten Sie beim Erstellen einer VM zum Ausführen von DPDK auf Folgendes:
Einschränkungen
Für die Ausführung von DPDK auf einer VM gelten folgende Einschränkungen:
VM zum Ausführen von DPDK konfigurieren
In diesem Abschnitt wird erläutert, wie Sie eine VM erstellen, auf der DPDK ausgeführt werden soll.
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-Netzwerks 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 die Angabe von Debian 11 oder höher empfohlen.
Console
Erstellen Sie eine VM, die die beiden VPC-Netzwerk-Subnetze verwendet, die Sie in den vorherigen Schritten erstellt haben. Gehen Sie dazu so vor:
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 beim 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.
Zur Vorbereitung der Ausführung von DPDK auf einem Treiber wählen Sie eine der folgenden Methoden aus, um den Treiber zu installieren:
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 auf DPDK mit
git
: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 Treiber, den Sie im vorherigen Abschnitt installiert haben:
Bindung von DPDK aufheben
Nachdem Sie DPDK verwendet haben, können Sie die Bindung an den im vorherigen Abschnitt installierten Treiber aufheben. So heben Sie die Bindung des 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-11-25 (UTC).
-