Attivare un'elaborazione più rapida dei pacchetti di rete con DPDK


Questo documento spiega come attivare il Data Plane Development Kit (DPDK) su un'istanza di macchina virtuale (VM) per un'elaborazione più rapida dei pacchetti di rete.

DPDK è un framework per applicazioni ad alte prestazioni che richiedono un'elaborazione rapida dei pacchetti, una bassa latenza e prestazioni costanti. DPDK fornisce un insieme di librerie del piano dati e un controller dell'interfaccia di rete (NIC) che bypassano la rete del kernel e vengono eseguiti direttamente nello spazio utente. Ad esempio, l'attivazione di DPDK sulla VM è utile quando esegui:

  • Deployment di Network Function Virtualization (NFV)

  • Applicazioni di networking software-defined (SDN)

  • Applicazioni di streaming video o Voice over IP

Puoi eseguire DPDK su una VM utilizzando uno dei seguenti tipi di NIC virtuale (vNIC):

  • Consigliato: gVNIC

    Un'interfaccia di rete virtuale ad alte prestazioni, sicura e scalabile progettata specificamente per Compute Engine che succede a virtIO come vNIC di nuova generazione.

  • VirtIO-Net

    Un driver Ethernet open source che consente alle VM di accedere in modo efficiente a hardware fisici, come archiviazione a blocchi e schede di rete.

Un problema relativo all'esecuzione di DPDK in un ambiente virtuale, anziché su hardware fisico, è che gli ambienti virtuali non supportano SR-IOV e IOMMU (I/O Memory Management Unit) per applicazioni ad alte prestazioni. Per superare questa limitazione, devi eseguire DPDK sugli indirizzi fisici guest anziché sugli indirizzi virtuali host utilizzando uno dei seguenti driver:

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso ai Google Cloud servizi e alle API. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Requisiti

Quando crei una VM su cui eseguire DPDK, assicurati di quanto segue:

  • Per evitare la mancanza di connettività di rete durante l'esecuzione delle applicazioni, utilizza due reti Virtual Private Cloud:

    • Una rete VPC per il control plane

    • Una rete VPC per il piano dati

  • Entrambe le reti VPC devono specificare quanto segue:

    • Una subnet con un intervallo di indirizzi IP univoco

    • La stessa regione per le relative subnet

    • Lo stesso tipo di VNIC: gVNIC o VirtIO-Net

  • Durante la creazione della VM:

    • Devi specificare la stessa regione delle subnet delle due reti VPC.

    • Devi specificare il tipo di vNIC che prevedi di utilizzare con DPDK.

    • Devi specificare una serie di macchine supportata per gVNIC o VirtIO-Net.

Limitazioni

L'esecuzione di DPDK su una VM presenta le seguenti limitazioni:

Configura una VM per eseguire DPDK

Questa sezione spiega come creare una VM su cui eseguire DPDK.

Crea le reti VPC

Crea due reti VPC, per il data plane e il control plane, utilizzando la console Google Cloud , Google Cloud CLI o l'API Compute Engine. Puoi specificare queste reti in un secondo momento durante la creazione della VM.

