Habilite un procesamiento de paquetes de red más rápido con DPDK


Este documento explica cómo habilitar el kit de desarrollo del plano de datos (DPDK) en una instancia de máquina virtual (VM) para un procesamiento de paquetes de red más rápido.

DPDK es un marco para aplicaciones de rendimiento intensivo que requieren un procesamiento rápido de paquetes, baja latencia y rendimiento constante. DPDK proporciona un conjunto de bibliotecas de plano de datos y un controlador de interfaz de red (NIC) que omite la red del kernel y se ejecuta directamente en el espacio del usuario. Por ejemplo, habilitar DPDK en su VM es útil cuando ejecuta lo siguiente:

  • Implementaciones de virtualización de funciones de red (NFV)

  • Aplicaciones de redes definidas por software (SDN)

  • Aplicaciones de streaming de vídeo o voz sobre IP

Puede ejecutar DPDK en una máquina virtual utilizando uno de los siguientes tipos de NIC virtual (vNIC):

  • Recomendado: gVNIC

    Una interfaz de red virtual escalable, segura y de alto rendimiento diseñada específicamente para Compute Engine que sucede a virtIO como la vNIC de próxima generación.

  • VirtIO-Net

    Un controlador Ethernet de código abierto que permite a las máquinas virtuales acceder de manera eficiente a hardware físico, como almacenamiento en bloque y adaptadores de red.

Un problema al ejecutar DPDK en un entorno virtual, en lugar de en hardware físico, es que los entornos virtuales carecen de soporte para SR-IOV y la Unidad de gestión de memoria de E/S (IOMMU) para aplicaciones de alto rendimiento. Para superar esta limitación, debe ejecutar DPDK en direcciones físicas de invitados en lugar de direcciones virtuales de host mediante uno de los siguientes controladores:

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        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.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Requisitos

Al crear una máquina virtual para ejecutar DPDK, asegúrese de lo siguiente:

  • Para evitar la falta de conectividad de red al ejecutar sus aplicaciones, utilice dos redes de Nube Privada Virtual:

    • Una red VPC para el plano de control.

    • Una red VPC para el plano de datos

  • Las dos redes de VPC deben especificar lo siguiente:

    • Una subred con un rango de direcciones IP único

    • La misma región para sus subredes.

    • El mismo tipo de VNIC, ya sea gVNIC o VirtIO-Net

  • Al crear la VM:

    • Debe especificar la misma región que las subredes de las dos redes VPC.

    • Debe especificar el tipo de vNIC que planea usar con DPDK.

    • Debe especificar una serie de máquinas compatibles con gVNIC o VirtIO-Net.

Restricciones

La ejecución de DPDK en una VM tiene las siguientes restricciones:

Configurar una VM para ejecutar DPDK

Esta sección explica cómo crear una máquina virtual para ejecutar DPDK.

Crear las redes VPC

Cree dos redes de VPC, para el plano de datos y el plano de control, mediante la consola de Google Cloud, la CLI de Google Cloud o la API de Compute Engine. Más adelante podrá especificar estas redes al crear la máquina virtual.

Consola

  1. Cree una red VPC para el plano de datos:

    1. En la consola de Google Cloud, ve a Redes VPC .

      Ir a redes VPC

      Se abre la página de redes VPC .

    2. Haga clic Crear red VPC .

      Se abre la página Crear una red VPC .

    3. En el campo Nombre , ingrese un nombre para su red.

    4. En la sección Nueva subred , haga lo siguiente:

      1. En el campo Nombre , ingrese un nombre para su subred.

      2. En el menú Región , seleccione una región para su subred.

      3. Seleccione IPv4 (pila única) (predeterminado).

      4. En el rango IPv4 , ingrese una dirección de rango IPv4 válida en notación CIDR.

      5. Haga clic en Listo .

    5. Haga clic en Crear .

      Se abre la página de redes VPC . Puede pasar hasta un minuto antes de que se complete la creación de la red VPC.

  2. Cree una red VPC para el plano de control con una regla de firewall para permitir conexiones SSH a la VM:

    1. Haga clic Crear red VPC nuevamente.

      Se abre la página Crear una red VPC .

    2. En el campo Nombre , ingrese un nombre para su red.

    3. En la sección Nueva subred , haga lo siguiente:

      1. En el campo Nombre , ingrese un nombre para la subred.

      2. En el menú Región , seleccione la misma región que especificó para la subred de la red del plano de datos.

      3. Seleccione IPv4 (pila única) (predeterminado).

      4. En el rango IPv4 , ingrese una dirección de rango IPv4 válida en notación CIDR.

      5. Haga clic en Listo .

    4. En la pestaña de reglas de firewall IPv4 , seleccione la casilla NETWORK_NAME -allow-ssh .

      Donde NETWORK_NAME es el nombre de la red que especificó en los pasos anteriores.

    5. Haga clic en Crear .

      Se abre la página de redes VPC . Puede pasar hasta un minuto antes de que se complete la creación de la red VPC.

