1 --- > Análisis del principio de implementación de DPDK (Introducción al inicio rápido)

El cuello de botella del rendimiento del reenvío de datos de la pila de protocolos del kernel.
En la arquitectura X86, la forma tradicional de recibir paquetes de datos es el método de interrupción de la CPU, es decir, el controlador de la tarjeta de red recibe el paquete de datos e informa a la CPU a través de una interrupción para su procesamiento, y luego la CPU copia los datos y los entrega a la pila de protocolos del kernel. Cuando la cantidad de datos es grande, este método generará una gran cantidad de interrupciones de la CPU, lo que hará que la CPU no pueda ejecutar otros programas.

Proceso de recepción de datos de la pila de protocolos del kernel de Linux: para
Inserte la descripción de la imagen aquíobtener información detallada sobre el proceso de reenvío, consulte el siguiente artículo:
https://blog.csdn.net/weixin_38387929/article/details/113812682

El cuello de botella del rendimiento del reenvío de datos de la pila de protocolos del kernel:
1). Conmutación de subprocesos / procesos causada por interrupciones de hardware: las solicitudes de interrupciones de hardware se adelantarán a las interrupciones de software con baja prioridad. Las interrupciones de hardware y las interrupciones de software que llegan con frecuencia significan un cambio de subprocesos frecuente. interruptor de modo de operación, el interruptor de contexto. Una serie de pérdidas de rendimiento de la CPU, como la carga del programador de subprocesos, la falta de caché, la sincronización de datos compartidos de caché de varios núcleos y los bloqueos en competencia
2). Copia de memoria: el controlador de la tarjeta de red se encuentra en el modo kernel. El paquete de datos recibido por el controlador de red será procesado por la pila de protocolos del kernel y luego copiado al búfer de la capa de aplicación en el modo de usuario. Tal copia de datos es una operación que requiere mucho tiempo Según las estadísticas, la práctica de copiar representará el 57% del flujo de procesamiento de paquetes.
3) Desviación de la CPU de la plataforma multiprocesador: una interrupción de Kenny de paquetes está en cpu0, el modo de kernel se procesa en cpu1 y el modo de usuario se procesa en cpu2. Este procesamiento a través de múltiples núcleos físicos da como resultado una gran cantidad de errores de caché de cpu, causando local Si se trata de una arquitectura NUMA, habrá situaciones de memoria de acceso remoto entre NUMA, lo que afectará el rendimiento de la cpu.
4). Invalidación de la caché: la mayoría de los servidores tradicionales utilizan memoria virtual basada en páginas. La página de memoria está predeterminada en páginas pequeñas de 4K. Por lo tanto, hay una gran cantidad de entradas de mapeo de páginas en la barra espaciadora de almacenamiento para mayores oportunidades de procesamiento. Al mismo tiempo , debido a que el caché de TLB es limitado, eventualmente se producirá el TLB Las entradas de mapeo de la tabla rápida se cambian con frecuencia, lo que da como resultado una gran cantidad de errores de caché en la tabla de páginas rápidas.

Por lo tanto, el esquema de optimización correspondiente:
(1) Utilice la afinidad NUMA para evitar el acceso de la CPU a la memoria a través de NUMA.
(2) Utilice la vinculación de la CPU para evitar la conmutación de subprocesos / procesos de la CPU.
(3) Utilice caché de página grande para evitar la pérdida de caché TLB.
(4) Utilice la tecnología de derivación del kernel para evitar interrupciones frecuentes del hardware y del software.

En este contexto, se produce la tecnología de bypass de núcleo completo DPDK (Data Plane Development Kit). DPDK es una plataforma e interfaz de desarrollo de código abierto, procesamiento rápido de datos y reenvío desesperado de paquetes, que se ejecuta en intel x86, ARM y PowerPC arquitectónicamente.

Intel inició el proceso posterior a la apertura de la tecnología DPDK en 2010. En septiembre de ese año, lanzó oficialmente el paquete de software de código abierto a través del acuerdo de licencia de código abierto BSD. En 2014, estableció formalmente una plataforma comunitaria de código abierto independiente en www. .dpdk.org para el desarrollo Brindar apoyo. Los participantes del diseño de código abierto han promovido en gran medida la innovación tecnológica y la rápida evolución de DPDK, y ahora se ha convertido en una tecnología clave de SDN y NFV.

DPDK proporciona una función de biblioteca de procesamiento de paquetes de datos eficiente en modo de usuario, que utiliza la capa de abstracción del entorno, la pila de protocolo de derivación del kernel, la transmisión y recepción no interrumpidas de paquetes en modo de sondeo, la gestión optimizada de memoria / búfer / colas, la cola de la tarjeta de red y el flujo Equilibrio de carga reconocido y otras tecnologías para lograr capacidades de reenvío de mensajes de alto rendimiento bajo la arquitectura del procesador x86. Los usuarios pueden desarrollar varias aplicaciones de reenvío de alta velocidad en el modo de usuario de Linux, y también son adecuadas para varias soluciones comerciales de aceleración del plano de datos para integrar. En resumen, DPDK recarga el controlador de la tarjeta de red para separar el plano de control y el plano de datos del paquete de datos. Después de recibir el paquete de datos, el controlador ya no interrumpe para notificar a la cpu, sino que permite que el paquete de datos pase por alto la pila de protocolos de el bypass del kernel. La pila de protocolos de Linux se almacena en la memoria a través de la tecnología de copia cero. En este momento, el programa de la capa de aplicación puede leer el paquete de datos a través de la interfaz proporcionada por DPDK.

