
eBPF là gì?
eBPF (Extended Berkeley Packet Filter) là công nghệ cho phép chạy chương trình sandboxed an toàn trong nhân Linux (kernel) mà không cần thay đổi mã nguồn kernel hay nạp kernel module. eBPF mở rộng khả năng kernel tại runtime thông qua môi trường thực thi được xác minh với JIT compilation cho hiệu suất gần như native.
Ban đầu phát triển tại Facebook/Meta bởi Alexei Starovoitov và Daniel Borkmann, eBPF đã tiến hóa từ công cụ lọc gói tin (classic BPF) thành một máy ảo mạnh mẽ cho kernel programmability. eBPF Foundation được thành lập năm 2021 bởi Meta, Google, Isovalent, Microsoft và Netflix để thúc đẩy hệ sinh thái.

Kiến trúc cốt lõi
Máy ảo eBPF
eBPF VM sở hữu 11 thanh ghi 64-bit, program counter và 512-byte stack space. Hỗ trợ function calls và tail calls cho tính mô-đun. Bytecode sau khi xác minh được JIT compile thành native machine instructions, đạt hiệu suất ngang ngửa kernel code gốc.
Verifier — Trái tim an toàn
Trước khi thực thi, verifier phân tích tĩnh mã nguồn để đảm bảo an toàn tuyệt đối:
- Không truy cập bộ nhớ vượt ranh giới
- Không vòng lặp vô hạn (bảo chứng chắc chắn dừng)
- Sử dụng thanh ghi và con trỏ hợp lệ
- Tuân thủ giới hạn độ phức tạp
- Quy trình 2 bước: kiểm tra DAG (CFG/loops) → mô phỏng đường đi với trạng thái thanh ghi/stack
BPF Maps — Bộ nhớ chia sẻ
Các cấu trúc key/value trong kernel space cho phép eBPF programs trao đổi dữ liệu với userspace. Các loại map phổ biến:
- Hash tables, arrays — tra cứu nhanh O(1)
- LRU — tự động loại bỏ mục ít dùng nhất
- Ring buffers — hiệu suất cao cho streaming dữ liệu
- Stack trace — ghi dấu vết stack kernel/userspace
- LPM (Longest Prefix Match) — routing bảng longest prefix
Helper Functions — API kernel ổn định
Cung cấp interface an toàn cho eBPF programs thực hiện các hành động như: truy cập map, thao tác gói tin, lấy thời gian, sinh số ngẫu nhiên, truy cập ngữ cảnh kernel.

Ứng dụng thực tế
Mạng với XDP (Express Data Path)
XDP chạy eBPF programs tại điểm sớm nhất trong networking stack — ngay tại driver NIC, bỏ qua hầu hết overhead networking. Hiệu suất đạt 26 triệu gói tin/giây/core trên phần cứng phổ thông.
Các hành động XDP: XDP_PASS, XDP_DROP, XDP_ABORTED, XDP_TX, XDP_REDIRECT (thông qua AF_XDP zero-copy sockets).
Cloudflare sử dụng XDP eBPF cho: kháng DDoS volumetric (drop layer 3 attack packets) và load balancing layer 4 (phân phối traffic tỉ mỉ trên server farm).
Quan sát hệ thống với BCC/bpftrace
BCC (BPF Compiler Collection) là toolkit tạo tracing programs hiệu quả với Python/Lua frontend, LLVM wrapper, và CLI tools cho profiling.
bpftrace là ngôn ngữ tracing high-level lấy cảm hứng từ awk, C, DTrace — compile script sang eBPF bytecode qua LLVM backend.
Netflix Flow Exporter: sidecar dùng eBPF tracepoints thu thập TCP flows near real-time với <1% CPU/memory overhead, xử lý tỷ lệ flow logs khổng lồ mỗi giờ.

