# Express Data Path

XDP (eXpress Data Path) és una ruta de dades d'alt rendiment basada en eBPF que s'utilitza per enviar i rebre paquets de xarxa a altes velocitats evitant la majoria de la pila de xarxa del sistema operatiu. Es fusiona al nucli Linux des de la versió 4.8. Aquesta implementació té llicència GPL. Grans empreses tecnològiques com Amazon, Google i Intel donen suport al seu desenvolupament. Microsoft va llançar la seva implementació gratuïta i de codi obert XDP per a Windows el maig de 2022. Té llicència sota la llicència MIT.

## Ruta de dades

La idea darrere de XDP és afegir un ganxo primerenc a la ruta RX del nucli i deixar que un programa eBPF subministrat per l'usuari decideixi el destí del paquet. El ganxo es col·loca al controlador del controlador d'interfície de xarxa (NIC) just després del processament d'interrupció i abans de qualsevol assignació de memòria necessària per la pròpia pila de xarxa, perquè l'assignació de memòria pot ser una operació costosa. A causa d'aquest disseny, XDP pot deixar caure 26 milions de paquets per segon per nucli amb maquinari bàsic.
El programa eBPF ha de passar una prova de verificador abans de carregar-se, per evitar executar codi maliciós a l'espai del nucli. El verificador comprova que el programa no conté accessos fora de límits, bucles o variables globals.
El programa pot editar les dades del paquet i, després que el programa eBPF torni, un codi d'acció determina què fer amb el paquet:
* XDP_PASS: permet que el paquet continuï a través de la pila de xarxa
* XDP_DROP: deixa anar el paquet en silenci
* XDP_ABORTED: deixa anar el paquet amb l'excepció del punt de traça
* XDP_TX: retorna el paquet a la mateixa NIC on va arribar
* XDP_REDIRECT: redirigeix el paquet a un altre NIC o un sòcol d'espai d'usuari mitjançant la família d'adreces AF_XDP
XDP requereix suport al controlador NIC però, com que no tots els controladors ho admeten, pot tornar a una implementació genèrica, que realitza el processament eBPF a la pila de xarxa, tot i que amb un rendiment més lent.
XDP disposa d'una infraestructura per descarregar el programa eBPF a un controlador d'interfície de xarxa que l'admet, reduint la càrrega de la CPU. El 2023, només les targetes Netronome ho admeten.
Microsoft s'ha associat amb altres empreses i afegeix suport per a XDP en la seva implementació MsQuic del protocol QUIC.

## AF_XDP

Juntament amb XDP, una nova família d'adreces va entrar al nucli Linux a partir de 4.18. AF_XDP, abans conegut com AF_PACKETv4 (que mai es va incloure al nucli de la línia principal), és un sòcol en brut optimitzat per al processament de paquets d'alt rendiment i permet la còpia zero entre el nucli i les aplicacions. Com que el sòcol es pot utilitzar tant per rebre com per transmetre, admet aplicacions de xarxa d'alt rendiment exclusivament a l'espai d'usuari.

## Referències

* ↑ «[GIT Networking - David Miller]» (en anglès). lore.kernel.org. [Consulta: 14 maig 2019].
* ↑ Yasar, Erdem. «Microsoft introduced open-source XDP for Windows» (en anglès). cloud7, 25-05-2022. Arxivat de l'original el 25 de maig 2022. [Consulta: 26 maig 2022].
* ↑ «A thorough introduction to eBPF [LWN.net]» (en anglès). lwn.net. [Consulta: 14 maig 2019].
* ↑ «net: Generic XDP» (en anglès). www.mail-archive.com. [Consulta: 14 maig 2019].
* ↑ «BPF, eBPF, XDP and Bpfilter… What are these things and what do they mean for the enterprise? - Netronome» (en anglès). www.netronome.com. Arxivat de l'original el 2020-09-24. [Consulta: 14 maig 2019].
* ↑ «kernel/git/torvalds/linux.git - Linux kernel source tree» (en anglès). git.kernel.org. [Consulta: 16 maig 2019].
* ↑ «Questions about AF_PACKET V4 and AF_XDP» (en anglès). Kernel.org.
* ↑ «Accelerating networking with AF_XDP [LWN.net]» (en anglès). lwn.net. [Consulta: 16 maig 2019].