Flujo de procesamiento de paquetes de datos DPDK:
Inserte la descripción de la imagen aquíeste método de procesamiento ahorra tiempo de procesamiento de interrupciones de CPU y tiempo de copia de memoria, y proporciona funciones de interfaz de procesamiento de paquetes de datos simples y eficientes a la capa de aplicación, lo que hace que el desarrollo de aplicaciones de red sea más conveniente. Sin embargo, debido a la necesidad de volver a cargar el controlador de la tarjeta de red, el kit de desarrollo solo se puede usar en dispositivos de tarjeta de red que usen chips de procesamiento de red Intel. Lista de tarjetas de red compatibles con DPDK: https://core.dpdk.org/supported/, la corriente principal utiliza el puerto óptico Intel 82599 y el puerto eléctrico Intel x540. DPDK puede aumentar el rendimiento del procesamiento de paquetes hasta diez veces y obtener un rendimiento de más de 80 Mbps en un solo procesador Intel Xeon y duplicarlo en una configuración de procesador dual.

Comparación de la recepción de datos DPDK y el flujo de recepción de la pila del protocolo Linux

Inserte la descripción de la imagen aquíLa pila de protocolos del kernel de Linux a la izquierda: tarjeta de red -> controlador -> pila de protocolos -> biblioteca de sockets -> aplicación de red.
El kernel basado en UIO omite DPDK a la derecha: tarjeta de red -> sondeo DPDK -> biblioteca DPDK PMD -> aplicación de red.

Nota: El controlador del kernel de la NIC que admite DPDK se puede convertir al modo de controlador UIO, por lo que DPDK se puede utilizar en máquinas virtuales, siempre que el controlador de la tarjeta de red de la máquina virtual admita el modo DPDK PMD, como: e1000.

Principio de implementación de DPDK (UIO Framework) La
forma de enviar y recibir paquetes de datos de la pila de protocolos de Linux, primero, la tarjeta de red informa a la pila de protocolos del kernel que procese el paquete de datos a través del modo de interrupción, la pila de protocolos del kernel verificará la validez de los datos paquete, y luego juzgar si el objetivo del paquete de datos es El socket local, si se cumplen las condiciones, se enviará una copia del paquete de datos al Socket del modo de usuario para su procesamiento. No solo la ruta de procesamiento es larga, sino también una copia Se requiere el proceso desde el kernel hasta la capa de aplicación.
Para que el controlador de la tarjeta de red se ejecute en modo de usuario, se implementa la omisión del kernel. Linux proporciona un mecanismo UIO. Con UIO, puede detectar interrupciones a través de read () y comunicarse con dispositivos de tarjeta de red a través de mmap ().

En pocas palabras, UIO es una tecnología de E / S en modo de usuario. DPDK puede omitir la pila de protocolos del kernel y proporcionar compatibilidad con el controlador PMD en modo de usuario, que se debe básicamente a la tecnología UIO. La arquitectura DPDK instala los módulos IGB_UIO (igb_uio.ko y kni.ko.IGB_UIO) en el kernel de Linux para interceptar interrupciones con la ayuda de la tecnología UIO y restablecer el comportamiento de devolución de llamada de interrupción, omitiendo así el flujo de procesamiento posterior de la pila de protocolos del kernel. , y IGB_UIO. En el proceso de inicialización del kernel, los registros de hardware de la tarjeta de red se asignan al modo de usuario.

Mecanismo de implementación de UIO:
Exponga la interfaz de archivo al modo de usuario. Cuando se registra un dispositivo UIO uioX, aparecerá el archivo de sistema / dev / uioX. La tecnología de lectura y escritura de este archivo lee y escribe la memoria del dispositivo de tarjeta de red. El control del dispositivo de la tarjeta de red también se puede completar leyendo y escribiendo cada archivo en / sys / class / uio.

UIO Framework es como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquíDPDK también implementa una sofisticada tecnología de pool de memoria en modo de usuario. El intercambio directo de memoria entre el modo kernel y el modo de usuario no requiere una operación de copia, sino que solo transfiere derechos de control. De esta manera, cuando enviar y recibir paquetes de datos, reducir la sobrecarga de la copia de memoria.

La implementación de DPDK UIO se divide principalmente en dos partes: modo de kernel (igb_uio) y modo de usuario (PMD). La parte de modo de usuario realiza el procesamiento del servicio de reenvío de datos reales, y la parte de modo de kernel se hace cargo principalmente de los recursos de hardware y los proporciona al modo de usuario.
Inserte la descripción de la imagen aquíEl marco de UIO se divide en cuatro capas:
(1) Capa de usuario
(2) Capa de interfaz
(3) Capa de kernel
(4) Capa de hardware

La tarjeta de red e1000 se vincula inicialmente con el controlador correspondiente. Después de que el programa de la capa de usuario ejecuta los comandos de desvinculación y vinculación; después de enviar la información a la capa del kernel a través de sysfs, la tarjeta de red se vincula con el controlador igb_uio y la capa del kernel igb_uio se hace cargo de la tarjeta de red y proporciona una interfaz de servicio para el PMD a nivel de usuario.

Enlace de referencia:
http://core.dpdk.org/doc/
http://doc.dpdk.org/guides/prog_guide/poll_mode_drv.html#poll-mode-driver-api
https://is-cloud.blog. csdn.net/article/details/98944634

Supongo que te gusta

Origin blog.csdn.net/weixin_38387929/article/details/115051822
Recomendado
Clasificación