XDP a eBPF pro zpracování paketů v systému Linux

14 min čtení - 27. května 2026

hero section cover
Obsah
  • XDP a eBPF pro vysoce výkonné zpracování paketů
  • Jak eBPF a XDP spolupracují
  • XDP vs. iptables: Benchmarky výkonu
  • Omezení DDoS a bezpečnost
  • Nástroje, nasazení a hardwarové požadavky
  • Začínáme s XDP
Sdílet

Jak XDP a eBPF zpracovávají miliony paketů za sekundu na úrovni ovladače síťové karty. Srovnávací testy, případy použití DDoS, nastavení řetězce nástrojů a požadavky na hardware.

XDP a eBPF pro vysoce výkonné zpracování paketů

XDP (eXpress Data Path) a eBPF (extended Berkeley Packet Filter) umožňují systému Linux zpracovávat síťové pakety ještě předtím, než se do procesu zapojí běžný síťový stack jádra. Namísto alokace paměťových struktur pro každý příchozí paket zachytí XDP provoz přímo na úrovni ovladače síťové karty, rozhodne, co s ním udělá, a buď jej zahodí, přepošle, nebo přesměruje. Výsledkem je zpracování milionů paketů za sekundu na jedno jádro, a to s pouhým zlomkem zatížení procesoru oproti tradičním nástrojům, jako jsou iptables.


 

Jak eBPF a XDP spolupracují

eBPF je virtuální stroj uvnitř jádra Linuxu. Spouští vlastní bajtkód, který byl ověřen z hlediska bezpečnosti (žádné nekonečné smyčky, žádný neoprávněný přístup k paměti) a poté JIT-kompilován do nativních instrukcí procesoru. Programy mají omezený rozsah. Nemohou volat libovolné funkce jádra, pouze sadu předdefinovaných pomocných funkcí pro úkoly, jako je vyhledávání v mapách a přesměrování paketů.

Pro správu stavu používá eBPF mapy, což jsou úložiště klíčů a hodnot (hash tabulky, pole, LPM try), která přetrvávají i po příjmu dalších paketů. Mapy jsou čitelné a zapisovatelné z uživatelského prostoru, takže můžete aktualizovat blokovací seznamy nebo pravidla směrování bez nutnosti znovu načítat program.

XDP je háček eBPF. Připojuje se k přijímací cestě ovladače síťové karty předtím, než jádro alokuje strukturu sk_buff strukturu (objekt metadat o velikosti 200–300 bajtů na paket, na kterém závisí tradiční síťový stack). Přeskočení této alokace je zdrojem zvýšení výkonu.

XDP běží ve třech režimech:

  • Nativní režim: běží uvnitř ovladače síťové karty. Nejlepší výkon.
  • Offloaded režim: běží na ASICu síťové karty. Úplně uvolňuje CPU.
  • Generický režim: běží po sk_buff alokace. Užitečné pro testování na nepodporovaném hardwaru, ale bez zvýšení výkonu.

Po zpracování každého paketu program XDP vrátí verdikt:

VerdiktAkce
XDP_DROPZrušit paket na úrovni ovladače
XDP_PASSPřeposlat do normálního síťového stacku
XDP_TXOdeslat zpět přes stejné rozhraní
XDP_REDIRECTPřesměrovat na jinou síťovou kartu nebo socket AF_XDP v uživatelském prostoru
XDP_ABORTEDZrušit kvůli chybě programu, zaznamenat událost do protokolu

XDP vs. iptables: Benchmarky výkonu

Čísla jsou neúprosná. iptables Zpracovává přibližně 200 000 paketů za sekundu na jádro. nftables zlepšuje tento výkon na přibližně 400 000 pps. XDP v nativním režimu zpracovává 10 až 40 milionů pps na jádro na stejném hardwaru.

Důvod je jednoduchý: XDP_DROP stojí jednu kontrolu mezí a návratovou hodnotu. iptables DROP vyžaduje sk_buff alokaci, procházení řetězce netfilter, vyhledání sledování připojení, samotnou akci DROP a poté deallokaci. Při 100 Gbps s 64-bajtovými pakety čelí server 148 milionům paketů za sekundu, což ponechává asi 100 nanosekund na paket. V tomto měřítku sk_buff se alokace stává úzkým hrdlem.

Úspory na CPU jsou stejně významné. Přesunutí blokovacího seznamu z iptables do XDP v jednom benchmarku snížilo využití CPU softwarovými přerušeními z 28 % na 3 % při 1 milionu pps. Tato uvolněná kapacita umožňuje spouštět aplikační procesy, databáze nebo virtuální stroje na stejném serveru.

Omezení DDoS a bezpečnost

Nejsilnější oblastí využití XDP v hostingu je zmírňování DDoS útoků. Protože funguje na úrovni ovladače, jsou škodlivé pakety zahozeny ještě předtím, než se dostanou do síťového stacku jádra. Jedno jádro s XDP dokáže zahozením zpracovat 26 milionů paketů za sekundu.

Cloudflare používá systém založený na XDP s názvem L4Drop pro zmírňování objemových DDoS útoků přinejmenším od roku 2018. Systém zpracovává a odstraňuje útočný provoz v kontextu XDP, čímž zabraňuje jeho dosažení aplikační vrstvy. Katran od společnosti Meta, open-source load balancer XDP vrstvy 4, zpracovává provoz pro Facebook a Instagram rychlostí přes 10 milionů pps na jádro.

