eBPF いーびーぴーえふ
簡単に言うとこんな感じ!
OS(Linux)の超深い部分に、安全に「小さなプログラム」を差し込める仕組みだよ! カーネルを改造せずに、ネットワークの監視・セキュリティチェック・パフォーマンス計測が爆速でできちゃうんだ。Kubernetesやクラウドネイティブ界隈で今めちゃくちゃ注目されてるって感じ!
eBPFとは
eBPF(extended Berkeley Packet Filter) は、Linuxカーネル(OSの中核部分)の動作を変えることなく、カーネル内で任意のプログラムを安全に実行できる革新的な技術です。従来、カーネルの挙動をカスタマイズするにはカーネルモジュールを書いてOSに組み込む必要があり、バグが混入するとシステム全体がクラッシュする危険がありました。eBPFはその問題を解決し、検証済みの小さなプログラム(BPFプログラム)をカーネル内のフックポイントに安全に注入できる仕組みを提供します。
名前の由来は1992年に登場した「BPF(Berkeley Packet Filter)」で、もともとはネットワークパケットのフィルタリング専用技術でした。2014年以降に大幅に拡張(extended)され、ネットワーク以外のあらゆるカーネルイベントをフックできるようになったため「eBPF」と呼ばれるようになりました。現在は単に「BPF」と呼ばれることも多いです。
実務では、Kubernetesクラスターの観測(何が遅いかリアルタイムで把握する)、セキュリティポリシーの適用(不審なシステムコールをブロックする)、高速ネットワーク処理(ファイアウォール・ロードバランサーをカーネル内で動かす)などに活用されています。CiliumやFalco、Datadogなどの著名なツールがeBPFを核心技術として採用しています。
eBPFの仕組みと構造
eBPFプログラムがカーネル内で動くまでには、以下のステップを踏みます。
| ステップ | 内容 |
|---|---|
| ① 作成 | C言語などでeBPFプログラムを記述 |
| ② コンパイル | LLVMなどでeBPFバイトコードに変換 |
| ③ 検証(Verify) | カーネルのVerifierが安全性を厳密にチェック(無限ループ・メモリ違反を拒否) |
| ④ JITコンパイル | バイトコードをCPUネイティブ命令に変換し高速化 |
| ⑤ アタッチ | カーネル内のフックポイント(イベント発生箇所)に紐付け |
| ⑥ 実行 | 対応するイベントが起きるたびにカーネル内でプログラムが実行される |
フックポイントの種類
eBPFプログラムをアタッチできる主な場所は以下の通りです。
| フックの種類 | 代表的な用途 |
|---|---|
| kprobe / kretprobe | カーネル内の任意の関数の呼び出し・戻りを捕捉 |
| tracepoint | カーネルが定義した安定的なトレースポイント |
| XDP(eXpress Data Path) | NIC(ネットワークカード)レベルで最速にパケット処理 |
| TC(Traffic Control) | ソケット寄りの層でパケットの加工・フィルタリング |
| LSM(Linux Security Modules) | セキュリティポリシーをカーネルレベルで強制 |
| uprobe | ユーザー空間アプリの関数呼び出しをカーネルから観測 |
マップ(BPF Maps)
eBPFプログラムはカーネル内で動きますが、その結果をユーザー空間のアプリと共有する仕組みが BPF Maps です。ハッシュマップ・配列・リングバッファなど複数の型があり、監視ツールはここからメトリクスを読み取ります。
歴史と背景
- 1992年 — BSD UNIX用に「BPF(Berkeley Packet Filter)」が論文発表。
tcpdumpなどのパケットキャプチャに採用 - 1997年 — Linuxカーネル 2.1.75 にBPFが取り込まれる
- 2014年 — Alexei Starovoitov が Linux 3.18 に eBPF を実装。レジスタ数・命令セットを大幅拡張しネットワーク以外でも利用可能に
- 2016年 — Cilium プロジェクト誕生。eBPFをKubernetesのネットワーク基盤に活用する先駆けとなる
- 2018年 — Facebook(現Meta)が Katran(XDPベースのロードバランサー)をOSSとして公開。大規模活用が実証される
- 2020年 — Linuxカーネル 5.8 でeBPFの機能が大きく充実(リングバッファ追加など)
- 2021年 — eBPF Foundation が Linux Foundation 傘下に設立(Google・Meta・Microsoft・Isovalent参加)
- 2022年以降 — Windowsへの移植(eBPF for Windows)も進み、OSを超えた技術標準になりつつある
eBPFを使う主要ツール・プロジェクト比較
eBPFを活用した代表的なツールを用途別に整理します。
| ツール名 | 用途カテゴリ | 概要 |
|---|---|---|
| Cilium | ネットワーク / セキュリティ | Kubernetesのネットワークプラグイン(CNI)。サービスメッシュにも対応 |
| Falco | セキュリティ検知 | 不審なシステムコールをリアルタイム検知。CNCFプロジェクト |
| Pixie | 可観測性 | コード変更不要でKubernetesアプリを自動インストルメント |
| bpftrace | デバッグ / トレース | awk風の高レベル言語でカーネル内をワンライナー調査 |
| BCC(BPF Compiler Collection) | 開発ツールキット | PythonやLuaからeBPFプログラムを書けるフレームワーク |
| Katran | ロードバランサー | Meta製。XDPで超高速L4ロードバランシング |
| Datadog Agent | 監視 SaaS | eBPFでエージェントレスに近い形でメトリクス収集 |
eBPFとカーネルモジュールの比較
eBPFプログラムの処理フロー
関連する規格・RFC
※ eBPFはIETF RFC等の標準規格ではなくLinuxカーネルのサブシステムとして発展してきましたが、XDP関連の動作はRFCで参照されています。
| 規格・参照 | 内容 |
|---|---|
| Linux Kernel Docs: BPF | Linuxカーネル公式BPFドキュメント |
| RFC 9293 | TCP仕様(XDP/eBPFベースのTCP処理の文脈で参照される) |
関連用語
- Kubernetes — コンテナオーケストレーション基盤。Ciliumなどを通じてeBPFと深く連携
- Linux — eBPFのホストOS。カーネルバージョンによってeBPF機能が異なる
- 可観測性(Observability) — システムの内部状態を外部から把握する概念。eBPFは可観測性ツールの核心技術
- コンテナ — eBPFはコンテナ環境のネットワーク・セキュリティ管理に多用される
- サービスメッシュ — マイクロサービス間通信の管理基盤。CiliumはeBPFでサイドカー不要のメッシュを実現
- ファイアウォール — eBPF/XDPを使いカーネル内で超高速パケットフィルタリングが可能
- カーネル — OSの中核。eBPFはカーネルを直接改変せずに拡張する仕組み
- ゼロトラストセキュリティ — FalcoなどeBPFベースのツールはゼロトラスト実装の監視層として機能する