Console

  1. Crea una rete VPC per il data plane:

    1. Nella console Google Cloud , vai a Reti VPC.

      Vai a Reti VPC

      Si apre la pagina Reti VPC.

    2. Fai clic su Crea rete VPC.

      Si apre la pagina Crea una rete VPC.

    3. Nel campo Nome, inserisci un nome per la rete.

    4. Nella sezione Nuova subnet:

      1. Nel campo Nome, inserisci un nome per la subnet.

      2. Nel menu Regione, seleziona una regione per la subnet.

      3. Seleziona IPv4 (stack singolo) (impostazione predefinita).

      4. In Intervallo IPv4, inserisci un indirizzo valido per l'intervallo IPv4 nella notazione CIDR.

      5. Fai clic su Fine.

    5. Fai clic su Crea.

      Si apre la pagina Reti VPC. Potrebbe essere necessario fino a un minuto prima che la creazione della rete VPC venga completata.

  2. Crea una rete VPC per il control plane con una regola firewall per consentire le connessioni SSH alla VM:

    1. Fai di nuovo clic su Crea rete VPC.

      Si apre la pagina Crea una rete VPC.

    2. Nel campo Nome, inserisci un nome per la rete.

    3. Nella sezione Nuova subnet:

      1. Nel campo Nome, inserisci un nome per la subnet.

      2. Nel menu Regione, seleziona la stessa regione specificata per la subnet della rete del data plane.

      3. Seleziona IPv4 (stack singolo) (impostazione predefinita).

      4. In Intervallo IPv4, inserisci un indirizzo valido per l'intervallo IPv4 nella notazione CIDR.

      5. Fai clic su Fine.

    4. Nella scheda Regole firewall IPv4, seleziona la casella di controllo NETWORK_NAME-allow-ssh.

      Dove NETWORK_NAME è il nome della rete specificato nei passaggi precedenti.

    5. Fai clic su Crea.

      Si apre la pagina Reti VPC. Potrebbe essere necessario fino a un minuto prima che la creazione della rete VPC venga completata.

gcloud

  1. Per creare una rete VPC per il data plane:

    1. Crea una rete VPC con una subnet creata manualmente utilizzando il comando gcloud compute networks create con il flag --subnet-mode impostato su custom.

      gcloud compute networks create DATA_PLANE_NETWORK_NAME \
          --bgp-routing-mode=regional \
          --mtu=MTU \
          --subnet-mode=custom
      

      Sostituisci quanto segue:

      • DATA_PLANE_NETWORK_NAME: il nome della rete VPC per il data plane.

      • MTU: l'unità massima di trasmissione (MTU), ovvero la dimensione massima del pacchetto della rete. Il valore deve essere compreso tra 1300 e 8896. Il valore predefinito è 1460. Prima di impostare l'MTU su un valore superiore a 1460, consulta Unità massima di trasmissione.

    2. Crea una subnet per la rete del piano dati VPC che hai appena creato utilizzando il comando gcloud compute networks subnets create.

      gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \
          --network=DATA_PLANE_NETWORK_NAME \
          --range=DATA_PRIMARY_RANGE \
          --region=REGION
      

      Sostituisci quanto segue:

      • DATA_PLANE_SUBNET_NAME: il nome della subnet per la rete del data plane.

      • DATA_PLANE_NETWORK_NAME: il nome della rete del piano dati specificata nei passaggi precedenti.

      • DATA_PRIMARY_RANGE: un intervallo IPv4 valido per la subnet nella notazione CIDR.

      • REGION: la regione in cui creare la subnet.

  2. Per creare una rete VPC per il control plane con una regola firewall per consentire le connessioni SSH alla VM, segui questi passaggi:

    1. Crea una rete VPC con una subnet creata manualmente utilizzando il comando gcloud compute networks create con il flag --subnet-mode impostato su custom.

      gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \
          --bgp-routing-mode=regional \
          --mtu=MTU \
          --subnet-mode=custom
      

      Sostituisci quanto segue:

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete VPC per il control plane.

      • MTU: l'MTU, ovvero la dimensione massima del pacchetto della rete. Il valore deve essere compreso tra 1300 e 8896. Il valore predefinito è 1460. Prima di impostare l'MTU su un valore superiore a 1460, consulta Unità massima di trasmissione.

    2. Crea una subnet per la rete del control plane VPC che hai appena creato utilizzando il comando gcloud compute networks subnets create.

      gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \
          --network=CONTROL_PLANE_NETWORK_NAME \
          --range=CONTROL_PRIMARY_RANGE \
          --region=REGION
      

      Sostituisci quanto segue:

      • CONTROL_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane.

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane specificata nei passaggi precedenti.

      • CONTROL_PRIMARY_RANGE: un intervallo IPv4 valido per la subnet nella notazione CIDR.

      • REGION: la regione in cui creare la subnet, che deve corrispondere alla regione specificata nella subnet della rete del data plane.

    3. Crea una regola firewall VPC che consenta SSH nella rete del control plane utilizzando il comando gcloud compute firewall-rules create con il flag --allow impostato su tcp:22.

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
          --action=allow \
          --network=CONTROL_PLANE_NETWORK_NAME \
          --rules=tcp:22
      

      Sostituisci quanto segue:

      • FIREWALL_RULE_NAME: il nome della regola firewall.

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane che hai creato nei passaggi precedenti.