Pro dynamické filtrování umožňují mapy eBPF BPF_MAP_TYPE_LPM_TRIE umožňují spravovat seznamy blokovaných IP adres zahrnující jednotlivé IP adresy a podsítě CIDR v jediném vyhledávání. Aktualizace probíhají z uživatelského prostoru v reálném čase, není třeba program znovu načítat. Během aktivního útoku můžete pomocí bpftool:

bpftool map update id <MAP_ID> key <KEY_VALUE> value <VALUE>

Pro účely observability shromažďuje eBPF metriky podle aplikace, IP adresy a toku přímo z datové cesty jádra. Kontext xdp_md kontext poskytuje telemetrii, jako je ingress_ifindex a rx_queue_index, takže můžete identifikovat, které rozhraní nebo fronta je pod tlakem. Pro dlouhodobé monitorování nástroje jako ebpf_exporter převádějí surová data mapy eBPF na metriky kompatibilní s Prometheusem pro vizualizaci v Grafaně.

Nástroje, nasazení a hardwarové požadavky

Sada nástrojů začíná Clangem a LLVM pro kompilaci omezeného C do eBPF bytecode. Odtud potřebujete knihovnu loader:

  • libbpf: standardní knihovna C pro produkční použití. Podporuje CO-RE (Compile Once, Run Everywhere) pro přenositelnost mezi jádry.
  • libxdp: specifická pro XDP, podporuje spouštění více programů XDP na jediném rozhraní.
  • cilium/ebpf: čistá knihovna Go pro zásobníky založené na Go.

Pro správu bpftool umožňuje kontrolovat živé programy a mapovat obsah. xdp-loader (z xdp-tools sady) se stará o načítání a uvolňování. BCC je užitečné pro prototypování s front-endy v Pythonu/Lua, ale libbpf s CO-RE je lepší volbou pro produkci.

Před nasazením povolte kompilátor BPF JIT:

sysctl -w net.core.bpf_jit_enable=1

Pro aktualizace bez výpadku použijte příznak XDP_FLAGS_REPLACE použijte příznak k atomickému výměně spuštěného programu. Připněte mapy k /sys/fs/bpf/ tak, aby přetrvaly i po ukončení zavaděče.

Kompatibilita hardwaru a jádra

XDP bylo zavedeno v jádře 4.8, ale pro plnou sadu funkcí se doporučuje verze 5.x nebo novější. Zkontrolujte své jádro pomocí uname -r a ověřte, zda existuje souborový systém BPF v /sys/fs/bpf/.

Váš ovladač síťové karty určuje, které funkce XDP jsou k dispozici:

OvladačZákladní XDPPřesměrováníZero-copy (AF_XDP)
mlx5_coreAnoAnoAno
i40eAnoAnoAno
ixgbeAnoAnoAno
virtio_netAnoAnoNe
ena (Amazon)AnoAnoNe

Zkontrolujte ovladač pomocí ethtool -i <interface>. Pokud není nativní režim podporován, systém přejde do generického režimu, který běží po sk_buff alokaci a nenabízí žádný výkonnostní přínos.

Před připojením programu XDP deaktivujte GRO a LRO, protože jsou v konfliktu:

ethtool -K <iface> gro off lro off

Standardní XDP vyžaduje, aby se pakety vešly na jednu paměťovou stránku o velikosti 4 096 bajtů. Na i40e a ice je limit MTU pro x86 3 046 bajtů.

Začínáme s XDP

Začněte posouzením svého prostředí. Spusťte uname -r , abyste ověřili, že máte jádro 4.8+ (preferováno 5.x), a ethtool -i <interface> , abyste zkontrolovali podporu nativního ovladače XDP.

Začněte s pozorovatelností, ne s vynucováním. Použijte mapy eBPF k klasifikaci a počítání provozu, abyste měli základnu normální aktivity. Jakmile pochopíte své vzorce provozu, přejděte k vynucování: nejprve otestujte v xdpgeneric režimu a poté přejděte na xdpdrv (nativní) pro produkční prostředí.

Mějte na paměti, že XDP zpracovává filtrování na úrovni paketů, nikoli surovou šířku pásma. Pro rozsáhlé útoky o rychlosti 100 Gbps jej kombinujte s infrastrukturou typu bare-metal a BGP FlowSpec, abyste mohli spravovat upstreamový provoz ještě předtím, než dosáhne serveru.

Pokud provozujete pracovní úlohy s vysokým provozem, které vyžadují rychlé filtrování paketů, poskytují dedikované servery FDC základ v podobě hardwaru, díky kterému můžete z XDP vytěžit maximum.

Blog

Tento týden byly představeny

Další články
XDP a eBPF pro zpracování paketů v systému Linux

XDP a eBPF pro zpracování paketů v systému Linux

Jak XDP a eBPF zpracovávají miliony paketů za sekundu na úrovni ovladače síťové karty. Srovnávací testy, případy použití DDoS, nastavení řetězce nástrojů a požadavky na hardware.

14 min čtení - 27. května 2026

Proč je důležité mít výkonný a neměřený VPS

3 min čtení - 9. května 2025

Další články
background image

Máte dotazy nebo potřebujete vlastní řešení?

icon

Flexibilní možnosti

icon

Globální dosah

icon

Okamžité nasazení

icon

Flexibilní možnosti

icon

Globální dosah

icon

Okamžité nasazení