XDP ja eBPF Linuxi pakettide töötlemiseks

14 min lugemine - 27. mai 2026

hero section cover
Sisukord
  • XDP ja eBPF kõrge jõudlusega pakettide töötlemiseks
  • Kuidas eBPF ja XDP koos töötavad
  • XDP vs iptables: jõudluse võrdlus
  • DDoS-rünnakute leevendamine ja turvalisus
  • Tööriistad, kasutuselevõtt ja riistvaranõuded
  • XDP-ga alustamine
Jaga

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_buff eraldamist. Kasulik toetamata riistvara testimiseks, kuid ei anna jõudluse kasu.

Pärast iga paketi töötlemist annab XDP-programm otsuse:

OtsusTegevus
XDP_DROPPaketi kõrvaldamine draiveri tasandil
XDP_PASSEdasta tavalisele võrgustikupakettidele
XDP_TXSaada tagasi sama liidese kaudu
XDP_REDIRECTSuunata ümber teisele NIC-ile või AF_XDP kasutaja ruumi pistikupesale
XDP_ABORTEDKõ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=1

Katkestusteta 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:

DraiverPõhiline XDPÜmbersuunamineZero-copy (AF_XDP)
mlx5_coreJahJahJah
i40eJahJahJah
ixgbeJahJahJah
virtio_netJahJahEi
ena (Amazon)JahJahEi

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 off

Standardne 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.

Blogi

Sel nädalal esile tõstetud

Rohkem artikleid
XDP ja eBPF Linuxi pakettide töötlemiseks

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

Rohkem artikleid
background image

Kas teil on küsimusi või vajate kohandatud lahendust?

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt