Schnellere Verarbeitung von Netzwerkpaketen mit DPDK ermöglichen


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.

  • VirtIO-Net

    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:

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

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

        Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

        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:

  • 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.

Einschränkungen

Für die Ausführung von DPDK auf einer VM gelten folgende Einschränkungen:

  • 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:

  • 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:

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

  1. Erstellen Sie ein VPC-Netzwerk für die Datenebene:

    1. Wechseln Sie in der Google Cloud Console zu VPC-Netzwerke.

      Zur Seite VPC-Netzwerke

      Die Seite VPC-Netzwerke wird geöffnet.

    2. Klicken Sie auf VPC-Netzwerk erstellen.

      Die Seite VPC-Netzwerk erstellen wird geöffnet.

    3. Geben Sie im Feld Name einen Namen für Ihr Netzwerk ein.

    4. Führen Sie im Abschnitt Neues Subnetz folgende Schritte aus:

      1. Geben Sie im Feld Name einen Namen für Ihr Subnetz ein.

      2. Wählen Sie im Menü Region eine Region für Ihr Subnetz aus.

      3. Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.

      4. Geben Sie im IPv4-Bereich einen gültigen IPv4-Bereich in CIDR-Notation ein.

      5. Klicken Sie auf Fertig.

    5. Klicken Sie auf Erstellen.

      Die Seite VPC-Netzwerke wird geöffnet. Es kann bis zu einer Minute dauern, bis das VPC-Netzwerk erstellt ist.

  2. Erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zulässt:

    1. Klicken Sie noch einmal auf VPC-Netzwerk erstellen.

      Die Seite VPC-Netzwerk erstellen wird geöffnet.

    2. Geben Sie im Feld Name einen Namen für Ihr Netzwerk ein.

    3. Führen Sie im Abschnitt Neues Subnetz folgende Schritte aus:

      1. Geben Sie im Feld Name einen Namen für das Subnetz ein.

      2. Wählen Sie im Menü Region die Region aus, die Sie für das Subnetz des Datenebenen-Netzwerks angegeben haben.

      3. Wählen Sie IPv4 (Single-Stack) (Standardeinstellung) aus.

      4. Geben Sie im IPv4-Bereich einen gültigen IPv4-Bereich in CIDR-Notation ein.

      5. Klicken Sie auf Fertig.

    4. 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.

    5. Klicken Sie auf Erstellen.

      Die Seite VPC-Netzwerke wird geöffnet. Es kann bis zu einer Minute dauern, bis das VPC-Netzwerk erstellt ist.

gcloud

  1. So erstellen Sie ein VPC-Netzwerk für die Datenebene:

    1. Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz, indem Sie den gcloud compute networks create-Befehl verwenden, wobei das --subnet-mode-Flag auf custom 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 zwischen 1300 und 8896 liegen. Der Standardwert ist 1460. Bevor Sie die MTU auf einen höheren Wert als 1460 setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.

    2. 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.

  2. So erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zuläßt:

    1. Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz, indem Sie den gcloud compute networks create-Befehl verwenden, wobei das --subnet-mode-Flag auf custom 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 zwischen 1300 und 8896 liegen. Der Standardwert ist 1460. Bevor Sie die MTU auf einen höheren Wert als 1460 setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.

    2. 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.

    3. 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 auf tcp: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.

