ChatGPT Deep Research https://chatgpt.com/c/681ca9ca-3978-8013-8596-1820479b72d5 * 新しいユースケース(ネットワーク、トレーシング、セキュリティなど) * ユーザーランドツール(bpftool, libbpfなど)の更新 * 関連プロジェクト(Cilium, Falco, BCCなど)との関係や連携 # Linux eBPFの2022年以降の主要アップデート ## 1. eBPFの新しいユースケース 近年、eBPFの適用範囲は従来の**観測(Observability)・ネットワーキング・セキュリティ**の3分野からさらに拡大し、新たなユースケースが登場しています。以下に主要な例を挙げます。 * **ネットワーク性能の向上と監視:** eBPFはデータセンターネットワークの高速化に大きく貢献しています。例えば、CiliumのL4ロードバランサではXDPを活用してスループットを2倍に高め、CPU使用率を72分の1に削減することに成功しています。Facebook(Meta)が開発したKatranロードバランサも2018年にオープンソース化され、データセンター内を出入りする全てのパケット処理にeBPFが用いられるなど、**eBPFによる高速・柔軟なパケット処理**が企業規模で定着しています。またカーネルのNetfilterフレームワークにeBPFプログラムをフックできる機能(**Netfilter eBPF**)も追加され、従来のiptables/nftablesルールに代わる柔軟なパケットフィルタ処理といった新たなネットワーク用途が広がっています。これにより、防火壁処理やトラフィック制御をeBPFで実装するケースも増えています。 * **可観測性の向上とトレーシング:** eBPFはシステムやアプリケーションの詳細な観測を低オーバーヘッドで実現し、**動的なトレーシングやプロファイリング**に利用されています。Linux 5.19では**ユーザ空間スタティックトレースポイント(USDT)**への対応が加わり、ユーザープロセス内に埋め込まれた計測ポイントにもeBPFプログラムをアタッチできるようになりました。USDTはアプリケーション開発者が提供する安定したフックであり、PostgreSQL等のアップグレード時でも同じ計測が可能になるため、性能劣化の原因追跡に有用です。このように**ユーザー空間を含むエンドツーエンドのトレーシング**が可能になったことで、BPFtraceやその他の可観測性ツールはシステム全体の挙動をより把握しやすくなりました。また、Googleやスタートアップ各社からは、eBPFでアプリやカーネルの動作をサンプリングして**継続的プロファイリング**を行うオープンソースツールも登場しています。実際、2022~2023年にかけて**常時プロファイリングや高精度モニタリング**を目的としたeBPF活用が活発化しており、Pixie(Kubernetes向けの自動計測プラットフォーム)など**新世代の可観測性ソリューション**がeBPFを採用しています。 * **セキュリティ強化とランタイム検知:** eBPFはセキュリティ分野でも強力なツールとなっています。従来からネットワーク上の不正検知やシステムコール監査に使われてきましたが、近年は**カーネルレベルでの挙動検知とポリシー強制**に発展しています。例えばCNCF incubatingプロジェクトのFalcoはeBPFを用いてLinuxカーネル層でシステム呼び出しを監査し、異常な振る舞いをリアルタイム検知します。2023年のFalco v0.34では**CO-RE対応の新eBPFドライバ**が導入され、あらゆるカーネル向けに1度コンパイルしたプローブを再利用できるようになりました。これによりカーネルモジュールのビルドなしで高性能な監視を行えるようになり、パフォーマンスと導入の容易さが大きく向上しています。さらにeBPFによるセキュリティ機能拡張の例として、**LSM BPF**(BPFによるLinuxセキュリティモジュール)があります。Linux 5.7以降、開発者はeBPFで細粒度なセキュリティフックを実装でき、必要に応じてシステムコールやカーネルイベントをフィルタリングする**カスタムポリシー**を追加できます。クラウドフレア社はこの仕組みを利用して、カーネル脆弱性が発覚した際にeBPFプログラムで一時的に不正利用を防ぐ**ライブパッチ**を適用する実験も行っており、eBPFがセキュリティホールの緊急対処に役立つ可能性を示しました。これらの動向から、**実行時の脅威検知**や**ポリシー適用**をeBPFで実現するケースが一般化しつつあります。 * **カスタムカーネル機能(ドライバ・スケジューラ等):** eBPFは「カーネルを動的に拡張する仕組み」として、デバイスドライバやスケジューラといった分野にも応用が広がっています。Linux 6.3では**HIDデバイス向けのBPFサポート(HID-BPF)**が導入され、ジョイスティックなど入力デバイスの微調整をeBPFプログラムで実装できるようになりました。例えば古くなったジョイスティックのニュートラル位置のブレをカーネル内でフィルタリングし、ユーザ空間への不要なイベント通知を抑制する、といった**デバイス補正ロジック**を後付けできます。従来であれば新たなカーネルドライバの開発やパッチ適用が必要でしたが、HID-BPFにより**カーネル再構築なしにデバイス挙動を拡張・修正**できるようになりました。さらに米Meta社は、eBPFを用いた**CPUスケジューラの実験**を行い、一部サービスでCPU帯域を5%向上させる成果を発表しています。これはeBPFでプロトタイプのスケジューリングアルゴリズムをカーネルに組み込み迅速に試行したもので、同社のDan Kelley氏は「まるでCPUを5%増強したかのようだ」とその効果を述べています。このように**カーネルのコア機能そのものをeBPFで差し替え・拡張**する動きも現れており、カーネル開発のスピードと柔軟性が飛躍的に高まっています。 以上のように、2022年以降eBPFのユースケースは多岐にわたり進化しています。従来から重要な**観測・ネットワーク・セキュリティ**の領域はさらに洗練されただけでなく、デバイス制御やシステム性能チューニングなど**新分野への波及**が見られます。その結果、継続的プロファイリングからリアルタイム侵入検知まで、様々な目的のためにeBPFを活用するソフトウェアが次々と生まれています。 ## 2. ユーザーランドツールのアップデート(bpftool, libbpf など) eBPFエコシステムの発展に伴い、開発者向けのユーザーランドツールやライブラリも大きく進化しました。**bpftool**や**libbpf**をはじめ、BCCやBPFtraceといったツールチェーンに新機能・改善が加わり、使い勝手や性能が向上しています。 * **libbpfの1.0リリースと機能強化:** 2022年8月、主要ライブラリである**libbpfがバージョン1.0に到達**し、長期的な安定性と使い勝手の向上が図られました。libbpf 1.0では従来の非推奨APIが一斉に削除され、BPFオブジェクトのセクション定義(`SEC()`マクロ)のルール統一など**互換性を整理した新しい設計**に切り替えられています。例えば、これまで複数のBPFプログラムを含むオブジェクトファイルでセクション名にユニークなサフィックスを付ける慣習がありましたが、1.0以降は標準化されたセクション名のみを使用し、プログラムの一意識別にはC関数名を用いる方針になりました。またエラーコード処理の一貫性向上、`LIBBPF_OPTS`マクロによる可変長の構造体オプションAPIの採用など、将来を見据えたクリーンアップと拡張性確保が行われています。これらの変更は**libbpfの成熟と標準化**を示すものであり、今後の1.x系開発の土台が築かれました。加えて、libbpfは他アーキテクチャへの対応強化やドキュメントの整備、自動生成テンプレート(※後述の`bpftool gen skeleton`等)の充実も進められています。総じてlibbpfのアップデートにより、開発者は**カーネルヘッダを意識せずCO-RE対応のBPFプログラムを構築**しやすくなり、既存のBCCに匹敵する機能を軽量に実現できるようになりました。 * **bpftoolの新機能:** カーネル同梱のCLIツール**bpftool**も、カーネルの拡張に合わせて機能強化されています。たとえば最新バージョンでは、新しいプログラムタイプへの対応や可観測性向上のための出力拡充が行われました。`bpftool link list`コマンドでは、kprobe\_multiやuprobe\_multiといった**マルチアタッチのリンク情報**や、perfイベントのcookie(識別子)表示がサポートされ、リンク一覧の情報がより充実しています。また、BPFスケルトン(skeleton)生成機能も改良され、`struct_ops`マップ(カーネル内部の関数ポインタテーブルを操作する特殊マップ)については自動アタッチに対応し、スケルトン利用時にユーザ空間から直接フィールドにアクセスできる**シャドウ変数**が生成されるようになりました。これはカーネル構造体上の関数ポインタをeBPFでオーバーライドする際の開発効率を上げるものです。さらに、新しいBPFマップ型の追加にも即応しており、bpftoolは**メモリプールマップ(arenaマップ)**やBPFグローバル変数にも対応しました。例えばLinux 6.1で導入された`BPF_MAP_TYPE_USER_RINGBUF`(ユーザ空間向けリングバッファ)などに対しても、bpftoolで容易に情報をダンプ・監視できるようになっています。その他、古く実験的だったbpfilter機能のカーネルからの削除に伴い、bpftoolのフィーチャープローブから該当項目を除外する整理も行われています。全体として、bpftoolは**最新のBPFカーネル機能と同期して進化**しており、開発者はコマンドラインからよりリッチな情報取得・操作が可能になっています。 * **その他ユーザ空間ツールとフレームワーク:** 従来から使われてきたBCCやbpftraceといったツール群もアップデートが続けられています。BCC(BPF Compiler Collection)は引き続き多くの便利なトレースツールを提供しつつ、近年は**CO-RE対応のlibbpf-toolsへ置き換える動き**が進んでいます。FacebookやRed Hatは従来BCCのPythonツールで提供していた各種トレーススクリプトを、libbpfとCO-REを使った独立実行型のCプログラム(**libbpf-tools**)として再実装し公開しています。これにより、対象マシンにヘッダやコンパイラを用意せずとも事前ビルド済みバイナリで高度なトレースを実行できるようになりました。実際、主要ディストリビューション(UbuntuやRHELなど)ではこうしたlibbpf-tools(例: `opensnoop`, `tcpconnect` 等)がパッケージとして提供され始めています。一方、**BPFtrace**も高水準のトレース言語として積極的にメンテナンスされています。2023年までにv0.18やv0.19がリリースされ、if文でのポインタ使用や構造体内部の`offsetof()`サポートなど言語機能が拡充されました。さらに最新のLLVMやカーネル新機能(例: 新たなBPF命令やマップ)への追従、シンボル解決の高速化(Bytedance製の`blazesym`統合)など、多数の改善が含まれています。**xdp-tools**と呼ばれるXDP向けユーティリティ集もRed Hat主導で整備が進み、RHEL9には受信面のベンチマークを行う`xdp-bench`、XDPエラーを監視する`xdp-monitor`、パケット送信テスト用の`xdp-trafficgen`の3ツールが新たに追加されました。これらはXDPプログラムの性能評価やトラブルシュートを簡易化するためのものです。また、eBPFプログラムのライフサイクル管理を容易にする取り組みも始まっており、たとえば**bpfman**というeBPFプログラムマネージャがCNCFサンドボックスに提案されています。bpfmanはKubernetes上でのeBPFプログラムのデプロイを標準化・簡素化するツールで、今後クラウドネイティブ環境でのeBPF活用を後押しすると期待されています。 以上のように、ユーザーランドのツールチェーンはこの数年間で**飛躍的に充実**しました。開発者はより洗練されたCLIやAPIを使ってeBPFプログラムを作成・ロード・デバッグできるようになり、CO-RE対応によりカーネルバージョン非依存でツールを配布することも可能です。これらのアップデートにより、eBPFの採用ハードルは着実に下がりつつあります。 ## 3. 関連プロジェクトの動向と統合強化 (Cilium, Falco, BCC など) eBPFを中核技術として活用する関連プロジェクト側でも、2022年以降多くの進展が見られます。ネットワーク、セキュリティ、可観測性といった分野のプロジェクトがeBPFとの連携を深め、新機能の統合や普及が進んでいます。 * **Cilium(コンテナネットワーキング):** eBPFを活用したKubernetes向けネットワークプラットフォーム**Cilium**は、この期間に飛躍的な成長を遂げました。Ciliumは当初ネットワークに特化していましたが、現在では**接続(L3/L4)、可観測性、セキュリティ**まで含めた包括的なプラットフォームへと拡張されています。2023年までにCiliumはCloud Native Computing Foundationで最も急成長するプロジェクトの一つとなり(EnvoyやPrometheusと並ぶ規模)、世界最大級のKubernetesクラスタでも採用が公表されています。実際に100社以上が公式にCilium採用を表明しており、ニューヨークタイムズやBloomberg、金融機関など幅広い業種で使われています。技術面では、Ciliumはkube-proxyの機能をeBPFで置き換える「eBPFモード」でのService負荷分散を安定化させ、さらに**サービスメッシュ機能(L7レベル)**もEnvoyとの連携で実験的に提供し始めました。加えて、Isovalent社(Ciliumの商用バックers)は**Tetragon**というeBPFベースのセキュリティコンポーネントを開発し統合しています。TetragonはプロセスのシステムコールやK8sオブジェクトの変更を監視し、ポリシーに応じてリアルタイムにブロックする**ランタイムセキュリティ**を提供するもので、クラウドネイティブ環境のゼロトラスト実現に寄与します。さらにエコシステム面では、主要なクラウドプロバイダ(AWSやGoogle Cloud)が自社のKubernetesサービスにCiliumを組み込み始めています。に示すように「AWSはEKS AnywhereでCiliumを採用し、GoogleもGKEのデフォルトネットワークにCilium技術を利用している」と報告されており、事実上**クラウドネイティブ界隈のデファクト標準**になりつつあります。Ciliumの成功は、「一般企業は直接eBPFを書くのではなく、CiliumのようなeBPFベース製品を採用するだろう」という見方を裏付けています。今後もCiliumはマルチクラウド接続(eBPFで実現する高速なクロスクラスタ通信)や高度なポリシー制御など、新機能を続々と取り込むと見られます。 * **Falco(ランタイムセキュリティ監視):** CNCFインキュベーションプロジェクトの**Falco**は、コンテナやホスト上の挙動監視ツールとして広く利用されています。Falcoは元々Sysdig社が開発した技術で、カーネルモジュールまたはeBPFプローブを使いシステムコールを傍受して、疑わしい挙動にルールベースでアラートを上げます。2022年以降、Falcoは特に**eBPFドライバの強化**に力を入れており、先述のとおり2023年のv0.34でCO-RE対応の新eBPFプローブ(modern eBPF probe)を実験的に導入しました。この「モダン」ドライバは80種類以上のシステムコールを実装し、x86\_64とARM64をサポートするなど将来的な標準化を見据えています。Falcoコミュニティはまた、eBPFプローブ内で利用可能な**グローバル変数やリングバッファ**機能を取り入れ、従来のプローブより高効率にイベントをユーザ空間へ渡す最適化も行いました。さらにFalcoのルールセット管理が改善され、OCIイメージ経由で動的にルールを更新できる仕組みや、`falcoctl`というCLIツールによるルール管理も追加されています。これらのアップデートにより、Falcoは**最新カーネル環境への対応と運用性の向上**が図られ、Kubernetesクラスター上でのリアルタイム脅威検知をより手軽に実現できるようになっています。現在FalcoはCNCFインキュベーティング段階ですが、コミュニティも活発で定期的なWeeklyアップデートやドライバ自動ビルド基盤の整備などが進められています。今後もLinuxの発展(新しいシステムコールや名前空間)に追随しつつ、ユーザ空間での異常挙動検知(例: ランサムウェアのパターン検出等)にも範囲を広げていくと見られます。 * **BCCとBCCツール:** かつてeBPF開発のデファクトだった**BCC (BPF Compiler Collection)**は、現在も多くのシステム管理者や開発者に利用されています。BCC自体はPython/C++インターフェースとLLVMを組み込んだツールキットで、数多くのサンプルや既成ツール(`tcpdump`に似た`biotop`や`execsnoop`等)を提供しています。しかし前述のように**CO-RE対応のlibbpf-toolsへの移行**が進んでおり、BCCツールで実現していた機能の多くはより軽量な代替ツールに置き換わりつつあります。実際、PingCAP社の事例ではクラスタ性能解析においてBCCツールからlibbpf-toolsへの全面移行を2020年時点で決断しています(※この動きはさらに加速しています)。もっとも、BCC自体もKernel 5.xで追加されたfentry/fexitなど新機能への対応を続けており、古いカーネルや特定環境では依然有用です。例えばBCCのプローブ機能を使ったOpenTracingとの連携や、Luaフロントエンドの活用など、libbpfにはない柔軟性を評価して使い続けるケースもあります。総じてBCCは**成熟期**に入り大きな機能拡張は減りましたが、既存ユーザーコミュニティによる保守とマイナー改善が継続しています。 * **その他のプロジェクト:** eBPFを活用する他の主要プロジェクトもアップデートが見られます。たとえば**Project Calico**はコンテナネットワークのセキュリティ実装にeBPFモードを提供しており、iptablesベースより高性能なポリシー適用が可能です。2022年以降、CalicoはeBPFモードを安定化させつつ、WireGuardとの統合(暗号化)やサービスロードバランシングの最適化などに取り組んでいます。Observability分野では前述の**Pixie**(現在New Relic提供)はCNCF Sandboxを経てオープンソースで開発が続いており、Kubernetes上のアプリTelemetryを自動収集・可視化する機能を強化しました。PixieはeBPFでシステムコールやアプリのメトリクスを自動的に収集し、開発者が即座にトラブルシューティングできるようダッシュボード化します。同様に、Grafana社の**Phlare**やPolar Signals社の**Parca**といったプロファイリング基盤もeBPFを用いて低オーバーヘッドのCPUプロファイルを継続収集する仕組みを提供し始めています。セキュリティ系では、Aqua Securityの**Tracee**も注目されています。TraceeはLinuxのイベント(システムコールやカーネルトレースポイント)をeBPFでキャプチャしてセキュリティ侵害の痕跡を検出するツールで、近年ルールエンジンの強化やクラウドネイティブ統合(Falcoルールとの互換など)が進みました。さらに、2022年にWalmartが発表した**L3AF**プロジェクトは「Kernel Function as a Service」を掲げ、様々なeBPFベース機能(パケットフィルタやトンネリングなど)をプラグインとして動的に組み合わせられるフレームワークを提供しています。これは社内ネットワーク機能を素早く組み替える目的で生まれたもので、今後コミュニティによる拡張が期待されます。 このように、**eBPFエコシステム全体でプロジェクト群の連携と機能統合が進展**しています。Ciliumに代表されるネットワークスタックの置き換えや、FalcoやTetragonによるセキュリティ監視、PixieやParcaによる観測性の飛躍的向上など、各分野のソフトウェアがeBPFを取り込むことで従来にない性能と機能を実現しています。にある通り、継続プロファイリングやイベントフィルタリング、クラウドネイティブ環境の可視化など「今まで不可能だったこと」を可能にする新興プロダクトが続々と登場しており、これらを下支えする形でRustやGo、C++製のeBPF開発用ライブラリも整備が進みました。総括すると、2022年以降のアップデートによりeBPFはLinuxカーネルの内外で欠かせない基盤技術となり、そのエコシステムはますます活発化しています。 **参考文献・情報源:** 本レポートはLinuxカーネルの公式リリースノートやドキュメント、eBPFコミュニティによるブログ記事(Red Hat, Cloudflare, Isovalent 他)、および関連プロジェクトのリリース情報等に基づいてまとめました。最新動向の把握には、各プロジェクトの公式発表やカンファレンス資料、Linux FoundationのeBPFに関する調査レポートなど信頼性の高い情報源を参照しています。