Begriff
XDP (eXpress Data Path)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Linux ist toll, aber der Netzwerk-Stack ist für massive Geschwindigkeit (100 Gbit/s) zu langsam.
Jedes Paket muss durch viele Layer (Interrupt, SKB Allocation, IP Stack, Socket).
Das kostet CPU.
XDP ist ein Trick, um Pakete extrem früh zu bearbeiten.
Direkt im Treiber der Netzwerkkarte (NIC), bevor Linux überhaupt daraus ein "Paket" macht (sk_buff).
Du schreibst ein kleines C-Programm (eBPF), lädst es in den Kernel, und es läuft direkt auf den Rohdaten.
Du kannst Pakete verwerfen (DDOS-Schutz) oder weiterleiten, millionenfach pro Sekunde, ohne CPU-Last.
Merksatz: Ein programmierbarer Hochleistungs-Datenpfad im Linux-Kernel, der es ermöglicht, Netzwerkpakete mithilfe von eBPF direkt im Netzwerktreiber zu verarbeiten, bevor sie den regulären Netzwerkstack erreichen.
- Cloudflare: Nutzt XDP, um gigantische DDOS-Angriffe abzuwehren. "Wenn Paket von IP X kommt -> DROP". Das ist 10x schneller als
iptables. - Cilium: Kubernetes-Networking. Ersetzt
iptablesundkube-proxydurch XDP/eBPF für Routing und Load Balancing. - Facebook Katran: Ein Load Balancer, der auf XDP basiert.
1. Hook Points
XDP läuft an der absolut frühesten Stelle: XDP_DRV (im Driver).
Es gibt 3 Rückgabewerte:
XDP_DROP: Weg damit (super billig).XDP_TX: Zurück auf die gleiche NIC (Load Balancer).XDP_PASS: Weiter zum normalen Linux Stack (für normale Pakete).
2. AF_XDP
Ein spezieller Socket. Erlaubt "Zero Copy" Transfer vom Treiber direkt in den Userspace. Damit kann man High-Speed User-Apps bauen (ähnlich wie DPDK), aber ohne den Kernel komplett zu umgehen.
1. XDP Actions: REDIRECT und ABORT
Neben DROP und PASS gibt es:
- XDP_REDIRECT: Schickt das Paket direkt an eine andere Netzwerkkarte (NIC) oder einen anderen CPU-Core. Ideal für den Bau von Hardware-ähnlichen Load Balancern in Software.
- XDP_ABORTED: Wird bei Fehlern im eBPF-Programm aufgerufen. In der Produktion nutzt Cloudflare dies für "Anti-Reflective DDOS". Wenn ein Paket bösartig aussieht, wird es nicht nur gedroppt, sondern die Statistik-Analyse wird asynchron im Background getriggert, ohne den Paketfluss des "guten" Verkehrs zu stören.
2. BPF Maps und State Management
XDP-Programme sind "stateless" (sie sehen nur ein Paket). Aber sie können mit BPF Maps reden. Das sind Key-Value-Speicher im Kernel, auf die auch User-Apps (z.B. ein Go-Programm) zugreifen können. Man kann in der Map speichern: "IP 1.2.3.4 hat schon 100 Pakete geschickt". Das XDP-Programm liest die Map und entscheidet beim 101. Paket: "Jetzt DROP". Das erlaubt komplexes Traffic-Shaping und Ratenbegrenzung auf Netzwerk-Ebene, während die CPU-Last nahezu bei Null bleibt.
3. Driver Support vs. Generic Mode
Es gibt drei Arten, XDP zu laden:
- Offloaded: Die SmartNIC führt den eBPF-Code auf ihrem eigenen Prozessor aus (Maximum Performance).
- Native (Driver Mode): Der Treiber der NIC unterstützt XDP (Standard für 10/40/100 Gbit Karten von Intel/Mellanox).
- Generic (SKB Mode): Läuft im Kernel-Stack, funktioniert mit JEDER Netzwerkkarte (auch WLAN). Langsamer, da das Paket schon zum
sk_buffgewandelt wurde, aber perfekt zum Testen und für kleinere Server. In der Produktion sollte man immer Native Mode anstreben.
Quick-Check
Unterschied zu DPDK?
DPDK umgeht den Kernel komplett (Kernel Bypass). XDP läuft im Kernel (integriert, sicher). DPDK ist oft noch einen Tick schneller, aber XDP ist einfacher zu managen und kompatibler.Sicherheit?
eBPF-Code wird vom "Verifier" geprüft. Er darf nicht abstürzen (keine Endlosschleifen) und nicht auf fremden Speicher zugreifen. Sicherer als Kernel Module.Hardware?
SmartNICs können XDP-Code sogar direkt auf dem Chip der Netzwerkkarte ausführen ("Offloading"). Dann ist die CPU zu 100% entlastet.