En este documento se explica cómo habilitar el Data Plane Development Kit (DPDK) en una instancia de máquina virtual para acelerar el procesamiento de paquetes de red.
DPDK es un framework para aplicaciones que requieren un rendimiento intensivo, un procesamiento rápido de paquetes, una latencia baja y un rendimiento constante. DPDK proporciona un conjunto de bibliotecas de plano de datos y un controlador de interfaz de red (NIC) que eluden la red del kernel y se ejecutan directamente en el espacio de usuario. Por ejemplo, habilitar DPDK en tu máquina virtual es útil cuando ejecutas lo siguiente:
Despliegues de virtualización de funciones de red (NFV)
Aplicaciones de redes definidas por software (SDN)
Aplicaciones de streaming de vídeo o de voz sobre IP
Puedes ejecutar DPDK en una máquina virtual que use uno de los siguientes tipos de NIC virtual (vNIC):
Recomendación: gVNIC
Una interfaz de red virtual de alto rendimiento, segura y escalable diseñada específicamente para Compute Engine que sustituye a virtIO como vNIC de nueva generación.
-
Un controlador Ethernet de código abierto que permite a las máquinas virtuales acceder de forma eficiente a hardware físico, como almacenamiento en bloques y adaptadores de red.
Uno de los problemas de ejecutar DPDK en un entorno virtual, en lugar de en hardware físico, es que los entornos virtuales no admiten SR-IOV ni 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 invitadas en lugar de direcciones virtuales de host mediante uno de los siguientes controladores:
Antes de empezar
-
Si aún no lo has hecho, configura la autenticación.
La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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
-
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
- Set a default region and zone.
REST
Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .
Requisitos
Cuando crees una VM para ejecutar DPDK, asegúrate de lo siguiente:
Para evitar la falta de conectividad de red al ejecutar tus aplicaciones, usa dos redes de nube privada virtual:
Una red de VPC para el plano de control
Una red de VPC para el plano de datos
Ambas redes de VPC deben especificar lo siguiente:
Una subred con un intervalo de direcciones IP único
La misma región para sus subredes
El mismo tipo de VNIC: gVNIC o VirtIO-Net
Al crear la VM:
Debes especificar la misma región que las subredes de las dos redes VPC.
Debes especificar el tipo de vNIC que quieras usar con DPDK.
Debes especificar una serie de máquinas admitida para gVNIC o VirtIO-Net.
Restricciones
Ejecutar DPDK en una máquina virtual tiene las siguientes restricciones:
Solo puedes usar subredes de pila única para las dos redes de VPC que se usan en la VM.
Si usas gVNIC como tipo de vNIC para las dos redes de VPC, asegúrate de lo siguiente:
Debes usar la versión 22.11 de DPDK o una posterior.
Solo puedes usar imágenes de disco admitidas.
Si quieres habilitar el rendimiento de red de Tier_1 por VM para obtener un mayor rendimiento de red al crear la VM, debes especificar lo siguiente:
gVNIC como tipo de vNIC
Un tipo de máquina compatible con 30 vCPUs o más
Descripción general de las funciones y versiones de DPDK
Google recomienda usar la versión más reciente del controlador DPDK para beneficiarse de las últimas funciones y correcciones de errores. En la siguiente lista se ofrece un resumen de lo que está disponible en cada versión del controlador DPDK:
- 24.07
- Modificar la compatibilidad con el tamaño del anillo (para todos los tipos de máquina admitidos).
- Asistencia para procesos secundarios.
- 24.03
- Compatibilidad con RSS (para todos los tipos de máquinas admitidos).
- 23.11
- Compatibilidad con el tamaño del búfer RX (para todos los tipos de máquinas admitidos).
- Compatibilidad con tramas gigantes (9 K) para tipos de máquinas de tercera generación y versiones posteriores.
- 23:07
- Se ha añadido compatibilidad con los tipos de máquinas de tercera generación y posteriores.
- Compatibilidad con tramas gigantes (9 K) para tipos de máquinas de primera y segunda generación.
- 23.03
Compatibilidad con estadísticas de informes:
- Estadísticas de software de todos los tipos de máquinas admitidos.
- Estadísticas de hardware de los tipos de máquinas de primera y segunda generación.
- 22.11
- Versión inicial del controlador con compatibilidad para tipos de máquina de primera y segunda generación.
Configurar una máquina virtual para ejecutar DPDK
En esta sección se explica cómo crear una VM para ejecutar DPDK.
Crear las redes de VPC
Crea dos redes de VPC, una para el plano de datos y otra para el plano de control, con la Google Cloud consola, la CLI de Google Cloud o la API de Compute Engine. Puede especificar estas redes más adelante al crear la VM.
Consola
Crea una red de VPC para el plano de datos:
En la Google Cloud consola, ve a Redes de VPC.
Se abrirá la página Redes de VPC.
Haz clic en
Crear red VPC.Se abrirá la página Crear una red VPC.
En el campo Nombre, introduce un nombre para tu red.
En la sección Nueva subred, haga lo siguiente:
En el campo Name (Nombre), introduce un nombre para la subred.
En el menú Región, selecciona una región para tu subred.
Selecciona IPv4 (pila única) (opción predeterminada).
En Intervalo de IPv4, introduce una dirección de intervalo de IPv4 válida en notación CIDR.
Haz clic en Listo.
Haz clic en Crear.
Se abrirá la página Redes de VPC. La creación de la red VPC puede tardar hasta un minuto en completarse.
Crea una red de VPC para el plano de control con una regla de cortafuegos que permita las conexiones SSH a la VM:
Vuelve a hacer clic en
Crear red VPC.Se abrirá la página Crear una red VPC.
En el campo Nombre, introduce un nombre para tu red.
En la sección Nueva subred, haga lo siguiente:
En el campo Nombre, escribe el nombre de la subred.
En el menú Región, selecciona la misma región que especificaste para la subred de la red del plano de datos.
Selecciona IPv4 (pila única) (opción predeterminada).
En Intervalo de IPv4, introduce una dirección de intervalo de IPv4 válida en notación CIDR.
Haz clic en Listo.
En la pestaña Reglas de cortafuegos IPv4, selecciona la casilla NETWORK_NAME-allow-ssh.
Donde NETWORK_NAME es el nombre de la red que has especificado en los pasos anteriores.
Haz clic en Crear.
Se abrirá la página Redes de VPC. La creación de la red VPC puede tardar hasta un minuto en completarse.
gcloud
Para crear una red de VPC para el plano de datos, sigue estos pasos:
Crea una red VPC con una subred creada manualmente mediante el comando
gcloud compute networks create
con la marca--subnet-mode
definida comocustom
.gcloud compute networks create DATA_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
Haz los cambios siguientes:
DATA_PLANE_NETWORK_NAME
: nombre de la red de VPC del plano de datos.MTU
: unidad máxima de transmisión (MTU), que es el tamaño de paquete más grande de la red. El valor debe estar comprendido entre1300
y8896
. El valor predeterminado es1460
. Antes de asignar a la MTU un valor superior a1460
, consulta Unidad máxima de transmisión.
Crea una subred para la red de plano de datos de la VPC que acabas de crear con 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
Haz los cambios siguientes:
DATA_PLANE_SUBNET_NAME
: nombre de la subred de la red del plano de datos.DATA_PLANE_NETWORK_NAME
: el nombre de la red del plano de datos que has especificado en los pasos anteriores.DATA_PRIMARY_RANGE
: a intervalo IPv4 válido para la subred en notación CIDR.REGION
: la región en la que se creará la subred.
Para crear una red de VPC para el plano de control con una regla de cortafuegos que permita las conexiones SSH a la VM, sigue estos pasos:
Crea una red VPC con una subred creada manualmente mediante el comando
gcloud compute networks create
con la marca--subnet-mode
definida comocustom
.gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
Haz los cambios siguientes:
CONTROL_PLANE_NETWORK_NAME
: nombre de la red de VPC del plano de control.MTU
: la MTU, que es el tamaño de paquete más grande de la red. El valor debe estar comprendido entre1300
y8896
. El valor predeterminado es1460
. Antes de definir la MTU en un valor superior a1460
, consulta Unidad máxima de transmisión.
Crea una subred para la red del plano de control de la VPC que acabas de crear con 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
Haz los cambios siguientes:
CONTROL_PLANE_SUBNET_NAME
: nombre de la subred de la red del plano de control.CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control que has especificado en los pasos anteriores.CONTROL_PRIMARY_RANGE
: a intervalo IPv4 válido para la subred en notación CIDR.REGION
: la región en la que se va a crear la subred, que debe coincidir con la región que hayas especificado en la subred de la red del plano de datos.
Crea una regla de cortafuegos de VPC que permita las conexiones SSH a la red del plano de control mediante el comando
gcloud compute firewall-rules create
con la marca--allow
definida comotcp:22
.gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --action=allow \ --network=CONTROL_PLANE_NETWORK_NAME \ --rules=tcp:22
Haz los cambios siguientes:
FIREWALL_RULE_NAME
: el nombre de la regla del cortafuegos.CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control que has creado en los pasos anteriores.
API
Para crear una red de VPC para el plano de datos, sigue estos pasos:
Crea una red de VPC con una subred creada manualmente enviando una solicitud
POST
al métodonetworks.insert
con el campoautoCreateSubnetworks
definido comofalse
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "DATA_PLANE_NETWORK_NAME", "mtu": MTU }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto actual.DATA_PLANE_NETWORK_NAME
: nombre de la red del plano de datos.MTU
: unidad máxima de transmisión (MTU), que es el tamaño de paquete más grande de la red. El valor debe estar comprendido entre1300
y8896
. El valor predeterminado es1460
. Antes de asignar a la MTU un valor superior a1460
, consulta Unidad máxima de transmisión.
Crea una subred para la red del plano de datos de la VPC haciendo una solicitud
POST
al métodosubnetworks.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" }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se encuentra la red del plano de datos.REGION
: la región en la que quieras crear la subred.DATA_PRIMARY_RANGE
: el intervalo IPv4 principal de la nueva subred en notación CIDR.DATA_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de datos que has creado en el paso anterior.DATA_PLANE_NETWORK_NAME
: el nombre de la red del plano de datos que has creado en el paso anterior.
Para crear una red de VPC para el plano de control con una regla de cortafuegos que permita las conexiones SSH a la VM, sigue estos pasos:
Crea una red de VPC con una subred creada manualmente enviando una solicitud
POST
al métodonetworks.insert
con el campoautoCreateSubnetworks
definido comofalse
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "CONTROL_PLANE_NETWORK_NAME", "mtu": MTU }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto actual.CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control.MTU
: la MTU, que es el tamaño de paquete más grande de la red. El valor debe estar comprendido entre1300
y8896
. El valor predeterminado es1460
. Antes de definir la MTU en un valor superior a1460
, consulta Unidad máxima de transmisión.
Crea una subred para la red de control de datos de la VPC haciendo una solicitud
POST
al métodosubnetworks.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" }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se encuentra la red del plano de control.REGION
: la región en la que quieras crear la subred.CONTROL_PRIMARY_RANGE
: el intervalo IPv4 principal de la nueva subred en notación CIDR.CONTROL_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de control que has creado en el paso anterior.CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control que has creado en el paso anterior.
Crea una regla de cortafuegos de VPC que permita las conexiones SSH a la red del plano de control haciendo una solicitud
POST
al métodofirewalls.insert
. En la solicitud, asigna el valortcp
al campoIPProtocol
y el valor22
al campoports
.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" }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se encuentra la red del plano de control.CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control que has creado en los pasos anteriores.
Para ver más opciones de configuración al crear una red VPC, consulta Crear y gestionar redes VPC.
Crear una VM que use las redes VPC para DPDK
Crea una VM que habilite gVNIC o virtIO-Net en las dos redes VPC que has creado anteriormente mediante la Google Cloud consola, la CLI de gcloud y la API de Compute Engine.
Recomendación: Especifica Ubuntu LTS o Ubuntu Pro como imagen del sistema operativo, ya que su gestor de paquetes es compatible con los controladores UIO y VFIO sin IOMMU. Si no quieres especificar ninguno de estos sistemas operativos, te recomendamos que indiques Debian 11 o versiones posteriores para que el procesamiento de paquetes sea más rápido.
Consola
Crea una VM que use las dos subredes de la red VPC que has creado en los pasos anteriores. Para ello, haz lo siguiente:
En la Google Cloud consola, ve a Instancias de VM.
Se abrirá la página Instancias de VM.
Haz clic en
Crear instancia.Se abrirá la página Crear una instancia.
En el campo Nombre, introduce un nombre para la máquina virtual.
En el menú Región, selecciona la misma región en la que has creado tus redes en los pasos anteriores.
En el menú Zona, selecciona una zona para tu VM.
En la sección Configuración de la máquina, haga lo siguiente:
Selecciona una de las opciones siguientes:
Para las cargas de trabajo habituales, selecciona la pestaña Uso general (opción predeterminada).
Para cargas de trabajo que requieran un alto rendimiento, selecciona la pestaña Optimizado para la computación.
Para cargas de trabajo con una proporción alta de memoria por vCPUs, selecciona la pestaña Memoria optimizada.
En el caso de las cargas de trabajo que usan unidades de procesamiento gráfico (GPUs), selecciona la pestaña GPUs.
Opcional. Si has especificado GPUs en el paso anterior y quieres cambiar la GPU que se va a asociar a la VM, haz una o varias de las siguientes acciones:
En el menú Tipo de GPU, selecciona un tipo de GPU.
En el menú Número de GPUs, selecciona el número de GPUs.
En el menú Serie, selecciona una serie de máquinas.
En el menú Tipo de máquina, selecciona un tipo de máquina.
Opcional: Expande Configuraciones avanzadas y sigue las indicaciones para personalizar aún más la máquina de esta VM.
Opcional: En la sección Disco de arranque, haz clic en Cambiar y, a continuación, sigue las indicaciones para cambiar la imagen del disco.
Expande la sección Opciones avanzadas.
Despliega la sección Redes.
En la sección Configuración del rendimiento de red, haga lo siguiente:
En el menú Tarjeta de interfaz de red, selecciona una de las siguientes opciones:
Para usar gVNIC, selecciona gVNIC.
Para usar VirtIO-Net, selecciona VirtIO.
Opcional: Para mejorar el rendimiento de la red y reducir la latencia, marca la casilla Habilitar red de nivel 1.
En la sección Interfaces de red, haga lo siguiente:
En la fila predeterminado, haz clic en
Eliminar elemento "predeterminado".Haz clic en Añadir interfaz de red.
Aparecerá la sección Nueva interfaz de red.
En el menú Red, selecciona la red del plano de control que has creado en los pasos anteriores.
Haz clic en Listo.
Vuelve a hacer clic en Añadir interfaz de red.
Aparecerá la sección Nueva interfaz de red.
En el menú Red, selecciona la red de plano de datos que has creado en los pasos anteriores.
Haz clic en Listo.
Haz clic en Crear.
Se abrirá la página Instancias de VM. La creación de la máquina virtual puede tardar hasta un minuto en completarse.
gcloud
Crea una VM que use las dos subredes de la red VPC que has creado en los pasos anteriores. Para ello, usa 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
Haz los cambios siguientes:
VM_NAME
: el nombre de la VM.IMAGE_FAMILY
: la familia de imágenes del sistema operativo con el que se inicializará el disco de arranque. También puedes especificar la marca--image=IMAGE
y sustituirIMAGE
por una versión específica de una imagen. Consulta cómo 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 de disco.MACHINE_TYPE
: un tipo de máquina, predefinido o personalizado, para la VM.VNIC_TYPE
: el tipo de vNIC que se va a usar en las redes del plano de control y del plano de datos. El valor debe ser uno de los siguientes:Para usar gVNIC, especifica
GVNIC
.Para usar VirtIO-Net, especifica
VIRTIO_NET
.
CONTROL_PLANE_NETWORK_NAME
: el nombre de la red del plano de control que has creado en los pasos anteriores.CONTROL_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de control que has creado en los pasos anteriores.DATA_PLANE_NETWORK_NAME
: el nombre de la red del plano de datos que has creado en los pasos anteriores.DATA_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de control que has creado automáticamente en los pasos anteriores.ZONE
: la zona en la que se creará la VM. Especifica una zona en la misma región de la subred que has creado en los pasos anteriores.
Por ejemplo, para crear una VM llamada
dpdk-vm
en la zonaus-central1-a
que especifique un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 vCPUs, una red Tier_1 y una red de plano de datos y otra de plano de control que usen gVNIC, ejecuta 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
Crea una VM que use las dos subredes de la red VPC que has creado en los pasos anteriores. Para ello, envía una solicitud
POST
al métodoinstances.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" } ] }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se encuentran la red de VPC del plano de control y la red de VPC del plano de datos.ZONE
: la zona en la que se creará la VM.VM_NAME
: el nombre de la VM.MACHINE_TYPE
: un tipo de máquina, predefinido o personalizado, para la VM.IMAGE_PROJECT
: el nombre del proyecto de imagen que contiene la imagen de disco.IMAGE_FAMILY
: la familia de imágenes del sistema operativo con el que se inicializará el disco de arranque. También puedes especificar una versión concreta de una imagen. Consulta cómo 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 has creado en los pasos anteriores.REGION
: la región en la que se encuentran las subredes de las redes del plano de control y del plano de datos.CONTROL_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de control que has creado en los pasos anteriores.VNIC_TYPE
: el tipo de vNIC que se va a usar en las redes del plano de control y del plano de datos. El valor debe ser uno de los siguientes:Para usar gVNIC, especifica
GVNIC
.Para usar VirtIO-Net, especifica
VIRTIO_NET
.
DATA_PLANE_NETWORK_NAME
: el nombre de la red del plano de datos que has creado en los pasos anteriores.DATA_PLANE_SUBNET_NAME
: el nombre de la subred de la red del plano de control que has creado en los pasos anteriores.
Por ejemplo, para crear una VM llamada
dpdk-vm
en la zonaus-central1-a
que especifique un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 vCPUs, una red de nivel 1 y una red de plano de datos y otra de plano de control que usen gVNIC, haz la siguiente solicitudPOST
: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 ver más opciones de configuración al crear una VM, consulta Crear e iniciar una instancia de VM.
Instalar DPDK en una máquina virtual
Para instalar DPDK en tu VM, sigue estos pasos:
Conéctate a la VM que has creado en la sección anterior mediante SSH.
Configura 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
Instala DPDK:
wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz tar xvf dpdk-23.07.tar.xz cd dpdk-23.07
Para compilar DPDK con los ejemplos, sigue estos pasos:
meson setup -Dexamples=all build sudo ninja -C build install; sudo ldconfig
Instalar controlador
Para preparar DPDK para que se ejecute en un controlador, instálalo seleccionando uno de los siguientes métodos:
Instalar un VFIO sin IOMMU
Para instalar el controlador VFIO sin IOMMU, sigue estos pasos:
Comprueba si VFIO está habilitado:
cat /boot/config-$(uname -r) | grep NOIOMMU
Si VFIO no está habilitado, sigue los pasos que se indican en Instalar UIO.
Habilita 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, selecciona uno de los siguientes métodos:
Instalar UIO con git
Para instalar el controlador UIO en DPDK mediante
git
, sigue estos pasos:Clona el
igb_uio
repositorio de Git en un disco de tu VM:git clone https://dpdk.org/git/dpdk-kmods
Desde el directorio principal del repositorio de Git clonado, compila el módulo e instala el controlador UIO en DPDK:
pushd dpdk-kmods/linux/igb_uio sudo make sudo depmod && sudo insmod igb_uio.ko popd
Instalar UIO con paquetes de Linux
Para instalar el controlador UIO en DPDK mediante paquetes de Linux, sigue estos pasos:
Instala el paquete
dpdk-igb-uio-dkms
:sudo apt-get install -y dpdk-igb-uio-dkms
Instala el controlador UIO en DPDK:
sudo modprobe igb_uio
Vincular DPDK a un controlador y probarlo
Para vincular DPDK al controlador que has instalado en la sección anterior, sigue estos pasos:
Obtén el número de ranura de Peripheral Component Interconnect (PCI) de la interfaz de red actual:
sudo lspci | grep -e "gVNIC" -e "Virtio network device"
Por ejemplo, si la VM usa
ens4
como interfaz de red, el número de ranura PCI es00:04.0
.Detén la interfaz de red conectada al adaptador de red:
sudo ip link set NETWORK_INTERFACE_NAME down
Sustituye
NETWORK_INTERFACE_NAME
por el nombre de la interfaz de red especificada en las redes de VPC. Para ver qué interfaz de red usa la VM, consulta la configuración de la interfaz de red:sudo ifconfig
Vincula DPDK al controlador:
sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
Haz los cambios siguientes:
DRIVER
: el controlador en el que se va a enlazar DPDK. Especifica uno de los siguientes valores:Controlador UIO:
igb_uio
Controlador VFIO sin IOMMU:
vfio-pci
PCI_SLOT_NUMBER
: número de ranura PCI de la interfaz de red actual con el formato00:0NUMBER.0
.
Crea el directorio
/mnt/huge
y, a continuación, crea algunas páginas enormes para que DPDK las use en los búferes: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'
Prueba que DPDK puede usar la interfaz de red que has creado en los pasos anteriores ejecutando la aplicación de ejemplo
testpmd
que se incluye con las bibliotecas de DPDK:sudo ./build/app/dpdk-testpmd
Para obtener más información sobre cómo probar DPDK, consulta Opciones de línea de comandos de Testpmd.
Desvincular DPDK
Después de usar DPDK, puedes desvincularlo del controlador que has instalado en la sección anterior. Para desvincular DPDK, sigue estos pasos:
Desvincula DPDK del controlador:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
Sustituye
PCI_SLOT_NUMBER
por el número de ranura PCI que has especificado en los pasos anteriores. Si quieres verificar el número de ranura PCI de la interfaz de red actual, sigue estos pasos:sudo lspci | grep -e "gVNIC" -e "Virtio network device"
Por ejemplo, si la VM usa
ens4
como interfaz de red, el número de ranura PCI es00:04.0
.Vuelve 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
Haz los cambios siguientes:
PCI_SLOT_NUMBER
: el número de ranura PCI que has especificado en los pasos anteriores.VNIC_DIRECTORY
: el directorio de la vNIC. En función del tipo de vNIC que utilices, especifica uno de los siguientes valores:gVNIC:
gvnic
VirtIO-Net:
virtio-pci
NETWORK_INTERFACE_NAME
: el nombre de la interfaz de red que has especificado en la sección anterior.
Siguientes pasos
Consulta las tarifas de ancho de banda de red de tu tipo de máquina.
Consulta más información sobre cómo crear y gestionar redes de VPC.
Consulta más información sobre los ajustes de MTU más altos con tramas jumbo.
Consulta más información sobre la optimización de TCP para mejorar el rendimiento de la red.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-12 (UTC).
-