XDP ja eBPF Linuxi pakettide töötlemiseks
14 min lugemine - 27. mai 2026
Kuidas XDP ja eBPF töötlevad miljoneid pakette sekundis võrguühenduse draiveri tasandil. Võrdlusnäitajad, DDoS-kasutusjuhtumid, tööriistaketi seadistamine ja riistvaranõuded.
XDP ja eBPF kõrge jõudlusega pakettide töötlemiseks
XDP (eXpress Data Path) ja eBPF (extended Berkeley Packet Filter) võimaldavad Linuxil töödelda võrgupakette enne, kui kernel hakkab oma tavapärast võrgustikupaketti kasutama. Selle asemel, et eraldada mälustruktuure igale sissetulevale paketile, peatab XDP liikluse otse NIC-draiveris, otsustab, mida sellega teha, ning kas viskab selle ära, edastab või suunab ümber. Tulemuseks on pakettide töötlemine kiirusega miljonit paketti sekundis tuuma kohta, kasutades vaid murdosa sellest CPU koormusest, mida nõuavad traditsioonilised tööriistad nagu iptables.
Kuidas eBPF ja XDP koos töötavad
eBPF on Linuxi tuumas asuv virtuaalmasin. See käitab kohandatud baitkoodi, mille ohutus on kontrollitud (ei ole lõputuid tsükleid ega volitamata mälupöördumisi) ja mis on seejärel JIT-kompileeritud natiivseteks CPU-käskudeks. Programmide ulatus on piiratud. Need ei saa kutsuda suvalisi tuumafunktsioone, vaid ainult eeldefineeritud abifunktsioone selliste ülesannete jaoks nagu kaardipäringud ja pakettide ümbersuunamine.
Seisundi haldamiseks kasutab eBPF kaarte, mis on võti/väärtus-salvestid (hash-tabelid, massiivid, LPM-trid), mis püsivad pakettide saabumise ajal. Kaarte saab kasutajakeskkonnast lugeda ja kirjutada, seega saate blokeerimisnimekirju või marsruutimisreegleid uuendada ilma programmi uuesti laadimata.
XDP on eBPF-i haakepunkt. See ühendub NIC-draiveri vastuvõtuteega enne, kui tuum eraldab sk_buff struktuuri (200–300 baiti suurune paketi metaandmete objekt, millest sõltub traditsiooniline võrgustikupinu). Just selle eraldamise vahelejätmine annabki jõudluse kasvu.
XDP töötab kolmes režiimis:
- Natiivrežiim: töötab NIC-draiveri sees. Parim jõudlus.
- Välja laaditud režiim: töötab NIC-i ASIC-il. Vabastab CPU täielikult.
- Üldine režiim: töötab pärast
sk_bufferaldamist. Kasulik toetamata riistvara testimiseks, kuid ei anna jõudluse kasu.
Pärast iga paketi töötlemist annab XDP-programm otsuse:
| Otsus | Tegevus |
|---|---|
XDP_DROP | Paketi kõrvaldamine draiveri tasandil |
XDP_PASS | Edasta tavalisele võrgustikupakettidele |
XDP_TX | Saada tagasi sama liidese kaudu |
XDP_REDIRECT | Suunata ümber teisele NIC-ile või AF_XDP kasutaja ruumi pistikupesale |
XDP_ABORTED | Kõrvaldamine programmi vea tõttu, jälgimisjuhtumi logimine |
XDP vs iptables: jõudluse võrdlus
Numbrid on karmid. iptables käsitleb umbes 200 000 paketti sekundis tuuma kohta. nftables parandab seda umbes 400 000 pps-ni. XDP töötleb natiivrežiimis samal riistvaral 10 kuni 40 miljonit pps protsessori tuuma kohta.
Põhjus on lihtne: XDP_DROP maksab ühe piiride kontrolli ja tagastatud väärtuse. iptables DROP nõuab sk_buff mälueraldust, netfilter-ahela läbimist, ühenduse jälgimise otsingut, DROP-tegevust ennast ja seejärel mälueralduse tühistamist. 100 Gbps kiiruse ja 64-baidiste pakettide korral töötleb server 148 miljonit paketti sekundis, jättes ühe paketi kohta umbes 100 nanosekundit. Sellisel tasemel sk_buff muutub mälueraldus pudelikaelaks.
CPU-koormuse kokkuhoid on sama märkimisväärne. Ühe võrdlustesti käigus vähendas iptables ühe võrdlustesti käigus XDP-sse vähendas tarkvaraliste katkestuste CPU-kasutust 1 miljoni pps juures 28%-lt 3%-le. Selle vabanenud võimsusega saab samal serveril käitada rakendusprotsesse, andmebaase või virtuaalmasinaid.
DDoS-rünnakute leevendamine ja turvalisus
XDP tugevaim kasutusala hostingus on DDoS-rünnakute leevendamine. Kuna see töötab draiveri tasandil, lükatakse pahatahtlikud paketid tagasi enne, kui need jõuavad tuuma võrgustikustakki. Üks XDP-d käitav tuum suudab sekundis tagasi lükata 26 miljonit paketti.
Cloudflare on kasutanud XDP-põhist süsteemi nimega L4Drop mahulise DDoS-rünnakute leevendamiseks vähemalt alates 2018. aastast. Süsteem töötleb ja kõrvaldab rünnakuliikluse XDP-keskkonnas, takistades selle jõudmist rakenduskihini. Meta Katran, avatud lähtekoodiga XDP 4. kihi koormuse jaotaja, töötleb Facebooki ja Instagrami liiklust kiirusega üle 10 miljoni paketi sekundis tuuma kohta.
Dünaamiliseks filtreerimiseks võimaldavad eBPF-kaardid BPF_MAP_TYPE_LPM_TRIE võimaldavad hallata IP-blokeerimisnimekirju, mis hõlmavad üksikuid IP-aadresse ja CIDR-alamvõrke ühe otsinguga. Uuendused toimuvad kasutaja ruumist reaalajas, programmi uuesti laadimist ei ole vaja. Aktiivse rünnaku ajal saate lükata uusi allkirju millisekundite jooksul, kasutades bpftool:
bpftool map update id <MAP_ID> key <KEY_VALUE> value <VALUE>Jälgitavuse tagamiseks kogub eBPF rakenduse-, IP- ja voo-põhiseid mõõdikuid otse tuuma andmeteest. xdp_md kontekst pakub telemeetriat nagu ingress_ifindex ja rx_queue_index, nii et saate kindlaks teha, milline liides või järjekord on koormuse all. Pikaajaliseks seireks võimaldavad sellised tööriistad nagu ebpf_exporter muudavad töötlemata eBPF-kaardiandmed Prometheusega ühilduvateks näitajateks, mida saab visualiseerida Grafanas.
Tööriistad, kasutuselevõtt ja riistvaranõuded
Tööriistakett algab Clangist ja LLVMist, millega kompileeritakse piiratud C eBPF-baitkoodiks. Sealt edasi on vaja laadimisraamatukogu:
libbpf: standardne C-raamatukogu tootmiskasutuseks. Toetab CO-RE-d (Compile Once, Run Everywhere) tuumadevahelise ülekantavuse jaoks.libxdp: XDP-spetsiifiline, toetab mitme XDP-programmi käitamist ühel liidesel.cilium/ebpf: puhas Go-raamatukogu Go-põhiste pinu jaoks.
Haldamiseks bpftool võimaldab teil vaadata reaalajas programme ja kaardistada sisu. xdp-loader ( xdp-tools paketist) haldab laadimist ja tühjendamist. BCC on kasulik prototüüpide loomiseks Python/Lua kasutajaliidestega, kuid libbpf CO-RE on tootmiseks parem valik.
Lülitage BPF JIT-kompilaator sisse enne kasutuselevõttu:
sysctl -w net.core.bpf_jit_enable=1Katkestusteta uuenduste jaoks kasutage XDP_FLAGS_REPLACE lipu, et vahetada töötavat programmi atomaarselt. Kinnita kaardid /sys/fs/bpf/ nii, et need püsiksid pärast laadija sulgemist.
Riistvara ja tuuma ühilduvus
XDP võeti kasutusele tuumas 4.8, kuid kõigi funktsioonide kasutamiseks soovitatakse versiooni 5.x või uuemat. Kontrollige oma tuuma käsuga uname -r ja veenduge, et BPF-failisüsteem on olemas aadressil /sys/fs/bpf/.
Teie võrgukaardi draiver määrab, millised XDP-funktsioonid on saadaval:
| Draiver | Põhiline XDP | Ümbersuunamine | Zero-copy (AF_XDP) |
|---|---|---|---|
mlx5_core | Jah | Jah | Jah |
i40e | Jah | Jah | Jah |
ixgbe | Jah | Jah | Jah |
virtio_net | Jah | Jah | Ei |
ena (Amazon) | Jah | Jah | Ei |
Kontrollige oma draiverit ethtool -i <interface>. Kui natiivrežiimi ei toetata, lülitub süsteem tagasi üldisele režiimile, mis töötab pärast sk_buff eraldamist ja ei paku mingit jõudluse eelist.
Lülita GRO ja LRO välja enne XDP-programmi ühendamist, kuna need tekitavad konflikti:
ethtool -K <iface> gro off lro offStandardne XDP nõuab, et paketid mahuksid ühele 4096-baidisele mälilehele. i40e ja ice draiveritel on x86 MTU piirang 3046 baiti.
XDP-ga alustamine
Alustage oma keskkonna hindamisest. Käivitage uname -r , et veenduda, et tuum on versioon 4.8+ (soovitavalt 5.x), ja ethtool -i <interface> et kontrollida XDP draiveri toetust.
Alustage jälgitavusest, mitte jõustamisest. Kasutage eBPF-kaarte liikluse klassifitseerimiseks ja loendamiseks, et teil oleks normaalse tegevuse baasjoon. Kui olete oma liiklusmustrid mõistnud, liikuge jõustamise juurde: testige esmalt xdpgeneric režiimiga, seejärel vahetage xdpdrv (natiivse) režiimile tootmiskeskkonnas.
Pidage meeles, et XDP tegeleb pakettide tasandi filtreerimisega, mitte toore ribalaiusega. 100 Gbps suuruste rünnakute puhul kombineerige seda bare-metal infrastruktuuri ja BGP FlowSpeciga, et hallata ülesvoolu liiklust enne, kui see serverini jõuab.
Kui teie töökoormused on suure liiklusega ja vajavad kiiret pakettide filtreerimist, pakuvad FDC eriserverid bare-metal aluse, et saada XDP-st maksimaalset kasu.
XDP ja eBPF Linuxi pakettide töötlemiseks
Kuidas XDP ja eBPF töötlevad miljoneid pakette sekundis võrguühenduse draiveri tasandil. Võrdlusnäitajad, DDoS-kasutusjuhtumid, tööriistaketi seadistamine ja riistvaranõuded.
14 min lugemine - 27. mai 2026
Miks on oluline, et VPS oleks võimas ja mittemeterdatud
3 min lugemine - 9. mai 2025

Kas teil on küsimusi või vajate kohandatud lahendust?
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt
Paindlikud võimalused
Ülemaailmne haare
Kohene kasutuselevõtt