
eBPF là gì? Công nghệ Linux thay đổi observability và bảo mật
eBPF là công nghệ đột phá trong nhân Linux cho phép chạy các chương trình được cách ly trong kernel mà không cần sửa đổi mã nguồn hay nạp module. Thay vì phải chờ hàng năm để kernel Linux tích hợp tính năng mới, developers có thể mở rộng kernel tại runtime một cách an toàn và hiệu quả.
Ngày nay, eBPF được Google, Meta, Netflix, Cloudflare và nhiều công ty lớn dùng cho networking, observability, tracing và bảo mật. Bài viết này giải thích eBPF hoạt động thế nào và tại sao nó quan trọng.

Từ cBPF đến eBPF: Lịch sử ngắn gọn
BPF ban đầu là viết tắt của Berkeley Packet Filter, ra đời năm 1992 cho công cụ lọc gói tin tcpdump. Phiên bản gốc chỉ xử lý packet trong kernel một cách hiệu quả.
Năm 2014, Alexei Starovoitov và Daniel Borkmann mở rộng BPF thành eBPF (extended BPF) với kiến trúc hoàn toàn mới. eBPF không còn giới hạn ở packet filtering mà trở thành nền tảng chạy chương trình sandboxed trong kernel.
Theo ebpf.io, thuật ngữ BPF vẫn được dùng trong mã nguồn Linux kernel, nhưng trong cộng đồng thường dùng eBPF như một thuật ngữ độc lập. Phiên bản cũ đôi khi gọi là cBPF để phân biệt.
Nguyên lý hoạt động của eBPF
eBPF hoạt động theo mô hình event-driven. Chương trình eBPF được nạp vào kernel và gắn vào các hook point như system calls, kernel tracepoints, network events.
Các thành phần chính
- Hook points: Điểm neo trong kernel hoặc user space nơi eBPF program chạy. Bao gồm kprobes, uprobes, tracepoints, XDP.
- Verifier: Bộ kiểm tra đảm bảo chương trình an toàn trước khi chạy trong kernel.
- JIT compiler: Biên dịch bytecode thành mã máy tối ưu cho từng kiến trúc CPU.
- eBPF maps: Cấu trúc dữ liệu chia sẻ giữa kernel space và user space.
- Helper functions: API ổn định cho phép eBPF truy cập kernel data một cách an toàn.

Lớp bảo mật đa tầng
Theo Linux Kernel Documentation, eBPF đảm bảo an toàn qua nhiều lớp:
- Required Privileges: Chỉ process có quyền root hoặc
CAP_BPFmới nạp được eBPF program, trừ khi unprivileged eBPF được bật. - Verifier: Kiểm tra chương trình không chạy vòng lặp vô hạn, không truy cập ngoài biên, không dùng biến chưa khởi tạo.
- Hardening: Chống Spectre, constant blinding, program execution protection sau khi xác minh.
- Abstracted Runtime Context: eBPF không truy cập kernel memory tùy ý mà chỉ qua helper functions được kiểm soát.
eBPF trong 4 lĩnh vực chính
eBPF đã mở ra làn sóng công nghệ mới trong 4 lĩnh vực quan trọng:
| Lĩnh vực | Mô tả | Ví dụ |
|---|---|---|
| Networking | Xử lý packet hiệu năng cao trong kernel, load balancing, protocol parsers. | Cilium, XDP, Meta data center |
| Observability | Thu thập metrics, tracing, profiling overhead thấp mà không cần export samples. | Pixie, Hubble, Netflix |
| Security | Giám sát system calls, socket-level filtering, container runtime security. | Falco, Tetragon, Cloudflare |
| Tracing | Kprobes, uprobes, tracepoints cho phép introspection sâu vào kernel và ứng dụng. | bpftrace, BCC, Brendan Gregg tools |
Công cụ và hệ sinh thái
Hiếm khi developers viết eBPF program từ đầu bằng C và biên dịch qua LLVM. Thông thường, họ dùng các công cụ trừu tượng cao hơn:
- Cilium: Networking và security cho Kubernetes dựa trên eBPF, thay thế kube-proxy và iptables.
- BCC: Framework cho phép viết Python có eBPF program nhúng bên trong, chủ yếu cho tracing.
- bpftrace: Ngôn ngữ tracing cấp cao lấy cảm hứng từ awk, C, DTrace.
- libbpf: Thư viện C/C++ tải và quản lý eBPF object files.
- aya / libbpf-rs: Thư viện Rust để viết eBPF program hoàn toàn bằng Rust.

So sánh với cách tiếp cận truyền thống
Trước eBPF, để mở rộng kernel Linux, teams có 2 lựa chọn:
- Sửa kernel source: Mất hàng năm để được merge và phổ biến.
- Kernel module: Dễ gây kernel panic, phải sửa mỗi khi kernel update, thiếu cơ chế sandboxing.
eBPF mang lại programmability tương tự JavaScript cho browser: sandbox an toàn, JIT compiler cho hiệu năng gần native, và khả năng cập nhật logic mà không cần restart hay patch kernel.
Đâu là giới hạn của eBPF?
eBPF không phải là giải pháp cho mọi vấn đề. Một số hạn chế:
- Kích thước chương trình bị giới hạn bởi verifier complexity limit.
- Không gọi được arbitrary kernel functions, chỉ dùng helper API ổn định.
- Yêu cầu kernel 4.x+ (bpftrace cần 4.9+, CO-RE cần 5.x+).
- Unprivileged eBPF bị hạn chế nghiêm ngặt vì lý do bảo mật.
- Spectre mitigation làm chậm một số trường hợp kernel tấn công.
Kết luận
eBPF đang định hình lại cách chúng ta quan sát, bảo vệ và mạng hóa hạ tầng Linux. Thay vì coi kernel như hộp đen ổn định nhưng khó thay đổi, eBPF biến nó thành nền tảng có thể lập trình được tại runtime.
Với sự phổ biến của Kubernetes, cloud native và observability-first, eBPF sẽ càng trở nên quan trọng. Nếu bạn làm việc với Linux infrastructure, đây là công nghệ cần nắm vững.