API

  1. Per creare una rete VPC per il data plane:

    1. Crea una rete VPC con una subnet creata manualmente inviando una richiesta POST al metodo networks.insert con il campo autoCreateSubnetworks impostato su false.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
      
      {
        "autoCreateSubnetworks": false,
        "name": "DATA_PLANE_NETWORK_NAME",
        "mtu": MTU
      }
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto del progetto corrente.

      • DATA_PLANE_NETWORK_NAME: il nome della rete per il data plane.

      • MTU: l'unità massima di trasmissione (MTU), ovvero la dimensione massima del pacchetto della rete. Il valore deve essere compreso tra 1300 e 8896. Il valore predefinito è 1460. Prima di impostare l'MTU su un valore superiore a 1460, consulta Unità massima di trasmissione.

    2. Crea una subnet per la rete del data plane VPC effettuando una richiesta POST al metodo subnetworks.insert.

      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"
      }
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto del progetto in cui si trova la rete del data plane.

      • REGION: la regione in cui vuoi creare la subnet.

      • DATA_PRIMARY_RANGE: l'intervallo IPv4 principale per la nuova subnet nella notazione CIDR.

      • DATA_PLANE_SUBNET_NAME: il nome della subnet per la rete del piano dati che hai creato nel passaggio precedente.

      • DATA_PLANE_NETWORK_NAME: il nome della rete del piano dati che hai creato nel passaggio precedente.

  2. Per creare una rete VPC per il control plane con una regola firewall per consentire l'accesso SSH alla VM, segui questi passaggi:

    1. Crea una rete VPC con una subnet creata manualmente inviando una richiesta POST al metodo networks.insert con il campo autoCreateSubnetworks impostato su false.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
      
      {
        "autoCreateSubnetworks": false,
        "name": "CONTROL_PLANE_NETWORK_NAME",
        "mtu": MTU
      }
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto del progetto corrente.

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete per il control plane.

      • MTU: l'MTU, ovvero la dimensione massima del pacchetto della rete. Il valore deve essere compreso tra 1300 e 8896. Il valore predefinito è 1460. Prima di impostare l'MTU su un valore superiore a 1460, consulta Unità massima di trasmissione.

    2. Crea una subnet per la rete di controllo dei dati VPC effettuando una richiesta POST al metodo subnetworks.insert.

      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"
      }
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto del progetto in cui si trova la rete del control plane.

      • REGION: la regione in cui vuoi creare la subnet.

      • CONTROL_PRIMARY_RANGE: l'intervallo IPv4 principale per la nuova subnet nella notazione CIDR.

      • CONTROL_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane che hai creato nel passaggio precedente.

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane che hai creato nel passaggio precedente.

    3. Crea una regola firewall VPC che consenta SSH nella rete del control plane effettuando una richiesta POST al metodo firewalls.insert. Nella richiesta, imposta il campo IPProtocol su tcp e il campo ports su 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"
      }
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto del progetto in cui si trova la rete del control plane.

      • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane che hai creato nei passaggi precedenti.

Per altre opzioni di configurazione durante la creazione di una rete VPC, consulta Crea e gestisci le reti VPC.

Crea una VM che utilizza le reti VPC per DPDK

Crea una VM che abiliti gVNIC o virtIO-Net sulle due reti VPC che hai creato in precedenza utilizzando la console Google Cloud , gcloud CLI e l'API Compute Engine.

Consigliato: specifica Ubuntu LTS o Ubuntu Pro come immagine del sistema operativo perché supportano il gestore di pacchetti per i driver UIO e VFIO senza IOMMU. Se non vuoi specificare nessuno di questi sistemi operativi, ti consigliamo di specificare Debian 11 o versioni successive per un'elaborazione dei pacchetti più rapida.

