Habilita el procesamiento de paquetes de red más rápido con DPDK
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En este documento, se explica cómo habilitar el Kit de desarrollo del plano de datos (DPDK) en una instancia de máquina virtual (VM) para acelerar el procesamiento de paquetes de red.
DPDK es un framework para aplicaciones de alto rendimiento que requieren un procesamiento de paquetes rápido, baja latencia y un rendimiento coherente. El 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 tu VM es útil cuando ejecutas lo siguiente:
Implementaciones de virtualización de funciones de red (NFV)
Aplicaciones de redes definidas por software (SDN)
Aplicaciones de transmisión de video por Internet o por voz sobre IP
Puedes ejecutar DPDK en una VM que use uno de los siguientes tipos de NIC virtuales (vNIC):
Una interfaz de red virtual, segura y de alto rendimiento, diseñada específicamente para Compute Engine y que tiene éxito con virtIO como la vNIC de nueva generación.
Un controlador de Ethernet de código abierto que permite a las VMs acceder a hardware físico de manera eficiente, como el almacenamiento en bloque y los adaptadores de red.
Un problema con la ejecución de 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 administración de memoria de E/S (IOMMU) para aplicaciones de alto rendimiento. Para superar esta limitación, debes ejecutar DPDK en direcciones físicas de invitado en lugar de direcciones virtuales de host con uno de los siguientes controladores:
Si aún no lo hiciste, configura la autenticación.
La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . 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
Instala Google Cloud CLI.
Después de la instalación,
inicializa Google Cloud CLI con el siguiente comando:
Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local,
debes usar las credenciales que proporciones a la gcloud CLI.
Para obtener más información, consulta
Autentícate para usar REST
en la documentación de 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 cuando ejecutes 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 rango de direcciones IP único
La misma región para sus subredes
El mismo tipo de VNIC, ya sea gVNIC o VirtIO-Net
Cuando crees la VM, haz lo siguiente:
Debes especificar la misma región que las subredes de las dos redes de VPC.
Debes especificar el tipo de vNIC que planeas usar con DPDK.
Si deseas habilitar el rendimiento de redes Tier_1 por VM para obtener un mayor rendimiento de la red cuando crees la VM, debes especificar lo siguiente:
Descripción general de las funciones y versiones de DPDK
Google recomienda usar la versión más reciente del controlador de DPDK para aprovechar las funciones y correcciones de errores más recientes. En la siguiente lista, se proporciona una descripción general de lo que está disponible con cada versión del controlador de DPDK:
24.07
Se modificó la compatibilidad con el tamaño del anillo (para todos los tipos de máquinas compatibles).
Se agregó compatibilidad con tipos de máquinas de tercera generación y posteriores.
Compatibilidad con marcos jumbo (9 K) para tipos de máquinas de primera y segunda generación
23.03
Compatibilidad con las estadísticas de informes:
Estadísticas de software para todos los tipos de máquinas compatibles.
Son estadísticas de hardware para los tipos de máquinas de primera y segunda generación.
22.11
Versión inicial del controlador con compatibilidad para tipos de máquinas de primera y segunda generación.
Configura una VM para ejecutar DPDK
En esta sección, se explica cómo crear una VM para ejecutar DPDK.
Crea las redes de VPC
Crea dos redes de VPC, una para el plano de datos y otra para el plano de control, con la consola de Google Cloud , Google Cloud CLI o la API de Compute Engine.
Puedes especificar estas redes más adelante cuando crees la VM.
Console
Crea una red de VPC para el plano de datos:
En la consola de Google Cloud , ve a Redes de VPC.
DATA_PLANE_NETWORK_NAME: el nombre de la red de VPC del plano de datos.
MTU: es la unidad de transmisión máxima (MTU), que es el tamaño de paquete más grande de la red. El valor debe ser de entre 1300 y 8896. El valor predeterminado es 1460. Antes de configurar la MTU en un valor superior a 1460, consulta la Unidad de transmisión máxima.
CONTROL_PLANE_NETWORK_NAME: el nombre de la red de VPC del plano de control.
MTU: Es la MTU, que es el tamaño de paquete más grande de la red. El valor debe ser de entre 1300 y 8896. El valor predeterminado es 1460. Antes de configurar la MTU en un valor superior a 1460, consulta la Unidad de transmisión máxima.
CONTROL_PLANE_SUBNET_NAME: Es el nombre de la subred de la red del plano de control.
CONTROL_PLANE_NETWORK_NAME: Es el nombre de la red del plano de control que especificaste en los pasos anteriores.
CONTROL_PRIMARY_RANGE: Un rango IPv4 válido para la subred en notación CIDR.
REGION: La región en la que se crea la subred, que debe coincidir con la región que especificaste en la subred de la red del plano de datos.
Crea una regla de firewall de VPC que permita conexiones SSH a la red del plano de control con el comando gcloud compute firewall-rules create con la marca --allow establecida en tcp:22.
FIREWALL_RULE_NAME: Es el nombre de la regla de firewall.
CONTROL_PLANE_NETWORK_NAME: Es el nombre de la red del plano de control que creaste 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 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
}
Reemplaza lo siguiente:
PROJECT_ID: el ID del proyecto del proyecto actual.
DATA_PLANE_NETWORK_NAME: el nombre de la red del plano de datos.
MTU: es la unidad de transmisión máxima (MTU), que es el tamaño de paquete más grande de la red. El valor debe ser de entre 1300 y 8896. El valor predeterminado es 1460. Antes de configurar la MTU en un valor superior a 1460, consulta la Unidad de transmisión máxima.
Crea una subred para la red del plano de datos de la 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"
}
Reemplaza lo siguiente:
PROJECT_ID: el ID del proyecto en el que se encuentra la red del plano de datos.
REGION: La región en la que deseas crear la subred.
DATA_PRIMARY_RANGE: El rango IPv4 principal para la subred nueva, en notación CIDR.
DATA_PLANE_SUBNET_NAME: Es el nombre de la subred de la red del plano de datos que creaste en el paso anterior.
DATA_PLANE_NETWORK_NAME: El nombre de la red del plano de datos que creaste en el paso anterior.
Para crear una red de VPC para el plano de control con una regla de firewall que permita conexiones SSH a la VM, sigue estos pasos:
Crea 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
}
Reemplaza lo siguiente:
PROJECT_ID: el ID del proyecto del proyecto actual.
CONTROL_PLANE_NETWORK_NAME: el nombre de la red del plano de control.
MTU: Es la MTU, que es el tamaño de paquete más grande de la red. El valor debe ser de entre 1300 y 8896. El valor predeterminado es 1460. Antes de configurar la MTU en un valor superior a 1460, consulta la Unidad de transmisión máxima.
Crea una subred para la red de control de datos de la 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"
}
Reemplaza lo siguiente:
PROJECT_ID: e ID del proyecto en el que se encuentra la red del plano de control.
REGION: La región en la que deseas crear la subred.
CONTROL_PRIMARY_RANGE: El rango IPv4 principal para la subred nueva, en notación CIDR.
CONTROL_PLANE_SUBNET_NAME: El nombre de la subred de la red del plano de control que creaste en el paso anterior.
CONTROL_PLANE_NETWORK_NAME: El nombre de la red del plano de control que creaste en el paso anterior.
Crea una regla de firewall de VPC que permita conexiones SSH a la red del plano de control con una solicitud POST al método firewalls.insert.
En la solicitud, configura el campo IPProtocol como tcp y el campo ports como 22.
Crea una VM que habilite gVNIC o virtIO-Net en las dos redes de VPC que creaste anteriormente con la Google Cloud consola,
gcloud CLI y la API de Compute Engine.
Recomendación: Especifica Ubuntu LTS o Ubuntu Pro como la imagen del sistema operativo debido a su compatibilidad con el administrador de paquetes para los controladores de UIO y VFIO sin IOMMU. Si no quieres especificar ninguno de estos sistemas operativos, te recomendamos que especifiques Debian 11 o versiones posteriores para un procesamiento de paquetes más rápido.
Console
Crea una VM que use las dos subredes de red de VPC que creaste en los pasos anteriores de la siguiente manera:
En la Google Cloud consola, ve a Instancias de VM.
En el menú Región, selecciona la misma región en la que creaste 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, haz lo siguiente:
Selecciona una de las opciones siguientes:
Para cargas de trabajo comunes, selecciona la pestaña Uso general (predeterminada).
Para cargas de trabajo de rendimiento intensivo, selecciona la pestaña Optimizado para procesamiento.
Para las cargas de trabajo de proporciones de memoria a CPU virtuales altas, selecciona la pestaña Memoria optimizada.
Para las cargas de trabajo que usan unidades de procesamiento de gráficos (GPU), selecciona la pestaña GPUs.
Opcional. Si especificaste GPUs en el paso anterior y deseas cambiar la GPU que se conectará a la VM, realiza una o más de las siguientes acciones:
En el menú Tipo de GPU, selecciona un tipo de GPU.
En el menú Cantidad de GPU, selecciona la cantidad.
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 Configuración avanzada 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, luego, sigue las instrucciones para cambiar la imagen de disco.
Expanda la sección Opciones avanzadas.
Expande la sección Herramientas de redes.
En la sección Configuración del rendimiento de la red, haz 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 obtener un mayor rendimiento de la red y reducir la latencia, selecciona la casilla de verificación Habilitar redes de nivel 1.
En la sección Interfaces de red, haz lo siguiente:
En la fila default, haz clic en deleteBorrar elemento "default".
Haz clic en Agregar interfaz de red.
Aparecerá la sección Nueva interfaz de red.
En el menú Red, selecciona la red del plano de control que creaste en los pasos anteriores.
Haz clic en Listo.
Vuelve a hacer clic en Agregar interfaz de red.
Aparecerá la sección Nueva interfaz de red.
En el menú Red, selecciona la red del plano de datos que creaste en los pasos anteriores.
Haz clic en Listo.
Haz clic en Crear.
Se abre la página Instancias de VM. La creación de la VM puede tardar hasta un minuto en completarse.
gcloud
Crea una VM que use las dos subredes de red de VPC que creaste en los pasos anteriores con el comando gcloud compute instances create con las siguientes marcas:
IMAGE_FAMILY: Es la familia de imágenes del sistema operativo con el que se inicializará el disco de arranque. Como alternativa, puedes especificar la marca --image=IMAGE y reemplazar IMAGE por una versión específica de una imagen. Obtén información para 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.
VNIC_TYPE: El tipo de vNIC que se usará para el plano de control y las redes 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 creaste en los pasos anteriores.
CONTROL_PLANE_SUBNET_NAME: Es el nombre de la subred para la red del plano de control que creaste en los pasos anteriores.
DATA_PLANE_NETWORK_NAME: Es el nombre de la red del plano de datos que creaste en los pasos anteriores.
DATA_PLANE_SUBNET_NAME: Es el nombre de la subred para la red del plano de control que creaste automáticamente en los pasos anteriores.
ZONE: La zona en la que se creará la VM. Especifica una zona dentro de la misma región de la subred que creaste en los pasos anteriores.
Por ejemplo, para crear una VM llamada dpdk-vm en la zona us-central1-a que especifica un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 CPUs virtuales, herramientas de redes de nivel 1 y datos de plano de control y una red del plano de control que usen gVNIC, ejecuta el siguiente comando:
Crea una VM que use las dos subredes de red de VPC que creaste en los pasos anteriores mediante una solicitud POST al método instances.insert con los siguientes campos:
IMAGE_PROJECT: El nombre del proyecto de imagen que contiene la imagen de disco.
IMAGE_FAMILY: Es la familia de imágenes del sistema operativo con el que se inicializará el disco de arranque. Como alternativa, puedes especificar una versión específica de una imagen. Obtén información para 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 creaste en los pasos anteriores.
REGION: Es la región en la que existen las subredes de las redes del plano de control y del plano de datos.
CONTROL_PLANE_SUBNET_NAME: Es el nombre de la subred para la red del plano de control que creaste en los pasos anteriores.
VNIC_TYPE: El tipo de vNIC que se usará para el plano de control y las redes 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: Es el nombre de la red del plano de datos que creaste en los pasos anteriores.
DATA_PLANE_SUBNET_NAME: Es el nombre de la subred para la red del plano de control que creaste en los pasos anteriores.
Por ejemplo, para crear una VM llamada dpdk-vm en la zona us-central1-a que especifica un disco persistente SSD de 512 GB, un tipo de máquina C2 predefinido con 60 CPUs virtuales, herramientas de redes de nivel 1 y datos plano y una red del plano de control que usen gVNIC, realiza la siguiente solicitud POST:
Por ejemplo, si la VM usa ens4 como interfaz de red, el número de ranura PCI es 00:04.0.
Detén la interfaz de red conectada al adaptador de red:
sudo ip link set NETWORK_INTERFACE_NAME down
Reemplaza 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=DRIVERPCI_SLOT_NUMBER
Reemplaza lo siguiente:
DRIVER: Es el controlador en el que se vinculará DPDK. Especifica uno de los siguientes valores:
Controlador de UIO: igb_uio
Controlador VFIO sin IOMMU: vfio-pci
PCI_SLOT_NUMBER: El número de ranura de PCI de la interfaz de red actual con formato 00:0NUMBER.0.
Crea el directorio /mnt/huge y, luego, crea algunas páginas grandes para que DPDK las use para los búferes:
Para probar que DPDK puede usar la interfaz de red que creaste en los pasos anteriores, ejecuta la aplicación de ejemplo testpmd que se incluye con las bibliotecas de DPDK:
Después de usar DPDK, puedes desvincularlo del controlador que instalaste en la sección anterior. Para desvincular DPDK, sigue estos pasos:
Desvincula el DPDK del controlador:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
Reemplaza PCI_SLOT_NUMBER por el número de ranura PCI que especificaste en los pasos anteriores. Si deseas verificar el número de ranura PCI de la interfaz de red actual, haz lo siguiente:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2026-03-12 (UTC)"],[],[]]