nube de gcloud

  1. Para crear una red VPC para el plano de datos, siga estos pasos:

    1. Cree una red de VPC con una subred creada manualmente mediante el comando gcloud compute networks create con el indicador --subnet-mode configurado en custom .

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

      Reemplace lo siguiente:

      • DATA_PLANE_NETWORK_NAME : el nombre de la red VPC para el plano de datos.

      • MTU : la unidad máxima de transmisión (MTU), que es el tamaño de paquete más grande de la red. El valor debe estar entre 1300 y 8896 . El valor predeterminado es 1460 . Antes de configurar la MTU en un valor superior a 1460 , consulte Unidad de transmisión máxima .

    2. Crea una subred para la red del plano de datos de VPC que acabas de crear usando el 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
      

      Reemplace lo siguiente:

      • DATA_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de datos.

      • DATA_PLANE_NETWORK_NAME : el nombre de la red del plano de datos que especificó en los pasos anteriores.

      • DATA_PRIMARY_RANGE : un rango IPv4 válido para la subred en notación CIDR.

      • REGION : la región donde crear la subred.

  2. Para crear una red VPC para el plano de control con una regla de firewall para permitir conexiones SSH en la VM, siga estos pasos:

    1. Cree una red de VPC con una subred creada manualmente mediante el comando gcloud compute networks create con el indicador --subnet-mode configurado en custom .

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

      Reemplace lo siguiente:

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red VPC para el plano de control.

      • MTU : la MTU, que es el tamaño de paquete más grande de la red. El valor debe estar entre 1300 y 8896 . El valor predeterminado es 1460 . Antes de configurar la MTU en un valor superior a 1460 , consulte Unidad de transmisión máxima .

    2. Crea una subred para la red del plano de control de VPC que acabas de crear usando el 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
      

      Reemplace lo siguiente:

      • CONTROL_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control.

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que especificó en los pasos anteriores.

      • CONTROL_PRIMARY_RANGE : un rango IPv4 válido para la subred en notación CIDR.

      • REGION : la región donde crear la subred, que debe coincidir con la región que especificó en la subred de la red del plano de datos.

    3. Cree una regla de firewall de VPC que permita el acceso SSH a la red del plano de control mediante el comando gcloud compute firewall-rules create con el indicador --allow establecido en tcp:22 .

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

      Reemplace lo siguiente:

      • FIREWALL_RULE_NAME : el nombre de la regla de firewall.

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que creó en los pasos anteriores.

API

  1. Para crear una red VPC para el plano de datos, siga estos pasos:

    1. Cree una red de VPC con una subred creada manualmente realizando una solicitud POST al método networks.insert con el campo autoCreateSubnetworks establecido en false .

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

      Reemplace lo siguiente:

      • PROJECT_ID : el ID del proyecto actual.

      • DATA_PLANE_NETWORK_NAME : el nombre de la red para el plano de datos.

      • MTU : la unidad máxima de transmisión (MTU), que es el tamaño de paquete más grande de la red. El valor debe estar entre 1300 y 8896 . El valor predeterminado es 1460 . Antes de configurar la MTU en un valor superior a 1460 , consulte Unidad de transmisión máxima .

    2. Cree una subred para la red del plano de datos de VPC realizando una solicitud POST al método 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"
      }
      

      Reemplace lo siguiente:

      • PROJECT_ID : el ID del proyecto donde se encuentra la red del plano de datos.

      • REGION : la región donde desea crear la subred.

      • DATA_PRIMARY_RANGE : el rango de IPv4 principal para la nueva subred en notación CIDR.

      • DATA_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de datos que creó en el paso anterior.

      • DATA_PLANE_NETWORK_NAME : el nombre de la red del plano de datos que creó en el paso anterior.

  2. Para crear una red VPC para el plano de control con una regla de firewall que permita el ingreso de SSH a la VM, siga estos pasos:

    1. Cree una red de VPC con una subred creada manualmente realizando una solicitud POST al método networks.insert con el campo autoCreateSubnetworks establecido en false .

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

      Reemplace lo siguiente:

      • PROJECT_ID : el ID del proyecto actual.

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red para el plano de control.

      • MTU : la MTU, que es el tamaño de paquete más grande de la red. El valor debe estar entre 1300 y 8896 . El valor predeterminado es 1460 . Antes de configurar la MTU en un valor superior a 1460 , consulte Unidad de transmisión máxima .

    2. Cree una subred para la red de control de datos de VPC realizando una solicitud POST al método 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"
      }
      

      Reemplace lo siguiente:

      • PROJECT_ID : el ID del proyecto donde se encuentra la red del plano de control.

      • REGION : la región donde desea crear la subred.

      • CONTROL_PRIMARY_RANGE : el rango de IPv4 principal para la nueva subred en notación CIDR.

      • CONTROL_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control que creó en el paso anterior.

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que creó en el paso anterior.

    3. Cree una regla de firewall de VPC que permita el acceso SSH a la red del plano de control realizando una solicitud POST al método firewalls.insert . En la solicitud, configure el campo IPProtocol en tcp y el campo ports en 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"
      }
      

      Reemplace lo siguiente:

      • PROJECT_ID : el ID del proyecto donde se encuentra la red del plano de control.

      • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que creó en los pasos anteriores.

