XDP ( eXpress Data Path ) es una ruta de datos de alto rendimiento basada en eBPF que se utiliza para enviar y recibir paquetes de red a altas velocidades sin pasar por la mayor parte de la pila de red del sistema operativo . Está integrado en el kernel de Linux desde la versión 4.8. [2] Esta implementación tiene licencia GPL . Grandes empresas de tecnología como Amazon, Google e Intel apoyan su desarrollo. Microsoft lanzó su implementación gratuita y de código abierto XDP para Windows en mayo de 2022. [1] Tiene licencia MIT License . [3]
La idea detrás de XDP es agregar un gancho temprano en la ruta RX del núcleo y dejar que un programa eBPF provisto por el usuario decida el destino del paquete. El gancho se coloca en el controlador de interfaz de red (NIC) justo después del procesamiento de la interrupción y antes de cualquier asignación de memoria que necesite la propia pila de red , porque la asignación de memoria puede ser una operación costosa. Debido a este diseño, XDP puede descartar 26 millones de paquetes por segundo por núcleo con hardware básico. [4]
El programa eBPF debe pasar una prueba de preverificación [5] antes de ser cargado, para evitar la ejecución de código malicioso en el espacio del núcleo. El preverificador verifica que el programa no contenga accesos fuera de límites, bucles o variables globales.
El programa puede editar los datos del paquete y, después de que el programa eBPF regresa, un código de acción determina qué hacer con el paquete:
XDP_PASS
:dejar que el paquete continúe a través de la pila de redXDP_DROP
:descartar el paquete silenciosamenteXDP_ABORTED
: descartar el paquete con excepción del punto de seguimientoXDP_TX
: rebota el paquete a la misma NIC en la que llegóXDP_REDIRECT
: redirigir el paquete a otra NIC o socket de espacio de usuario a través de la familia de direcciones AF_XDPXDP requiere soporte en el controlador NIC pero, como no todos los controladores lo admiten, puede recurrir a una implementación genérica, que realiza el procesamiento eBPF en la pila de red, aunque con un rendimiento más lento. [6]
XDP tiene infraestructura para descargar el programa eBPF a un controlador de interfaz de red que lo soporta, reduciendo la carga de la CPU. En 2023, solo las tarjetas Netronome [7] lo soportan.
Microsoft se está asociando con otras empresas y agregando soporte para XDP en su implementación MsQuic del protocolo QUIC . [1]
Junto con XDP, una nueva familia de direcciones que se incorporó al núcleo Linux a partir de la versión 4.18. [8] AF_XDP, anteriormente conocido como AF_PACKETv4 (que nunca se incluyó en el núcleo principal), [9] es un socket sin formato optimizado para el procesamiento de paquetes de alto rendimiento y permite la copia cero entre el núcleo y las aplicaciones. Como el socket se puede utilizar tanto para recibir como para transmitir, admite aplicaciones de red de alto rendimiento puramente en el espacio de usuario. [10]