Console

Crea una VM che utilizzi le due subnet di rete VPC create nei passaggi precedenti procedendo nel seguente modo:

  1. Nella Google Cloud console, vai a istanze VM.

    Vai a Istanze VM

    Si apre la pagina Istanze VM.

  2. Fai clic su Crea istanza.

    Viene visualizzata la pagina Crea un'istanza.

  3. Nel campo Nome, inserisci un nome per la VM.

  4. Nel menu Regione, seleziona la stessa regione in cui hai creato le reti nei passaggi precedenti.

  5. Nel menu Zona, seleziona una zona per la tua VM.

  6. Nella sezione Configurazione macchina, segui questi passaggi:

    1. Seleziona una delle seguenti opzioni:

      • Per i carichi di lavoro comuni, seleziona la scheda Per uso generico (predefinita).

      • Per i carichi di lavoro ad alta intensità di prestazioni, seleziona la scheda Ottimizzato per il calcolo.

      • Per i workload con rapporti memoria/vCPU elevati, seleziona la scheda Ottimizzata per la memoria.

      • Per i carichi di lavoro che utilizzano le unità di elaborazione grafica (GPU), seleziona la scheda GPU.

    2. Facoltativo. Se nel passaggio precedente hai specificato GPU e vuoi modificare la GPU da collegare alla VM, esegui una o più delle seguenti operazioni:

      1. Nel menu Tipo di GPU, seleziona un tipo di GPU.

      2. Nel menu Numero di GPU, seleziona il numero di GPU.

    3. Nel menu Serie, seleziona una serie di macchine.

    4. Nel menu Tipo di macchina, seleziona un tipo di macchina.

    5. (Facoltativo) Espandi Configurazioni avanzate e segui le istruzioni per personalizzare ulteriormente la macchina per questa VM.

  7. (Facoltativo) Nella sezione Disco di avvio, fai clic su Cambia e poi segui le istruzioni per modificare l'immagine del disco.

  8. Espandi la sezione Opzioni avanzate.

  9. Espandi la sezione Networking.

  10. Nella sezione Configurazione delle prestazioni di rete, segui questi passaggi:

    1. Nel menu Scheda di interfaccia di rete, seleziona una delle seguenti opzioni:

      • Per utilizzare gVNIC, seleziona gVNIC.

      • Per utilizzare VirtIO-Net, seleziona VirtIO.

    2. (Facoltativo) Per prestazioni di rete superiori e latenza ridotta, seleziona la casella di controllo Abilita networking Tier_1.

  11. Nella sezione Interfacce di rete, segui questi passaggi:

    1. Nella riga predefinita, fai clic su Elimina elemento "predefinito".

    2. Fai clic su Aggiungi interfaccia di rete.

      Viene visualizzata la sezione Nuova interfaccia di rete.

    3. Nel menu Rete, seleziona la rete del control plane che hai creato nei passaggi precedenti.

    4. Fai clic su Fine.

    5. Fai di nuovo clic su Aggiungi interfaccia di rete.

      Viene visualizzata la sezione Nuova interfaccia di rete.

    6. Nel menu Rete, seleziona la rete del data plane creata nei passaggi precedenti.

    7. Fai clic su Fine.

  12. Fai clic su Crea.

    Si apre la pagina Istanze VM. Potrebbe essere necessario fino a un minuto prima che la creazione della VM venga completata.

gcloud