Para obtener más opciones de configuración al crear una red VPC, consulte Crear y administrar redes VPC .

Cree una VM que utilice las redes VPC para DPDK

Cree una máquina virtual que habilite gVNIC o virtIO-Net en las dos redes de VPC que creó anteriormente usando la consola de Google Cloud, la CLI de gcloud y la API de Compute Engine.

Recomendado: Especifique Ubuntu LTS o Ubuntu Pro como imagen del sistema operativo debido a que su administrador de paquetes admite controladores UIO y VFIO sin IOMMU. Si no desea especificar ninguno de estos sistemas operativos, se recomienda especificar Debian 11 o posterior para un procesamiento de paquetes más rápido.

Consola

Cree una VM que utilice las dos subredes de red VPC que creó en los pasos anteriores haciendo lo siguiente:

  1. En la consola de Google Cloud, vaya a Instancias de VM .

    Ir a instancias de VM

    Se abre la página de instancias de VM .

  2. Haga clic Crear instancia .

    Se abre la página Crear una instancia .

  3. En el campo Nombre , ingrese un nombre para su VM.

  4. En el menú Región , seleccione la misma región donde creó sus redes en los pasos anteriores.

  5. En el menú Zona , seleccione una zona para su VM.

  6. En la sección Configuración de la máquina , haga lo siguiente:

    1. Seleccione una de las siguientes opciones:

      • Para cargas de trabajo comunes, seleccione la pestaña Propósito general (predeterminada).

      • Para cargas de trabajo que requieren un alto rendimiento, seleccione la pestaña Compute optimizado .

      • Para cargas de trabajo con proporciones altas de memoria a vCPU, seleccione la pestaña Memoria optimizada .

      • Para cargas de trabajo que utilizan unidades de procesamiento de gráficos (GPU), seleccione la pestaña GPU .

    2. Opcional. Si especificó GPU en el paso anterior y desea cambiar la GPU para conectarla a la VM, realice una o más de las siguientes acciones:

      1. En el menú de tipo de GPU , seleccione un tipo de GPU.

      2. En el menú Número de GPU , seleccione la cantidad de GPU.

    3. En el menú Serie , seleccione una serie de máquinas.

    4. En el menú Tipo de máquina , seleccione un tipo de máquina.

    5. Opcional: expanda Configuraciones avanzadas y siga las instrucciones para personalizar aún más la máquina para esta VM.

  7. Opcional: en la sección Disco de arranque , haga clic en Cambiar y luego siga las indicaciones para cambiar la imagen del disco.

  8. Expanda la sección Opciones avanzadas .

  9. Expanda la sección Redes .

  10. En la sección Configuración de rendimiento de la red , haga lo siguiente:

    1. En el menú Tarjeta de interfaz de red , seleccione una de las siguientes opciones:

      • Para usar gVNIC, seleccione gVNIC .

      • Para utilizar VirtIO-Net, seleccione VirtIO .

    2. Opcional: para obtener un mayor rendimiento de la red y una latencia reducida, seleccione la casilla de verificación Habilitar redes de nivel 1 .

  11. En la sección Interfaces de red , haga lo siguiente:

    1. En la fila predeterminada , haga clic en Eliminar elemento "predeterminado" .

    2. Haga clic en Agregar interfaz de red .

      Aparece la sección Nueva interfaz de red .

    3. En el menú Red , seleccione la red del plano de control que creó en los pasos anteriores.

    4. Haga clic en Listo .

    5. Haga clic en Agregar interfaz de red nuevamente.

      Aparece la sección Nueva interfaz de red .

    6. En el menú Red , seleccione la red del plano de datos que creó en los pasos anteriores.

    7. Haga clic en Listo .

  12. Haga clic en Crear .

    Se abre la página de instancias de VM . Puede pasar hasta un minuto antes de que se complete la creación de la VM.

