# BPF in the Agentic Era (LSFMM 2026) > [!abstract] 概要 > 26 枚のスライドは、エージェント駆動開発を BPF の開発・検証・ライブカーネルデバッグへ接続するための設計案を示す。中心提案は、BPF 固有の制約に合わせて Rust を縮小するのではなく、`no_std` と `alloc` を基盤に標準 Rust の診断、安全機構、コレクション、パニック処理を BPF 上で使えるようにすることである。登壇者名・所属・具体的な発表日はスライドに記載されていないため、メタデータの一部は不明である。 ## 資料情報 - 資料タイトル: BPF in the Agentic Era (LSFMM 2026) - 掲載場所: BPF Conf 2026 の資料ディレクトリ - ページ数: 26 - 発表年: 2026 年と推定。具体的な日付は未記載 - 登壇者・所属: スライド上に記載なし - PDF URL: https://bpfconf.ebpf.io/bpfconf2026/bpfconf2026_material/BPF%20in%20the%20Agentic%20Era%20(LSFMM%202026).pdf ## エージェント駆動開発の前提 スライドは、エージェントの有効なループを次の二つの循環として示す。 1. `write code` → `interpret compiler errors` → `fix the code` 2. `run code` → `interpret runtime results` → `write code` BPF では VM 起動、コンパイル済みプログラムの受け渡し、`veristat` による検証ログの取得が必要になり、反復が遅い。さらに数 MB 規模の verifier ログは調査対象をダンプするだけで、何を修正すべきかを示さない。エージェントがこの拒否をプラットフォームの「根本的限界」と誤認して諦めることも問題として挙げられている。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p06-agent-loop.png]] (BPF プローブの観測・生成・コンパイル・検証・データ解釈を反復するエージェントループ。p.6) ## Rust を縮小せず BPF を拡張する スライドの設計原則は「BPF の制約を削るのではなく、Rust の機能を削らない」である。`Vec<T>`、`String`、`Box<T>`、`BTreeMap`、関数ポインタ、クロージャ、イテレータ、`Option<T>`、`Result<T, E>`、`core::fmt`、整形された panic メッセージなどを、BPF 用の特別な制限で失うべきではないとする。一方、`f32/f64`、`async/await`、`std::*` はスライド上で未対応または条件付きとして残されている。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p12-design-principles.png]] (標準 Rust の機能を保つための 5 原則。p.12) 既存の [[Aya]] は Rust から BPF を生成できるが、`core::fmt`、ヒープ、`panic!`、スタックアンワインドを使えない厳格な規則により、標準 Rust の利点の大半を失うと対比される。提案は「Rust 構文で書く C」に留めず、BPF 側の制約を取り除くことである。 ## メモリモデル: すべてを arena に置く `.data`、`.bss`、ヒープを一つの平坦なアドレス空間へ置き、arena ごとのアロケータを使うメモリモデルが示された。`Vec` のヒープバッファ、`BTreeMap` のノードと文字列、グローバル変数から map のルートへのポインタを arena 内でつなぐ。vtables は `.rodata` の読み取り専用配列 map に置く。一方、カーネルポインタである `PTR_TO_FUNC` と `PTR_TO_BTF_ID` は arena に格納できず、レジスタ、スタック、rodata に限られる。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p13-arena-memory.png]] (Rust の各データ構造を BPF arena の平坦なアドレス空間へ配置するモデル。p.13) ## コンパイルパイプライン 標準ツールチェーンを使うコンパイル経路として、次の流れが示された。 `Rust source (.rs)` → `rustc --target bpfel-unknown-none` → `LLVM bitcode (.bc)` → `llvm-link` → optimized IR → `llc -march=bpf` → BPF ELF → `libbpf` による arena 配置・verifier・JIT `obj_is_bitcode` により LLVM IR を出力し、`core`・`alloc`・プログラムをリンクして全体最適化する。CO-RE と BTF の Rust 型対応、5 個を超える引数、構造体返却、例外と `.bpf_cleanup` も rustc フロントエンドと LLVM BPF バックエンドの変更候補として挙げられる。スライドはカスタムツールや新規ツールではなく、upstream rustc、LLVM、libbpf を使う構成を示す。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p15-compilation-pipeline.png]] (Rust ソースから libbpf・verifier・JIT までのコンパイル経路。p.15) ## verifier の変更 ### 間接呼び出しと拡張呼び出し規約 `PTR_TO_FUNC` と `BPF_PSEUDO_FUNC`、`BPF_MAP_TYPE_INSN_ARRAY`、`.data.rel.ro` の凍結 BPF 配列を組み合わせ、`dyn Trait`、関数ポインタ、クロージャ、vtable dispatch を扱う案が示された。レジスタの算術・間接参照・arena への保存は拒否し、間接呼び出し、レジスタ移動、比較、スタックへの退避を許可するルールが例示されている。 6 個を超える引数は、最初の 5 個を R1〜R5 に置き、残りをスタックへ置く拡張呼び出し規約で扱う。構造体返却値は sret ポインタで返す案が示された。これらは p.10 の「除去すべき verifier 制限」を実装側へ落とした具体案である。 ### ループの widening ループの back-edge で現在状態と loop-head を比較し、未収束ならスカラー範囲を広げる。例えば `[5,5] ∪ [10,10]` を `[5,10]` へ一般化し、なお発散する場合は `[MIN, MAX]` まで広げる。広げた状態で再検証することで、反復回数に比例して検証コストが増える構成を、widen の段数に比例する構成へ近づける。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p18-widening-loops.png]] (ループ状態を段階的に一般化して検証を収束させる widening の手順。p.18) スライドは Rust の bounds check が narrowing を与え、widen された状態を精密化すると説明する。最終的な安全性は、検証器がすべての停止性を証明することではなく、メモリ安全性を保証し、必要な動的検査へフォールバックすることを目指す。 ### panic=unwind と divide-by-zero Rust-BPF では `panic=unwind` を使い、`bpf_stream_vprintk` で完全な panic メッセージを出力してから `bpf_throw` でプログラムを終了する。カーネルは BPF コールスタックを走査し、`.bpf_cleanup` テーブルに対応する cleanup 関数を呼び出して `Drop` 実装を実行する。arena メモリは一括解放される。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p20-panic-handling.png]] (panic メッセージ出力、`bpf_throw`、cleanup の流れ。p.20) p.21 は `sched-ext` の `simple_stopping` を C と Rust で対比する。C BPF では検証器がゼロ除算を静かに 0 として継続させるのに対し、Rust BPF ではコンパイラが検査を挿入し、panic、アンワインド、`Drop` によって誤値のまま続行しない設計を示す。 ## エージェント向けツールキット スライドは、エージェントに「何をプローブし、どこへアタッチするか」を推測させないためのツールキットを三層で示す。 1. `bpftool btf dump` によるカーネル型・構造体レイアウト探索、アタッチ点発見、関数シグネチャ取得、`vmlinux.rs` 生成。 2. [[drgn]] によるライブカーネル状態の検査と仮説形成、および Rust BPF プローブによる疑わしい経路の継続監視。 3. ヒストグラム・スタックトレース収集などの probe crate とサンプル。ロジックを Rust BPF 内に置き、ユーザ空間での後処理や ringbuf に依存しない構成。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p25-agent-toolkit.png]] (カーネル発見、drgn と BPF、再利用可能な probe crate を組み合わせたツールキット。p.25) この構成では、[[drgn]] が「どこを見るか」を示し、BPF が「そこで何が起きているか」を監視する。[[bpftrace]] は人間の専門家には有用だが、ニッチな DSL、暗号的なエラー、型システムの不足、表現力の制限、増分反復の不足によりエージェントには不向きだと評価される。 ## まとめ 最終スライドは、`Unprivileged veristat`、`PTR_TO_FUNC`、拡張呼び出し規約、構造化 verifier エラー、ループの widening、panic 処理、人工的制限の除去、arena 型メモリ、ネイティブ Rust-BPF を「困難だが実現可能な」課題として並べる。結論は、標準 Rust を BPF 上で動かし、BPF 固有の注釈を増やさず、verifier が停止性ではなくメモリ安全性を証明する方向である。 ![[_attachments/bpf-in-the-agentic-era-lsfmm-2026/p26-summary-roadmap.png]] (9 つの実現課題と、標準 Rust を BPF 上で動かすというまとめ。p.26) ## 概念・実体への接続 - [[BPF verifier]]: 安全境界、構造化エラー、widening、間接呼び出し、実行時検査。 - [[Rust-BPF]]: 標準 Rust の `core`・`alloc`・コレクション・panic 処理を BPF で活用する設計。 - [[BPF arena memory]]: `.data`、`.bss`、ヒープを平坦なアドレス空間へ置くメモリモデル。 - [[エージェント型コーディング]]: コンパイル・検証・実行結果を使う短い反復。 - [[eBPF]] / [[BPF]]: verifier と JIT を備えるカーネル内実行基盤。 - [[Aya]] / [[veristat]] / [[drgn]] / [[bpftool]] / [[rust-for-linux]]: Rust-BPF 開発・検証・ライブデバッグの周辺ツール。 ## 限界・不確実点 - 登壇者名、所属、具体的な発表日はスライドと PDF メタデータから確認できない。 - `rex`(p.3)、匿名の Team A/B・Company C、p.5 の `val` の型・値はスライドだけでは特定できない。 - `async/await` の対応は疑問符つきで、確定機能ではない。 - BTF ベースの global-prog は「may not work」と条件付きである。 - スライドは設計案を提示するものであり、列挙された verifier・rustc・カーネル変更が実装済みであることを示さない。 - 抽出メモは全ページ画像を確認して作成したが、細部が画像で読めない箇所は推測していない。 ## 関連 - ソース: [[@2026__LWN__BPF in the agentic era]] - 概念: [[BPF verifier]] / [[Rust-BPF]] / [[BPF arena memory]] / [[eBPF]] / [[BPF]] / [[エージェント型コーディング]] / [[フィードバックループ]] - エンティティ: [[Aya]] / [[veristat]] / [[drgn]] / [[bpftool]] / [[rust-for-linux]] / [[libbpf]] / [[bpftrace]] / [[Alexei Starovoitov]] ## 出典 - [[.raw/slides/bpf-in-the-agentic-era-lsfmm-2026/bpf-in-the-agentic-era-lsfmm-2026.pdf]](原本) - [[.raw/slides/bpf-in-the-agentic-era-lsfmm-2026/extraction.md]](全 26 ページの視覚確認・抽出メモ) - [BPF Conf 2026 materials](https://bpfconf.ebpf.io/bpfconf2026/bpfconf2026_material/BPF%20in%20the%20Agentic%20Era%20(LSFMM%202026).pdf)