Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Data Plane Development Kit (DPDK) de Azure ofrece una plataforma más rápida de procesamiento de paquetes de espacio de usuario para aplicaciones de rendimiento intensivo. Esta plataforma omite la pila re red de kernel de la máquina virtual.
En un procesamiento normal de paquetes que use la pila de red de kernel, el proceso está controlado por interrupciones. Cuando la interfaz de red recibe paquetes entrantes, hay una interrupción del núcleo para procesar el paquete y un cambio de contexto del espacio del núcleo al espacio del usuario. DPDK elimina el cambio de contextos y el método controlado por interrupciones en favor de una implementación de espacio de usuario que usa controladores en modo sondeo para un rápido procesamiento de paquetes.
DPDK consta de conjuntos de bibliotecas de espacio de usuario que proporciona acceso a recursos de nivel inferior. Estos recursos pueden incluir hardware, núcleos lógicos, administración de memoria y controladores de modo de sondeo para las tarjetas de interfaz de red.
DPDK se puede ejecutar en máquinas virtuales de Azure que admitan varias distribuciones del sistema operativo. DPDK proporciona una diferenciación de rendimiento clave en la realización de implementaciones de virtualización de funciones de red. Estas implementaciones pueden adoptar la forma de aplicaciones virtuales de red, como enrutadores virtuales, firewalls, redes privadas virtuales, equilibradores de carga, núcleos de paquete evolucionados y aplicaciones de denegación de servicio.
Hay disponible una lista de instrucciones de configuración para DPDK en máquinas virtuales MANA aquí: Adaptador de red de Microsoft Azure (MANA) y DPDK en Linux
Ventaja
Más paquetes por segundo (PPS) : si se omite el kernel y se toma el control de los paquetes en el espacio del usuario se reduce el recuento de ciclos mediante la eliminación de los cambios de contexto. También mejora la tasa de paquetes que son procesados por segundo en las máquinas virtuales Linux de Azure.
Versiones mínimas de sistemas operativos compatibles.
Se admiten las siguientes distribuciones desde Azure Marketplace:
SO Linux | Versión del kernel |
---|---|
Ubuntu 18.04 | 4.15.0-1014-azure+ |
SLES 15 SP1 | 4.12.14-8.19-azure+ |
RHEL 7.5 | 3.10.0-862.11.6.el7.x86_64+ |
Debian 10 | 4.19.0-1-cloud+ |
Las versiones anotadas son los requisitos mínimos. También se admiten versiones más recientes.
Hay disponible una lista de instrucciones de configuración para DPDK en máquinas virtuales MANA aquí: Adaptador de red de Microsoft Azure (MANA) y DPDK en Linux
Compatibilidad de kernel personalizado
Para cualquier versión de kernel de Linux que no aparezca, consulte las revisiones para la compilación de un kernel de Linux adaptado a Azure. Para obtener más información, puede también ponerse en contacto con aznetdpdk@microsoft.com.
Regiones admitidas
Todas las regiones de Azure admiten DPDK.
Prerrequisitos
Se deben habilitar las redes aceleradas en una máquina virtual Linux. La máquina virtual debe tener al menos dos interfaces de red, con una interfaz para la administración. No se recomienda habilitar redes aceleradas en la interfaz de administración. Aprenda a crear una máquina virtual Linux con redes aceleradas habilitadas.
Además, DPDK usa verbos RDMA para crear colas de datos en el adaptador de red. En la máquina virtual, asegúrese de que se carguen los controladores de kernel RDMA correctos. Pueden ser mlx4_ib, mlx5_ib o mana_ib, en función de los tamaños de máquina virtual.
Instalación manual de DPDK (recomendado)
Las instrucciones de instalación de DPDK para máquinas virtuales MANA están disponibles aquí: Adaptador de red de Microsoft Azure (MANA) y DPDK en Linux
Instalación de dependencias de compilación
RHEL7.5
yum -y groupinstall "Infiniband Support"
sudo dracut --add-drivers "mlx4_en mlx4_ib mlx5_ib" -f
yum install -y gcc kernel-devel-`uname -r` numactl-devel.x86_64 librdmacm-devel libmnl-devel meson
Compilación e instalación de DPDK manualmente
Descargue la versión de DPDK más reciente. Se requiere la versión 22.11 LTS o posterior para Azure.
Cree la configuración predeterminada con
meson builddir
.Compile con
ninja -C builddir
.Instale con
DESTDIR=<output folder> ninja -C builddir install
.
Configuración del entorno de tiempo de ejecución
Después de reiniciar, ejecute los siguientes comandos una vez:
Macropáginas
- Configure la macropágina ejecutando el siguiente comando una vez para cada nodo NUMA:
echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
Cree un directorio para el montaje con
mkdir /mnt/huge
.Monte macropáginas con
mount -t hugetlbfs nodev /mnt/huge
.Compruebe que las macropáginas están reservadas con
grep Huge /proc/meminfo
.El ejemplo anterior es para páginas enormes 2M. También se pueden usar páginas enormes 1G.
Nota
Hay una manera de modificar el archivo GRUB para que las macropáginas se reserven en el arranque siguiendo las instrucciones de DPDK. Las instrucciones están en la parte inferior de la página. Cuando use una máquina virtual Linux de Azure, modifique en su lugar los archivos de /etc/config/grub.d para reservar las macropáginas en los reinicios.
Direcciones MAC e IP: use
ifconfig –a
para ver la dirección IP y MAC de las interfaces de red. La interfaz de red VF y la interfaz de red NETVSC tienen la misma dirección MAC, pero solo la interfaz de red NETVSC tiene una dirección IP. Las interfaces VF se ejecutan como interfaces subordinadas de las interfaces NETVSC.Direcciones PCI
Use
ethtool -i <vf interface name>
para averiguar qué dirección PCI usar paraethtool -i <vf interface name>
.Si eth0 tiene las redes aceleradas habilitadas, asegúrese de que testpmd no toma accidentalmente el control del dispositivo PCI de VF para eth0. Si la aplicación DPDK ha tomado accidentalmente el control de la interfaz de red de administración y provoca la pérdida de la conexión SSH, use la consola serie para detener la aplicación DPDK. También puede usar la consola serie para detener o iniciar la máquina virtual.
Cargue ibuverbs en cada reinicio con
modprobe -a ib_uverbs
. Solo para SLES 15, cargue también mlx4_ib conmodprobe -a mlx4_ib
.
PMD maestro
Las aplicaciones de DPDK se deben ejecutar sobre el PMD maestro que se expone en Azure. Si la aplicación se ejecuta directamente sobre el PMD de VF, no recibirá todos los paquetes destinados a la máquina virtual, ya que algunos paquetes se mostrarán sobre la interfaz sintética. DPDK admite dos tipos de PMD maestros: NetVSC PMD y PMD para notificaciones de error. Un PMD maestro garantiza que la aplicación reciba todos los paquetes destinados a ella. También se asegura de que la aplicación siga ejecutándose en modo DPDK sobre el PMD maestro, incluso si se revoca el VF cuando el host esté en mantenimiento.
NetVSC PMD
NetVSC es el PMD recomendado para ejecutarse como PMD maestro en Azure. Garantizará que la aplicación reciba todos los paquetes destinados a ella. También se asegura de que la aplicación sigue ejecutándose en modo DPDK, incluso si se revoca el VF cuando el host está en mantenimiento. Para obtener más información sobre cómo usar y configurar NetVSC PMD, consulte (https://doc.dpdk.org/guides/nics/netvsc.html).
PMD a prueba de errores
Nota: no se recomienda ejecutar con PMD de notificaciones por error en Azure. Si la versión de DPDK es 22.11 LTS o posterior, se recomienda usar NetVSC PMD.
Como alternativa, puede ejecutar una aplicación DPDK a través del PMD a prueba de errores. Para más información sobre PMD a prueba de errores, consulte la Biblioteca de controladores del modo de sondeo a prueba de errores.
Ejecutar testpmd
Use sudo
antes del comando sudo
para ejecutar testpmd en modo raíz.
Básico: comprobación de integridad, inicialización del adaptador a prueba de errores
Ejecute los comandos siguientes para iniciar una aplicación testpmd de puerto único:
testpmd -w <pci address from previous step> \ -- -i \ --port-topology=chained
Ejecute los comandos siguientes para iniciar una aplicación testpmd de puerto dual:
testpmd -w <pci address nic1> \ -w <pci address nic2> \ -- -i
Una vez iniciado, ejecute show port info all
para comprobar la información de puerto. Debería ver uno o dos puertos DPDK que sean net_netvsc.
- Use
start <port> /stop <port>
para iniciar el tráfico.
Los comandos anteriores inician testpmd en modo interactivo, lo cual es recomendable para probar comandos testpmd.
Básico: remitente y receptor únicos
Los siguientes comandos imprimen periódicamente las estadísticas de paquetes por segundo:
En el lado de TX, ejecute el comando siguiente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>
En el lado de RX, ejecute el comando siguiente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=rxonly \ --eth-peer=<port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Si ejecuta los comandos anteriores en una máquina virtual, cambie IP_SRC_ADDR y IP_DST_ADDR a app/test-pmd/txonly.c
para que coincida con la dirección IP real de las máquinas virtuales antes de realizar la compilación. En caso contrario, se descartarán los paquetes antes de alcanzar el receptor.
Avanzado: remitente y reenviador únicos
Los siguientes comandos imprimen periódicamente las estadísticas de paquetes por segundo:
En el lado de TX, ejecute el comando siguiente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>
En el lado de FWD, ejecute el comando siguiente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address NIC1> \ -w <pci address NIC2> \ -- --nb-cores <number of cores to use for test pmd> \ --forward-mode=io \ --eth-peer=<recv port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Si ejecuta los comandos anteriores en una máquina virtual, cambie IP_SRC_ADDR y IP_DST_ADDR a app/test-pmd/txonly.c
para que coincida con la dirección IP real de las máquinas virtuales antes de realizar la compilación. En caso contrario, se descartarán los paquetes antes de alcanzar el reenviador. No puedes hacer que una tercera máquina reciba tráfico reenviado, porque el reenviador testpmd no modifica las direcciones de capa 3, a menos que realices algunos cambios en el código.
Instalación de DPDK a través del paquete del sistema (no recomendado)
sudo yum install -y dpdk