# BPF arena memory
## 定義
BPF arena memory は、BPF プログラムの `.data`、`.bss`、ヒープなどのデータを一つの平坦なアドレス空間へ置き、arena ごとのアロケータで管理するメモリモデルである。Rust の所有するポインタを arena 内へ寄せ、`Vec`、`String`、`Box`、`BTreeMap` などの標準 `alloc` コレクションを BPF 上で扱いやすくする狙いがある。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
## 配置モデル
- vtable: `.data.rel.ro` または読み取り専用 array map
- 定数・文字列: `.rodata`
- グローバル変数: `.data/.bss` の読み書き可能 arena
- ヒープ確保: `bpf_arena_alloc` による読み書き可能 arena
`BTreeMap` のノードから子ノード、`Vec` からヒープバッファ、グローバル変数から map のルートまでを arena 内で接続する。`PTR_TO_FUNC` と `PTR_TO_BTF_ID` のようなカーネルポインタは arena に置けず、レジスタ、スタック、rodata に限定される。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
## verifier との関係
平坦なアドレス空間はポインタの追跡を単純化し、BPF verifier が Rust の通常のデータ構造を扱う余地を広げる。ただし、arena ポインタとカーネルポインタの型境界、間接呼び出し、vtable、cleanup 時の一括解放は、引き続き静的検査と実行時検査の設計対象となる。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]])
## 横断的知見
- **arena は単なる新しい map 型ではなく、Rust の標準メモリモデルを BPF の検証可能な領域へ写像する境界である**: スライドは arena を `Vec` や `BTreeMap` の利用可能性、間接呼び出し、panic cleanup と結び付けている。LWN の報告も、arena ごとのアロケータが verifier 制約を単純化する可能性を指摘する。(Source: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]], [[@2026__LWN__BPF in the agentic era]])
## 未解決の問い
- arena 内ポインタの寿命・エイリアス・境界を verifier がどこまで追跡できるか。
- arena メモリの一括解放と Rust の `Drop` 実行を、異常終了を含めてどう整合させるか。
- 大きな arena とカーネルメモリ圧力の関係をどう制限するか。
- vtable とカーネルポインタを分離する設計が、実際の Rust コンパイラ出力でどこまで安定するか。
- arena を用いる BPF プログラムの競合・再入・複数 CPU 実行をどう検証するか。
## 関連
- 概念: [[BPF verifier]] / [[Rust-BPF]] / [[eBPF]] / [[BPF]]
- エンティティ: [[libbpf]] / [[Aya]]
- ソース: [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]] / [[@2026__LWN__BPF in the agentic era]]
## 出典
- [[@2026__BPFConf2026__BPF in the Agentic Era (LSFMM 2026)]](p.12〜p.14: arena 配置、アロケータ、Rust データ構造)
- [[@2026__LWN__BPF in the agentic era]](BPF arena とグローバルアロケータの提案)