XDP ( eXpress Data Path ) es una ruta de datos de alto rendimiento basada en eBPF fusionada en el kernel de Linux desde la versión 4.8. [1]
Autor (es) original (es) | Brenden Blanco, Tom Herbert |
---|---|
Versión inicial | 2016 |
Escrito en | C |
Sistema operativo | Linux |
Tipo | Filtrado de paquetes |
Licencia | GPL |
La idea detrás de XDP es agregar un gancho temprano en la ruta RX del kernel y dejar que un programa eBPF proporcionado por el usuario decida el destino del paquete. El gancho se coloca en el controlador 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 eliminar 26 millones de paquetes por segundo por núcleo con hardware básico. [2]
El programa eBPF debe pasar una prueba de preverificador [3] antes de ser cargado, para evitar ejecutar código malicioso en el espacio del kernel. El preverificador comprueba que el programa no contiene accesos fuera de límites, bucles o variables globales.
El programa puede editar los datos del paquete y, después de que regresa el programa eBPF, un código de acción determina qué hacer con el paquete:
XDP_PASS
: deje que el paquete continúe a través de la pila de redXDP_DROP
: suelta silenciosamente el paqueteXDP_ABORTED
: descarte el paquete con excepción de punto de seguimientoXDP_TX
: devuelve el paquete a la misma NIC en la que llegóXDP_REDIRECT
: redirige el paquete a otra NIC o socket de espacio de usuario a través de la familia de direcciones AF_XDP
XDP 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. [4]
XDP tiene infraestructura para descargar el programa eBPF a un controlador de interfaz de red que lo admite, lo que reduce la carga de la CPU. En ese momento, solo las tarjetas Netronome lo admiten, [5] con Intel y Mellanox trabajando en él. [6]
AF_XDP
Junto con XDP, se ingresó una nueva familia de direcciones en el kernel de Linux a partir de 4.18. [7] AF_XDP, anteriormente conocido como AF_PACKETv4 (que nunca se incluyó en el kernel de la línea principal), [8] es un socket sin formato optimizado para el procesamiento de paquetes de alto rendimiento y permite la copia cero entre el kernel y las aplicaciones. Como el zócalo se puede utilizar tanto para recibir como para transmitir, admite aplicaciones de red de alto rendimiento exclusivamente en el espacio del usuario. [9]
Referencias
- ^ "Redes [GIT] - David Miller" . lore.kernel.org . Consultado el 14 de mayo de 2019 .
- ^ Høiland-Jørgensen, Toke (2019-05-03), texto fuente y datos experimentales para nuestro artículo que describe XDP: tohojo / xdp-paper , consultado el 2019-05-21
- ^ "Una introducción completa a eBPF [LWN.net]" . lwn.net . Consultado el 14 de mayo de 2019 .
- ^ "net: XDP genérico" . www.mail-archive.com . Consultado el 14 de mayo de 2019 .
- ^ "BPF, eBPF, XDP y Bpfilter ... ¿Qué son estas cosas y qué significan para la empresa? - Netronome" . www.netronome.com . Consultado el 14 de mayo de 2019 .
- ^ "Aceleración XDP usando metadatos NIC" (PDF) .
- ^ "kernel / git / torvalds / linux.git - árbol de fuentes del kernel de Linux" . git.kernel.org . Consultado el 16 de mayo de 2019 .
- ^ "Preguntas sobre AF_PACKET V4 y AF_XDP" . Kernel.org .
- ^ "Acelerando la creación de redes con AF_XDP [LWN.net]" . lwn.net . Consultado el 16 de mayo de 2019 .
enlaces externos
- Documentación de XDP sobre Leer los documentos
- Documentación de AF_XDP en kernel.org
- Tutorial de XDP en FOSDEM 2017 por Daniel Borkmann, Cilium
- AF_XDP en FOSDEM 2018 por Magnus Karlsson, Intel
- eBPF.io - Introducción, tutoriales y recursos comunitarios
- L4Drop: Mitigaciones XDP DDoS , Cloudflare
- Unimog: equilibrador de carga de borde de Cloudflare , Cloudflare
- Katran de código abierto, un equilibrador de carga de red escalable , Facebook
- L4LB de Cilium: equilibrador de carga XDP independiente , Cilium
- Reemplazo de proxy de Kube en la capa XDP , Cilium
- eCHO Podcast en XDP y equilibrio de carga