Crea una VM che utilizzi le due subnet di rete VPC create nei passaggi precedenti utilizzando il comando gcloud compute instances create con i seguenti flag:

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

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.

  • IMAGE_FAMILY: la famiglia di immagini per il sistema operativo con cui verrà inizializzato il disco di avvio. In alternativa, puoi specificare il flag --image=IMAGE e sostituire IMAGE con una versione specifica di un'immagine. Scopri come visualizzare un elenco di immagini disponibili nel progetto di immagini di Compute Engine.

  • IMAGE_PROJECT: il nome del progetto di immagine che contiene l'immagine del disco.

  • MACHINE_TYPE: un tipo di macchina, predefinito o personalizzato, per la VM.

  • VNIC_TYPE: il tipo di vNIC da utilizzare per le reti del control plane e del data plane. Il valore deve essere uno dei seguenti:

    • Per utilizzare gVNIC, specifica GVNIC.

    • Per utilizzare VirtIO-Net, specifica VIRTIO_NET.

  • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane che hai creato nei passaggi precedenti.

  • CONTROL_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane che hai creato nei passaggi precedenti.

  • DATA_PLANE_NETWORK_NAME: il nome della rete del data plane che hai creato nei passaggi precedenti.

  • DATA_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane che hai creato automaticamente nei passaggi precedenti.

  • ZONE: la zona in cui creare la VM. Specifica una zona all'interno della stessa regione della subnet che hai creato nei passaggi precedenti.

Ad esempio, per creare una VM denominata dpdk-vm nella zona us-central1-a che specifica un disco permanente SSD da 512 GB, un tipo di macchina C2 predefinito con 60 vCPU, networking di livello 1 e una rete del piano dati e del piano di controllo che utilizzano entrambe gVNIC, esegui questo comando:

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

Crea una VM che utilizzi le due subnet di rete VPC create nei passaggi precedenti effettuando una richiesta POST al metodo instances.insert con i seguenti campi:

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"
    }
  ]
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto in cui si trovano la rete VPC del control plane e la rete VPC del data plane.

  • ZONE: la zona in cui creare la VM.

  • VM_NAME: il nome della VM.

  • MACHINE_TYPE: un tipo di macchina, predefinito o personalizzato, per la VM.

  • IMAGE_PROJECT: il nome del progetto di immagine che contiene l'immagine del disco.

  • IMAGE_FAMILY: la famiglia di immagini per il sistema operativo con cui verrà inizializzato il disco di avvio. In alternativa, puoi specificare una versione specifica di un'immagine. Scopri come visualizzare un elenco di immagini nel progetto delle immagini Compute Engine.

  • CONTROL_PLANE_NETWORK_NAME: il nome della rete del control plane che hai creato nei passaggi precedenti.

  • REGION: la regione in cui esistono le subnet delle reti del control plane e del data plane.

  • CONTROL_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane che hai creato nei passaggi precedenti.

  • VNIC_TYPE: il tipo di vNIC da utilizzare per le reti del control plane e del data plane. Il valore deve essere uno dei seguenti:

    • Per utilizzare gVNIC, specifica GVNIC.

    • Per utilizzare VirtIO-Net, specifica VIRTIO_NET.

  • DATA_PLANE_NETWORK_NAME: il nome della rete del data plane che hai creato nei passaggi precedenti.

  • DATA_PLANE_SUBNET_NAME: il nome della subnet per la rete del control plane che hai creato nei passaggi precedenti.

Ad esempio, per creare una VM denominata dpdk-vm nella zona us-central1-a che specifica un disco permanente SSD da 512 GB, un tipo di macchina C2 predefinito con 60 vCPU, networking di livello 1 e una rete del piano dati e del piano di controllo che utilizzano entrambe gVNIC, invia la seguente richiesta POST:

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"
  }
}

Per altre opzioni di configurazione durante la creazione di una VM, consulta Crea e avvia un'istanza VM.

Installare DPDK sulla VM

Per installare DPDK sulla VM:

  1. Connettiti alla VM che hai creato nella sezione precedente utilizzando SSH.

  2. Configura le dipendenze per l'installazione di DPDK:

    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. Installa DPDK:

    wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz
    tar xvf dpdk-23.07.tar.xz
    cd dpdk-23.07
    
  4. Per creare DPDK con gli esempi:

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

Installa il driver

Per preparare DPDK all'esecuzione su un driver, installalo selezionando uno dei seguenti metodi:

Installare un VFIO senza IOMMU

Per installare il driver VFIO senza IOMMU:

  1. Controlla se VFIO è abilitato:

    cat /boot/config-$(uname -r) | grep NOIOMMU
    

    Se VFIO non è attivo, segui i passaggi descritti in Installare UIO.

  2. Attiva la modalità No-IOMMU in VFIO:

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

