# 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)