eBPF
JavaScript dał programistom dostęp do przeglądarki. eBPF daje programistom dostęp do jądra Linux — bezpiecznie, bez modyfikowania kernel source i bez rebootu.
6 obszarów zastosowań eBPF
eBPF rewolucjonizuje każdy obszar gdzie tradycyjne podejście wymagało kernel modules lub user-space workarounds.
Networking
Cilium CNI, XDP load balancing, DDoS mitigation, packet filtering
Narzędzia: Cilium, Katran (FB)
Observability
Auto-instrumentation HTTP/gRPC, tracing syscalls, profiling
Narzędzia: Pixie, Parca, bpftrace, BCC
Security
Runtime security monitoring, syscall filtering, intrusion detection
Narzędzia: Falco, Tetragon, Sysdig
Performance
CPU flame graphs, latency analysis, TCP optimization
Narzędzia: Pyroscope, perf + eBPF, bpftrace
Load Balancing
L4 LB bez iptables, XDP-based forwarding, Maglev hashing
Narzędzia: Cilium LB, Cloudflare
Service Mesh
Sidecar-less service mesh, mTLS bez proxy
Narzędzia: Cilium Mesh, Ambient Mesh (Istio)
Kluczowe narzędzia eBPF
Ekosystem eBPF obejmuje zarówno production-grade narzędzia jak i narzędzia do ad-hoc analizy systemów.
Cilium
Kubernetes networking + security
Pixie
Auto-instrumentation observability
Falco
Runtime security monitoring
bpftrace
Ad-hoc kernel tracing (one-liners)
BCC Tools
Pre-built analysis tools (execsnoop, etc.)
Pyroscope
Continuous CPU profiling
Często zadawane pytania
Co to jest eBPF i dlaczego jest przełomowy?
eBPF (extended Berkeley Packet Filter) to technologia w jądrze Linux która pozwala uruchamiać niestandardowy, sandboxed kod bezpośrednio w kernel space — bez modyfikowania kodu jądra i bez ładowania modułów kernel. Jest bezpieczny: BPF verifier sprawdza kod przed uruchomieniem — nie może crashnąć jądra. Jest programowalny: możesz dynamicznie instrumentować dowolny punkt w jądrze (system calls, network events, function calls). Dlaczego przełomowy: tradycyjnie dostęp do kernel space wymagał pisania kernel modules (niebezpieczne, trudne, wymagają rebootu). eBPF pozwala na kernel programmability bez tych ograniczeń. Analogia: Brendan Gregg (Netflix) porównał eBPF do JavaScript dla przeglądarki — dał programistom dostęp do kernel tak jak JS dał programistom dostęp do DOM. Kluczowe zastosowania: Networking — wysokowydajny packet processing, load balancing (Cilium). Observability — zbieranie metrics, profiling bez overheadu (Pixie, Tetragon). Security — runtime security, syscall filtering (Falco, Tetragon). Performance analysis — low-overhead profiling w produkcji (Pixie, Parca). Historia: BPF stworzony w 1992 do filtrowania pakietów. eBPF (extended) w Linuksie od 2014. Eksplozja adopcji po 2019.
Jak działa eBPF — architektura i BPF maps?
Architektura eBPF: Program eBPF piszesz w C (restricted subset) lub Rust. Kompiluje do BPF bytecode (LLVM/Clang). BPF Verifier sprawdza: brak nieskończonych pętli, poprawne dostępy do pamięci, bounded execution time. JIT Compiler kompiluje BPF bytecode do natywnych instrukcji CPU (x86, ARM). Program jest wstrzykiwany jako hook do punktu w jądrze (kprobe, tracepoint, XDP hook, socket filter). Punkty attach: kprobes/kretprobes — dynamic tracing dowolnej funkcji kernel. Tracepoints — statyczne punkty trace w jądrze. XDP (eXpress Data Path) — packet processing przed alokacją skb, ultra-niskie latency. TC (Traffic Control) — network packet processing. Uprobe/uretprobe — user-space function tracing. LSM (Linux Security Module) — security hooks. BPF Maps — mechanizm komunikacji: BPF Maps to struktury danych współdzielone między programem eBPF a user-space. Typy map: hash map, array, ring buffer, LRU map, per-CPU map. Użycie: eBPF program zbiera dane (np. latency per syscall) → zapisuje do map → user-space aplikacja czyta z map i prezentuje. BPF CO-RE (Compile Once, Run Everywhere): modern eBPF dzięki BTF (BPF Type Format) może działać na różnych wersjach kernela bez rekompilacji.
eBPF w networking — Cilium i XDP?
eBPF w networking: Cilium (CNCF Graduated): CNI plugin dla Kubernetes oparty na eBPF. Zastępuje iptables dla service networking (dramatycznie szybszy). Network policy enforcement przez eBPF (Layer 3/4/7). Mutual authentication (mTLS) bez sidecar proxy. Tetragon — runtime security i observability. Hubble — distributed observability dla Kubernetes. Używany przez Google GKE, Azure AKS, AWS EKS. XDP (eXpress Data Path): pakiety są przetwarzane przez eBPF zanim zostaną alokowane do socket buffer. Pozwala na line-rate packet processing. Use cases: DDoS mitigation (Facebook używa XDP do ochrony przed DDoS), high-performance load balancing (Cloudflare), network monitoring. Benchmark: XDP może przetwarzać 10-25 Mpps na zwykłym serwerze vs. 1-3 Mpps przez iptables. iptables replacement: Linux networking historycznie opierało się na iptables. eBPF/Cilium zastępuje iptables: szybsze (O(1) vs. O(n)), lepszy observability, L7-aware. TC (Traffic Control) eBPF: packet shaping, QoS, bandwidth management przez eBPF programy attach'owane do network interfaces. Socket programs: BPF_PROG_TYPE_SOCK_OPS do optymalizacji TCP stack (Cloudflare używa do redukcji latency).
eBPF w observability — Pixie, Tetragon, Parca?
eBPF w Observability: Pixie (New Relic, CNCF Sandbox): auto-instrumentation bez kodu — zbiera HTTP/gRPC/MySQL/Redis requests przez eBPF upprobes. Nie wymaga zmian w aplikacji, nie wymaga sidecar. Low overhead (1-5% CPU). Live debugging w produkcji przez Pixie Live UI. Parca / Pyroscope: continuous profiling przez eBPF. Zbiera CPU flame graphs bez overhead profilerów opartych na sampling (np. perf, async-profiler). Zawsze włączony w produkcji. Grafana Pyroscope — hosted continuous profiling. Bpftrace: high-level tracing language dla eBPF. Jednolinijkowe programy do analizy systemu: bpftrace -e 'kprobe:do_sys_open { printf("%s\n", str(arg1)); }' (pokaż wszystkie otwierane pliki). BCC (BPF Compiler Collection): Python/C biblioteka do pisania eBPF programów. Setki gotowych narzędzi (execsnoop, opensnoop, tcpconnect). Autorzy: Brendan Gregg (Netflix, teraz Intel). libbpf: nowoczesna C library do eBPF (preferowana nad BCC dla produkcji). Falco (CNCF): security monitoring przez eBPF (i inne mechanizmy). Definiujesz rules dla syscall patterns. Alerty gdy container wykonuje podejrzane syscalls. Tetragon (Cilium): eBPF-based security enforcement + observability. Policy enforcement na poziomie kernel (kill process bez wyjścia do user-space).
Jak zacząć z eBPF — learning path i zasoby?
Learning Path eBPF: Podstawy Linux: zrozumienie jak działa kernel (system calls, VFS, network stack). Niezbędne ale nie musisz być ekspertem. Krok 1 — Zrozum koncepty: przeczytaj 'What is eBPF?' na ebpf.io. Obejrzyj prezentację Brendan Gregg 'eBPF Superpowers'. Krok 2 — Zacznij od bpftrace (najłatwiejszy): bpftrace jest jak awk dla kernel events. Eksperymentuj z gotowymi one-linery. Krok 3 — BCC tools: zainstaluj bcc-tools, eksploruj opensnoop, execsnoop, tcpretrans. Zrozum jak są zbudowane. Krok 4 — libbpf + C: napisz swój pierwszy eBPF program w C z libbpf. Skeleton based development (bpftool gen skeleton). Krok 5 — Rust eBPF (aya): nowoczesna alternatywa — pisz eBPF w Rust z type-safety. Krok 6 — Production tools: wdróż Cilium w Kubernetes. Użyj Pixie do obserwacji aplikacji. Zasoby: ebpf.io — oficjalna strona. 'Learning eBPF' by Liz Rice (O'Reilly, 2023). isovalent.com/labs — bezpłatne labs eBPF. cilium.io/learn — tutoriale. Brendan Gregg blog i BPF Performance Tools (książka). Wymagania: Linux kernel 4.4+ (podstawowe eBPF), kernel 5.x+ dla zaawansowanych features. Nie Windows (eBPF for Windows istnieje ale jest limitowane).
Powiązane artykuły
Skontaktuj się z nami
Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.
Wyślij zapytanie
Telefon
+48 790 814 814
Pon-Pt: 9:00 - 18:00
adam@fotz.pl
Odpowiadamy w ciągu 24h
Adres
Plac Wolności 16
61-739 Poznań
Godziny pracy
Wolisz porozmawiać?
Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.
Zadzwoń teraz