An ninh runtime
- Falco: Cloud-native runtime security dùng eBPF phát hiện hoạt động bất thường tại kernel layer, làm giàu ngữ cảnh container/K8s
- Tetragon: eBPF-based security observability và enforcement, deep visibility mà không cần thay đổi ứng dụng, overhead thấp nhờ in-kernel filtering thông minh
- BPF LSM: Google upstreamed cho phép chính sách bảo mật programmable qua eBPF
Tracing chung
eBPF cho phép trace system calls, function entry/exit, kernel tracepoints, network events qua kprobes/uprobes. Ứng dụng cho performance troubleshooting, application profiling, container runtime security.
Công cụ và dự án phổ biến
| Công cụ | Mục đích | Repo |
|---|---|---|
| Cilium | K8s networking, security, observability | github.com/cilium/cilium |
| Tetragon | Runtime security enforcement | github.com/cilium/tetragon |
| Pixie | Auto-telemetry cho K8s (không instrumentation thủ công) | github.com/pixie-io/pixie |
| bcc-tools | Hàng chục tools: opensnoop, biosnoop, execsnoop, tcpconnect, runqlat… | github.com/iovisor/bcc |
| libbpf | C/C++ library load/manage eBPF programs | github.com/libbpf/libbpf |
| bpftop | Real-time eBPF program monitoring | github.com/cilium/bpftop |
| kubectl-trace | Schedule bpftrace programs trên K8s cluster | github.com/cilium/kubectl-trace |

Lợi ích hiệu suất
- Tốc độ near-native: JIT-compiled eBPF chạy hiệu quả ngang kernel code native
- Quan sát zero-overhead: Pixie, Flow Exporter cung cấp deep insights với <1% overhead
- Mạng hiệu suất cao: XDP đạt 26M packets/sec/core, bỏ qua networking stack đắt giá
- Cập nhật động: Thay thế eBPF programs không reboot kernel hay reload module
- Mở rộng an toàn: Mở rộng kernel functionality không ảnh hưởng stability/security
Giới hạn và thách thức
- Verifier phức tạp: Có thể reject programs vì lý do tinh tế, đòi hỏi hiểu sâu để phát triển programs phức tạp
- Yêu cầu đặc quyền: Nạp eBPF thường cần CAP_BPF hoặc root (unprivileged eBPF tồn tại nhưng bị hạn chế)
- Instruction set hạn chế: Không truy cập bộ nhớ tùy ý, loop constructs bị giới hạn
- Phụ thuộc kernel version: Tính năng mới cần kernel mới; distro cũ có thể thiếu hỗ trợ
- Debugging khó khăn: Hạn chế công cụ debug truyền thống; phụ thuộc trace_printk, perf
- Map size constraints: eBPF maps có giới hạn kích thước cần lưu ý cho stateful programs
Tài nguyên học tập
Tài liệu chính thức
- eBPF.io — giới thiệu, tutorial, community resources
- Kernel BPF docs — verifier, maps, programs, syscall API
- Cilium BPF guide — tài liệu toàn diện
Sách tham khảo
- “Learning eBPF” — Liz Rice (O’Reilly, 2023)
- “BPF Performance Tools” — Brendan Gregg (Addison-Wesley, 2019)
- “Linux Observability with BPF” — Calavera & Fontana (O’Reilly, 2019)
Thực hành trực tiếp
Cộng đồng
- eBPF Slack: ebpf.io/slack/
- GitHub: bcc, cilium, eunomia-bpf
Kết luận
eBPF đang thay đổi bản chất cách chúng ta quan sát, bảo vệ và mở rộng Linux kernel. Từ load balancing tại Cloudflare, flow logging tại Netflix, đến bảo mật runtime tại Falco/Tetragon — eBPF đã chứng minh là công nghệ nền tảng không thể thiếu cho hạ tầng hiện đại. Với sự hỗ trợ từ các công ty hàng đầu và cộng đồng open-source sôi động, eBPF sẽ tiếp tục định hình tương lai của Linux observability và security.
