Linux Paket İşleme için XDP ve eBPF
14 dakikalık okuma - 27 Mayıs 2026
XDP ve eBPF'nin NIC sürücüsü seviyesinde saniyede milyonlarca paketi nasıl işlediği. Benchmarklar, DDoS kullanım durumları, araç zinciri kurulumu ve donanım gereksinimleri.
Yüksek Performanslı Paket İşleme için XDP ve eBPF
XDP (eXpress Data Path) ve eBPF (extended Berkeley Packet Filter), Linux'un çekirdeğin normal ağ yığını devreye girmeden önce ağ paketlerini işlemesine olanak tanır. XDP, gelen her paket için bellek yapıları ayırmak yerine, trafiği doğrudan NIC sürücüsünde yakalar, ne yapılacağına karar verir ve paketi ya düşürür, ya iletir ya da yönlendirir. Sonuç, geleneksel araçların CPU yükünün çok küçük bir kısmıyla, çekirdek başına saniyede milyonlarca paket işleme kapasitesidir. iptables.
eBPF ve XDP'nin Birlikte Çalışma Şekli
eBPF, Linux çekirdeği içindeki bir sanal makinedir. Güvenliği doğrulanmış (sonsuz döngü yok, yetkisiz bellek erişimi yok) ve ardından JIT ile yerel CPU komutlarına derlenmiş özel bayt kodunu çalıştırır. Programların kapsamı sınırlıdır. İsteğe bağlı çekirdek işlevlerini çağıramazlar, yalnızca harita aramaları ve paket yönlendirme gibi görevler için önceden tanımlanmış bir dizi yardımcı işlevi çağırabilirler.
Durum yönetimi için eBPF, paketlerin gelmesinden sonra da kalıcı olan anahtar/değer depoları (hash tabloları, diziler, LPM denemeleri) olan haritaları kullanır. Haritalar kullanıcı alanından okunabilir ve yazılabilir, böylece programı yeniden yüklemeden engelleme listelerini veya yönlendirme kurallarını güncelleyebilirsiniz.
XDP, bir eBPF kanca noktasıdır. Çekirdek bir sk_buff yapısını (geleneksel ağ yığınının dayandığı, paket başına 200-300 baytlık meta veri nesnesi) ayırmadan önce NIC sürücüsünün alım yoluna bağlanır. Performans kazancının kaynağı, bu ayırma işleminin atlanmasıdır.
XDP üç modda çalışır:
- Yerel mod: NIC sürücüsünün içinde çalışır. En iyi performans.
- Yük devredilen mod: NIC'nin ASIC'sinde çalışır. CPU'yu tamamen serbest bırakır.
- Genel mod:
sk_buff. Desteklenmeyen donanımlarda test yapmak için kullanışlıdır, ancak performans avantajı sağlamaz.
Her paketi işledikten sonra, XDP programı bir karar verir:
| Karar | Eylem |
|---|---|
XDP_DROP | Paketi sürücü düzeyinde at |
XDP_PASS | Normal ağ yığınına ilet |
XDP_TX | Aynı arayüzden geri gönder |
XDP_REDIRECT | Başka bir NIC veya AF_XDP kullanıcı alanı soketine yönlendirin |
XDP_ABORTED | Program hatası nedeniyle atın, bir izleme olayı günlüğüne kaydedin |
XDP ve iptables: Performans Karşılaştırması
Rakamlar çarpıcıdır. iptables Saniye başına çekirdek başına yaklaşık 200.000 paketi işler. nftables bunu yaklaşık 400.000 pps'ye çıkarır. Yerel moddaki XDP, aynı donanımda çekirdek başına 10 ila 40 milyon pps işler.
Nedeni basit: bir XDP_DROP bir sınır kontrolü ve bir dönüş değeri gerektirir. Bir iptables DROP ise sk_buff ayrıştırma, netfilter zinciri geçişi, bağlantı izleme araması, DROP eyleminin kendisi ve ardından ayrıştırma gerektirir. 64 baytlık paketlerle 100 Gbps hızında, bir sunucu saniyede 148 milyon paketle karşı karşıya kalır ve bu da paket başına yaklaşık 100 nanosaniye bırakır. Bu ölçekte, sk_buff ayırma işlemi darboğaz haline gelir.
CPU tasarrufu da aynı derecede önemlidir. Bir benchmark testinde engelleme listesini iptables bir karşılaştırmada XDP'ye taşınması, 1 milyon pps'de yazılım kesintisi CPU kullanımını %28'den %3'e düşürdü. Serbest kalan bu kapasiteyle aynı sunucuda uygulama süreçleri, veritabanları veya sanal makineler çalıştırılabilir.
DDoS Azaltma ve Güvenlik
XDP'nin en güçlü barındırma kullanım alanı DDoS azaltmadır. Sürücü düzeyinde çalıştığı için, kötü amaçlı paketler çekirdeğin ağ yığınına ulaşmadan önce düşürülür. XDP'yi çalıştıran tek bir çekirdek, saniyede 26 milyon paketi düşürebilir.
Cloudflare, en az 2018'den beri hacimsel DDoS azaltma için L4Drop adlı XDP tabanlı bir sistem kullanmaktadır. Sistem, saldırı trafiğini XDP bağlamında işler ve engeller, böylece uygulamanın katmanına ulaşmasını önler. Açık kaynaklı bir XDP Katman 4 yük dengeleyicisi olan Meta'nın Katran'ı, Facebook ve Instagram için çekirdek başına 10 milyondan fazla pps hızında trafiği yönetir.
Dinamik filtreleme için, BPF_MAP_TYPE_LPM_TRIE tek bir aramada tek tek IP'leri ve CIDR alt ağlarını kapsayan IP engelleme listelerini yönetmenize olanak tanır. Güncellemeler kullanıcı alanından gerçek zamanlı olarak gerçekleşir, programın yeniden yüklenmesi gerekmez. Aktif bir saldırı sırasında, bpftool:
bpftool map update id <MAP_ID> key <KEY_VALUE> value <VALUE>Gözlemlenebilirlik için eBPF, uygulama başına, IP başına ve akış başına metrikleri doğrudan çekirdek veri yolundan toplar. xdp_md bağlam, ingress_ifindex ve rx_queue_indexgibi telemetri sağlar, böylece hangi arayüzün veya kuyruğun baskı altında olduğunu belirleyebilirsiniz. Uzun vadeli izleme için ebpf_exporter , ham eBPF harita verilerini Grafana'da görselleştirme amacıyla Prometheus uyumlu metriklere dönüştürür.
Araçlar, Dağıtım ve Donanım Gereksinimleri
Araç zinciri, kısıtlı C'yi eBPF bayt koduna derlemek için Clang ve LLVM ile başlar. Bundan sonra, bir yükleyici kütüphanesine ihtiyacınız vardır:
libbpf: üretim kullanımı için standart C kütüphanesi. Çapraz çekirdek taşınabilirliği için CO-RE'yi (Compile Once, Run Everywhere) destekler.libxdp: XDP'ye özeldir, tek bir arayüzde birden fazla XDP programının çalıştırılmasını destekler.cilium/ebpf: Go tabanlı yığınlar için saf bir Go kütüphanesi.
Yönetim için bpftool canlı programları ve harita içeriklerini incelemenizi sağlar. xdp-loader ( xdp-tools paketinden) yükleme ve boşaltma işlemlerini yönetir. BCC, Python/Lua ön uçlarıyla prototip oluşturmak için kullanışlıdır, ancak libbpf CO-RE ile üretim için daha iyi bir seçimdir.
Dağıtımdan önce BPF JIT derleyicisini etkinleştirin:
sysctl -w net.core.bpf_jit_enable=1Kesintiye neden olmayan güncellemeler için, XDP_FLAGS_REPLACE bayrağını kullanarak çalışan bir programı atomik olarak değiştirin. Yükleyici kapandıktan sonra da kalıcı olmaları için /sys/fs/bpf/ , yükleyici kapandıktan sonra da kalıcı olmalarını sağlayın.
Donanım ve Çekirdek Uyumluluğu
XDP, çekirdek 4.8'de tanıtıldı, ancak tüm özellik seti için 5.x veya üstü sürümler önerilir. uname -r ve BPF dosya sisteminin /sys/fs/bpf/.
Hangi XDP özelliklerinin kullanılabilir olduğu, NIC sürücünüz tarafından belirlenir:
| Sürücü | Temel XDP | Yönlendirme | Sıfır kopyalama (AF_XDP) |
|---|---|---|---|
mlx5_core | Evet | Evet | Evet |
i40e | Evet | Evet | Evet |
ixgbe | Evet | Evet | Evet |
virtio_net | Evet | Evet | Hayır |
ena (Amazon) | Evet | Evet | Hayır |
Sürücünüzü ethtool -i <interface>. Yerel mod desteklenmiyorsa, sistem sk_buff ayrımdan sonra çalışır ve performans avantajı sunmaz.
XDP programını eklemeden önce GRO ve LRO'yu devre dışı bırakın, çünkü bunlar çakışır:
ethtool -K <iface> gro off lro offStandart XDP, paketlerin tek bir 4.096 baytlık bellek sayfasına sığmasını gerektirir. i40e ve ice sürücülerde, x86 MTU sınırı 3.046 bayttır.
XDP'ye Başlarken
Öncelikle ortamınızı değerlendirin. uname -r komutunu çalıştırarak çekirdeğin 4.8+ (tercihen 5.x) olduğunu doğrulayın ve ethtool -i <interface> komutunu çalıştırarak yerel XDP sürücü desteğini kontrol edin.
Zorlama ile değil, gözlemlenebilirlik ile başlayın. Normal faaliyetlerin bir temelini oluşturmak için eBPF haritalarını kullanarak trafiği sınıflandırın ve sayın. Trafik modellerinizi anladıktan sonra, zorlama aşamasına geçin: önce xdpgeneric moduyla test edin, ardından xdpdrv (yerel) moduna geçin.
XDP'nin ham bant genişliğini değil, paket düzeyinde filtrelemeyi işlediğini unutmayın. 100 Gbps'lik büyük ölçekli saldırılar için, sunucuya ulaşmadan önce yukarı akış trafiğini yönetmek üzere bunu bare metal altyapı ve BGP FlowSpec ile birleştirin.
Hızlı paket filtreleme gerektiren yüksek trafikli iş yükleri çalıştırıyorsanız, FDC'nin özel sunucuları XDP'den en iyi şekilde yararlanmak için bare-metal altyapı sağlar.
Linux Paket İşleme için XDP ve eBPF
XDP ve eBPF'nin NIC sürücüsü seviyesinde saniyede milyonlarca paketi nasıl işlediği. Benchmarklar, DDoS kullanım durumları, araç zinciri kurulumu ve donanım gereksinimleri.
14 dakikalık okuma - 27 Mayıs 2026
Güçlü ve ölçülmemiş bir VPS'ye sahip olmak neden önemlidir?
3 dakikalık okuma - 9 Mayıs 2025

Sorularınız mı var veya özel bir çözüme mi ihtiyacınız var?
Esnek seçenekler
Küresel erişim
Anında dağıtım
Esnek seçenekler
Küresel erişim
Anında dağıtım