nube de gcloud

Cree una máquina virtual que use las dos subredes de red de VPC que creó en los pasos anteriores mediante el comando gcloud compute instances create con las siguientes marcas:

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

Reemplace lo siguiente:

  • VM_NAME : el nombre de la VM.

  • IMAGE_FAMILY : la familia de imágenes para el sistema operativo con el que se inicializará el disco de arranque. Alternativamente, puede especificar el indicador --image= IMAGE y reemplazar IMAGE con una versión específica de una imagen. Aprenda a ver una lista de imágenes disponibles en el proyecto de imágenes de Compute Engine.

  • IMAGE_PROJECT : el nombre del proyecto de imagen que contiene la imagen del disco.

  • MACHINE_TYPE : un tipo de máquina, predefinida o personalizada , para la VM.

  • VNIC_TYPE : el tipo de vNIC que se utilizará para las redes del plano de control y del plano de datos. El valor debe ser uno de los siguientes:

    • Para utilizar gVNIC, especifique GVNIC .

    • Para utilizar VirtIO-Net, especifique VIRTIO_NET .

  • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que creó en los pasos anteriores.

  • CONTROL_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control que creó en los pasos anteriores.

  • DATA_PLANE_NETWORK_NAME : el nombre de la red del plano de datos que creó en los pasos anteriores.

  • DATA_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control que creó automáticamente en los pasos anteriores.

  • ZONE : la zona donde crear la VM. Especifique una zona dentro de la misma región de la subred que creó en los pasos anteriores.

Por ejemplo, para crear una máquina virtual denominada dpdk-vm en la zona us-central1-a a que especifica un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 vCPU, redes Tier_1 y una red de plano de datos y de plano de control que usan gVNIC, ejecute el siguiente 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

Cree una VM que utilice las dos subredes de red de VPC que creó en los pasos anteriores realizando una solicitud POST al método instances.insert con los siguientes campos:

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

Reemplace lo siguiente:

  • PROJECT_ID : el ID del proyecto donde se encuentran la red VPC del plano de control y la red VPC del plano de datos.

  • ZONE : la zona donde crear la VM.

  • VM_NAME : el nombre de la VM.

  • MACHINE_TYPE : un tipo de máquina, predefinida o personalizada , para la VM.

  • IMAGE_PROJECT : el nombre del proyecto de imagen que contiene la imagen del disco.

  • IMAGE_FAMILY : la familia de imágenes para el sistema operativo con el que se inicializará el disco de arranque. Alternativamente, puede especificar una versión específica de una imagen. Aprenda a ver una lista de imágenes en el proyecto de imágenes de Compute Engine.

  • CONTROL_PLANE_NETWORK_NAME : el nombre de la red del plano de control que creó en los pasos anteriores.

  • REGION : la región donde existen las subredes de las redes del plano de control y del plano de datos.

  • CONTROL_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control que creó en los pasos anteriores.

  • VNIC_TYPE : el tipo de vNIC que se utilizará para las redes del plano de control y del plano de datos. El valor debe ser uno de los siguientes:

    • Para utilizar gVNIC, especifique GVNIC .

    • Para utilizar VirtIO-Net, especifique VIRTIO_NET .

  • DATA_PLANE_NETWORK_NAME : el nombre de la red del plano de datos que creó en los pasos anteriores.

  • DATA_PLANE_SUBNET_NAME : el nombre de la subred para la red del plano de control que creó en los pasos anteriores.

Por ejemplo, para crear una máquina virtual denominada dpdk-vm en la zona us-central1-a a que especifica un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 vCPU, redes de nivel 1 y una red de plano de datos y de plano de control que usan gVNIC, realice la siguiente solicitud 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"
  }
}

Para obtener más opciones de configuración al crear una VM, consulte Crear e iniciar una instancia de VM .

Instale DPDK en su máquina virtual

Para instalar DPDK en su VM, siga estos pasos:

  1. Conéctese a la VM que creó en la sección anterior usando SSH .

  2. Configure las dependencias para la instalación de 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. Instalar DPDK:

    wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz
    tar xvf dpdk-23.07.tar.xz
    cd dpdk-23.07
    
  4. Para construir DPDK con los ejemplos:

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

Instalar controlador

Para preparar DPDK para ejecutarse en un controlador, instale el controlador seleccionando uno de los siguientes métodos:

Instalar un VFIO sin IOMMU

Para instalar el controlador VFIO sin IOMMU, siga estos pasos:

  1. Compruebe si VFIO está habilitado:

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

    Si VFIO no está habilitado, siga los pasos en Instalar UIO .

  2. Habilite el modo No-IOMMU en VFIO:

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

Instalar UIO

Para instalar el controlador UIO en DPDK, seleccione uno de los siguientes métodos:

Instalar UIO usando git

Para instalar el controlador UIO en DPDK usando git , siga estos pasos:

  1. Clona el repositorio git igb_uio en un disco en tu VM:

    git clone https://dpdk.org/git/dpdk-kmods
    
  2. Desde el directorio principal del repositorio git clonado, cree el módulo e instale el controlador UIO en DPDK:

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

Instale UIO usando paquetes de Linux

Para instalar el controlador UIO en DPDK usando paquetes de Linux, siga estos pasos:

  1. Instale el paquete dpdk-igb-uio-dkms :

    sudo apt-get install -y dpdk-igb-uio-dkms
    
  2. Instale el controlador UIO en DPDK:

    sudo modprobe igb_uio
    

Vincule DPDK a un controlador y pruébelo

Para vincular DPDK al controlador que instaló en la sección anterior, siga estos pasos:

  1. Obtenga el número de ranura de Interconexión de componentes periféricos (PCI) para la interfaz de red actual:

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

    Por ejemplo, si la máquina virtual utiliza ens4 como interfaz de red, el número de ranura PCI es 00:04.0 .

  2. Detenga la interfaz de red conectada al adaptador de red:

    sudo ip link set NETWORK_INTERFACE_NAME down
    

    Reemplace NETWORK_INTERFACE_NAME con el nombre de la interfaz de red especificada en las redes de VPC. Para ver qué interfaz de red está usando la VM, vea la configuración de la interfaz de red:

    sudo ifconfig
    
  3. Vincule DPDK al controlador:

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

    Reemplace lo siguiente:

    • DRIVER : el controlador al que vincular DPDK. Especifique uno de los siguientes valores:

      • Controlador UIO: igb_uio

      • Controlador VFIO sin IOMMU: vfio-pci

    • PCI_SLOT_NUMBER : el número de ranura PCI de la interfaz de red actual formateada como 00:0 NUMBER .0 .

  4. Cree el directorio /mnt/huge y luego cree algunas páginas enormes para que DPDK las use como buffers:

    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. Pruebe que DPDK puede usar la interfaz de red que creó en los pasos anteriores ejecutando la aplicación de ejemplo testpmd que se incluye con las bibliotecas DPDK:

    sudo ./build/app/dpdk-testpmd
    

    Para obtener más información sobre cómo probar DPDK, consulte Opciones de línea de comandos de Testpmd .

Desvincular DPDK

Después de usar DPDK, puede desvincularlo del controlador que instaló en la sección anterior. Para desvincular DPDK, siga estos pasos:

  1. Desvincular DPDK del controlador:

    sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
    

    Reemplace PCI_SLOT_NUMBER con el número de ranura PCI que especificó en los pasos anteriores. Si desea verificar el número de ranura PCI para la interfaz de red actual:

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

    Por ejemplo, si la máquina virtual utiliza ens4 como interfaz de red, el número de ranura PCI es 00:04.0 .

  2. Vuelva a cargar el controlador de red de Compute Engine:

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

    Reemplace lo siguiente:

    • PCI_SLOT_NUMBER : el número de ranura PCI que especificó en los pasos anteriores.

    • VNIC_DIRECTORY : el directorio de la vNIC. Según el tipo de vNIC que esté utilizando, especifique uno de los siguientes valores:

      • gVNIC: gvnic

      • VirtIO-Net: virtio-pci

    • NETWORK_INTERFACE_NAME : el nombre de la interfaz de red que especificó en la sección anterior.

¿Qué sigue?