Installare UIO

Per installare il driver UIO su DPDK, seleziona uno dei seguenti metodi:

Installa UIO utilizzando git

Per installare il driver UIO su DPDK utilizzando git:

  1. Clona il repository Git igb_uio su un disco della tua VM:

    git clone https://dpdk.org/git/dpdk-kmods
    
  2. Dalla directory principale del repository Git clonato, crea il modulo e installa il driver UIO su DPDK:

    pushd dpdk-kmods/linux/igb_uio
    sudo make
    sudo depmod && sudo insmod igb_uio.ko
    popd
    

Installare UIO utilizzando i pacchetti Linux

Per installare il driver UIO su DPDK utilizzando i pacchetti Linux:

  1. Installa il pacchetto dpdk-igb-uio-dkms:

    sudo apt-get install -y dpdk-igb-uio-dkms
    
  2. Installa il driver UIO su DPDK:

    sudo modprobe igb_uio
    

Associa DPDK a un driver e testalo

Per associare DPDK al driver installato nella sezione precedente:

  1. Ottieni il numero di slot Peripheral Component Interconnect (PCI) per l'interfaccia di rete corrente:

    sudo lspci | grep -e "gVNIC" -e "Virtio network device"
    

    Ad esempio, se la VM utilizza ens4 come interfaccia di rete, il numero di slot PCI è 00:04.0.

  2. Arresta l'interfaccia di rete connessa all'adattatore di rete:

    sudo ip link set NETWORK_INTERFACE_NAME down
    

    Sostituisci NETWORK_INTERFACE_NAME con il nome dell'interfaccia di rete specificata nelle reti VPC. Per vedere quale interfaccia di rete utilizza la VM, visualizza la configurazione dell'interfaccia di rete:

    sudo ifconfig
    
  3. Associa DPDK al driver:

    sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
    

    Sostituisci quanto segue:

    • DRIVER: il driver a cui associare DPDK. Specifica uno dei seguenti valori:

      • Driver UIO: igb_uio

      • Driver VFIO senza IOMMU: vfio-pci

    • PCI_SLOT_NUMBER: il numero dello slot PCI dell'interfaccia di rete corrente formattato come 00:0NUMBER.0.

  4. Crea la directory /mnt/huge, quindi crea alcune pagine enormi che DPDK utilizzerà per i buffer:

    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. Verifica che DPDK possa utilizzare l'interfaccia di rete creata nei passaggi precedenti eseguendo l'applicazione di esempio testpmd inclusa nelle librerie DPDK:

    sudo ./build/app/dpdk-testpmd
    

    Per saperne di più sul test di DPDK, consulta Opzioni della riga di comando testpmd.

Svincola DPDK

Dopo aver utilizzato DPDK, puoi scollegarlo dal driver che hai installato nella sezione precedente. Per annullare il binding di DPDK:

  1. Annulla l'associazione di DPDK al driver:

    sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
    

    Sostituisci PCI_SLOT_NUMBER con il numero di slot PCI che hai specificato nei passaggi precedenti. Se vuoi verificare il numero dello slot PCI per l'interfaccia di rete attuale:

    sudo lspci | grep -e "gVNIC" -e "Virtio network device"
    

    Ad esempio, se la VM utilizza ens4 come interfaccia di rete, il numero di slot PCI è 00:04.0.

  2. Ricarica il driver di rete Compute Engine:

    sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind'
    sudo ip link set NETWORK_INTERFACE_NAME up
    

    Sostituisci quanto segue:

    • PCI_SLOT_NUMBER: il numero dello slot PCI specificato nei passaggi precedenti.

    • VNIC_DIRECTORY: la directory della vNIC. A seconda del tipo di vNIC che utilizzi, specifica uno dei seguenti valori:

      • gVNIC: gvnic

      • VirtIO-Net: virtio-pci

    • NETWORK_INTERFACE_NAME: il nome dell'interfaccia di rete specificata nella sezione precedente.

Passaggi successivi