API

  1. So erstellen Sie ein VPC-Netzwerk für die Datenebene:

    1. Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz. Stellen Sie dazu eine POST-Anfrage an die networks.insert-Methode, wobei das autoCreateSubnetworks-Feld auf false 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 zwischen 1300 und 8896 liegen. Der Standardwert ist 1460. Bevor Sie die MTU auf einen höheren Wert als 1460 setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.

    2. Erstellen Sie ein Subnetz für das Netzwerk der VPC-Datenebene. Stellen Sie dazu eine POST-Anfrage an die subnetworks.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.

  2. So erstellen Sie ein VPC-Netzwerk für die Steuerungsebene mit einer Firewallregel, die SSH-Verbindungen zur VM zuläßt:

    1. Erstellen Sie ein VPC-Netzwerk mit einem manuell erstellten Subnetz. Stellen Sie dazu eine POST-Anfrage an die networks.insert-Methode, wobei das autoCreateSubnetworks-Feld auf false 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 zwischen 1300 und 8896 liegen. Der Standardwert ist 1460. Bevor Sie die MTU auf einen höheren Wert als 1460 setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.

    2. Erstellen Sie ein Subnetz für das VPC-Datenkontrollnetzwerk. Senden Sie dazu eine POST-Anfrage an die subnetworks.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.

    3. Erstellen Sie eine VPC-Firewallregel, die SSH im Netzwerk der Steuerungsebene zulässt. Stellen Sie dazu eine POST-Anfrage an die firewalls.insert-Methode. Setzen Sie in der Anfrage das IPProtocol-Feld auf tcp und das ports-Feld auf 22.

      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.

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:

  1. Rufen Sie in der Google Cloud Console VM-Instanzen auf.

    Zur Seite „VM-Instanzen“

    Die Seite VM-Instanzen wird geöffnet.

  2. Klicken Sie auf Instanz erstellen.

    Die Seite Instanz erstellen wird geöffnet.

  3. Geben Sie im Feld Name einen Namen für Ihre VM ein.

  4. Wählen Sie im Menü Region die Region aus, in der Sie Ihre Netzwerke in den vorherigen Schritten erstellt haben.

  5. Wählen Sie im Menü Zone eine Zone für Ihre VM aus.

  6. Führen Sie im Abschnitt Maschinenkonfiguration die folgenden Schritte aus:

    1. 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.

    2. 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:

      1. Wählen Sie im Menü GPU-Typ einen GPU-Typ.

      2. Wählen Sie im Menü Anzahl der GPUs die Anzahl der GPUs aus.

    3. Wählen Sie im Menü Reihe eine Maschinenserie.

    4. Wählen Sie im Menü Maschinentyp einen Maschinentyp.

    5. Optional: Maximieren Sie Erweiterte Konfigurationen und folgen Sie den Anweisungen, um die Maschine für diese VM weiter anzupassen.

  7. Optional: Klicken Sie im Abschnitt Bootlaufwerk auf Ändern und folgen Sie den Aufforderungen zum Ändern des Speicherabbilds.

  8. Maximieren Sie den Bereich Erweiterte Optionen.

  9. Maximieren Sie den Bereich Netzwerk.

  10. Führen Sie im Abschnitt Konfiguration der Netzwerkleistung folgende Schritte aus:

    1. 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.

    2. Optional: Markieren Sie für eine höhere Netzwerkleistung und geringere Latenz das Kästchen Tier_1-Netzwerk aktivieren.

  11. Führen Sie im Abschnitt Netzwerkschnittstellen die folgenden Schritte aus:

    1. Klicken Sie in der Zeile Standard auf Element "default" löschen.

    2. Klicken Sie auf Netzwerkschnittstelle hinzufügen.

      Der Abschnitt Neue Netzwerkschnittstelle wird angezeigt.

    3. Wählen Sie im Menü Netzwerk das Netzwerk der Steuerungsebene aus, das Sie in den vorherigen Schritten erstellt haben.

    4. Klicken Sie auf Fertig.

    5. Klicken Sie noch einmal auf Netzwerkschnittstelle hinzufügen.

      Der Abschnitt Neue Netzwerkschnittstelle wird angezeigt.

    6. Wählen Sie im Menü Netzwerk das Netzwerk der Datenebene aus, das Sie in den vorherigen Schritten erstellt haben.

    7. Klicken Sie auf Fertig.

  12. Klicken Sie auf Erstellen.

    Die Seite VM-Instanzen wird geöffnet. Es kann bis zu einer Minute dauern, bis die VM erstellt ist.

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:

  • 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 und IMAGE 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.

Um beispielsweise eine VM namens dpdk-vm in der Zone us-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 die instances.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:

  • 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 befinden

  • CONTROL_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.

Um beispielsweise eine VM namens dpdk-vm in der Zone us-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 POST-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:

  1. Stellen Sie mit SSH eine Verbindung zu der VM her, die Sie im vorherigen Abschnitt erstellt haben.

  2. 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
    
  3. 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
    
  4. So erstellen Sie DPDK mit den Beispielen:

    meson setup -Dexamples=all build
    sudo ninja -C build install; sudo ldconfig
    

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:

  1. 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.

  2. Aktivieren Sie in VFIO den Kein-IOMMU-Modus:

    sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
    

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:

  1. Klonen Sie das Git-Repository igb_uio auf ein Laufwerk in Ihrer VM:

    git clone https://dpdk.org/git/dpdk-kmods
    
  2. 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
    

UIO mit Linux-Paketen installieren

So installieren Sie den UIO-Treiber auf DPDK mit Linux-Paketen:

  1. dpdk-igb-uio-dkms-Paket installieren:

    sudo apt-get install -y dpdk-igb-uio-dkms
    
  2. Installieren Sie den UIO-Treiber auf DPDK:

    sudo modprobe igb_uio
    

DPDK an einen Treiber binden und testen

So binden Sie DPDK an den Treiber, den Sie im vorherigen Abschnitt installiert haben:

  1. 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-Slotnummer 00:04.0.

  2. 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
    
  3. 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 als 00:0NUMBER.0 formatiert ist.

  4. 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'
    
  5. 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.

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:

  1. 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-Slotnummer 00:04.0.

  2. 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.

Nächste Schritte