eBPF (extended Berkeley Packet Filter)(イービーピーエフ)
Alexei Starovoitov 2014年Linux 3.18 で導入したカーネル内仮想マシン。ネットワーク / トレーシング / セキュリティ / 監視のプログラマブル化を実現するLinux 現代観の中核技術。
概要
eBPF (extended Berkeley Packet Filter) はAlexei Starovoitov (元Plumgrid → Cumulus → Facebook → Isovalent) が主導開発したLinux カーネル内仮想マシン。2014年12月Linux 3.18 で初期統合、元のBPF (1992 Steven McCann / Van Jacobson・パケットフィルタリング言語) を汎用化拡張。eBPF プログラムはユーザ空間 (clang / Rust 等) でコンパイル → eBPF Verifier 検証 → カーネル JIT 実行で、ネットワーク / トレーシング / セキュリティ / 監視のプログラマブル化を実現する。
eBPF の主要利用領域
| 領域 | 代表ツール |
|---|---|
| ネットワーク (XDP) | Cilium / Katran (Facebook) |
| ロードバランサ | Katran / Maglev |
| トレーシング | bpftrace / bcc / SystemTap |
| パフォーマンス監視 | Pixie / Inspektor Gadget |
| セキュリティ | Falco / Tetragon |
| サンドボックス | seccomp-bpf |
| Kubernetes | Cilium CNI / Service Mesh |
eBPF アーキテクチャ
- 書込み: C / Rust / Go プログラム
- コンパイル: clang → eBPF byte code
- 読込: bpf() システムコール (BPF_PROG_LOAD)
- 検証: eBPF Verifier (静的解析・無限ループ / 不正メモリアクセス検出)
- JIT: アーキネイティブ機械語へ変換 (x86 / ARM)
- アタッチ: kprobe / uprobe / tracepoint / XDP / cgroup 等にフック
- 実行: イベント時にカーネル内安全実行
eBPF プログラム種別
| 種別 | フックポイント |
|---|---|
| kprobe / kretprobe | カーネル関数前後 |
| uprobe / uretprobe | ユーザ空間関数 |
| tracepoint | 静的トレースポイント |
| perf_event | パフォーマンスカウンタ |
| XDP | NIC ドライバ最早期 |
| TC (Traffic Control) | qdisc レベル |
| cgroup | プロセスグループ |
| socket | socket イベント |
| LSM (Linux Security Module) | セキュリティフック |
| SK_SKB / SK_REUSEPORT | ソケットレイヤ |
XDP (Express Data Path)
eBPF を使った高性能パケット処理フレームワーク。NIC ドライバの最早期 (skb 作成前) でパケット処理を行うため、Linux カーネル経由の約1/10 オーバーヘッドでDDoS 対策 / ロードバランサ / ファイアウォール / モニタリングを実現。Facebook の Katran (L4 ロードバランサ) は数億req/sec を処理。
主要プロジェクト
- Cilium (Isovalent): Kubernetes CNI + Service Mesh
- Tetragon (Isovalent): セキュリティ可観測性
- Hubble: Cilium 可視化
- Falco: ランタイムセキュリティ
- bpftrace: 高水準トレーシングDSL
- bcc (BPF Compiler Collection): Python / Lua ツール群
- Pixie (New Relic): K8s 観測
- Inspektor Gadget: K8s 用 eBPF ツール
- Katran: Facebook L4 LB
- pwru (Cilium): packet where are you (パケット追跡)
eBPF アライアンス
2021年Linux Foundation eBPF Foundation 発足。Google / Meta / Microsoft / Netflix / Isovalent / Red Hat 等が参加、eBPF をLinux 標準観測 / ネットワーク技術として推進。
関連用語との違い
- vs カーネルモジュール: eBPF はSandbox 安全 / モジュールはフルアクセス
- vs DPDK: 完全ユーザ空間 / カーネル内
- vs kprobe: トレース機構 / 汎用VM
FAQ
Q1: 一般用途で意義? A: 直接書く機会は少ないが、Kubernetes / Docker 環境でCilium / Falco 等が裏で動作。観測・パフォーマンス調査の主要技術。
Q2: 学習リソース? A: ebpf.io 公式 / Brendan Gregg "BPF Performance Tools" / Liz Rice "Learning eBPF" (2023)。 Tutorials の充実。
Q3: なぜ仮想マシン? A: カーネル内コード実行のセキュリティ確保。Verifier が無限ループ / 不正メモリアクセス / 任意分岐を完全検証、安全性保証。