# eGPU: Extending eBPF Programmability and Observability to GPUs > [!abstract] 概要 > GPU の正確なオブザーバビリティとプログラム可能性は、AI ワークロードやその他の計算集約型の高性能計算(HPC)アプリケーションの性能最適化に不可欠である。本論文は、動的な PTX インジェクションを介して eBPF バイトコードを GPU へ動的にオフロードする初のフレームワーク兼 eBPF ランタイムである eGPU を提案する。オブザーバビリティを主目的に設計された本システムは、リアルタイムの GPU テレメトリ、eBPF ベースの動的インストルメンテーション、自動化された性能分析を活用し、カーネル実行・メモリ転送・異種計算オーケストレーションといった複数レイヤーのボトルネックを、大きなオーバーヘッドを生じさせることも稼働中の GPU カーネルを中断することもなく特定する。eBPF プログラムを PTX スニペットへ動的にコンパイルし、稼働中の GPU カーネルへ直接注入することで、eGPU は既存の eBPF エコシステムとシームレスに統合される細粒度・低オーバーヘッドのインストルメンテーションを提供する。初期のマイクロベンチマーク評価では、eGPU が低オーバーヘッドのインストルメンテーションを実現しつつ高解像度の性能洞察を与えることが示された。最終的に eGPU は、多様で進化するワークロード要件へ動的に適応できるプログラマブルな GPU インフラストラクチャへの道を開く。 > [!note] bpftime-super との同一性 > ユーザーが別件として挙げた「bpftime-super」は、本論文と同一研究の別タイトル/ドラフトである。PDF 本文タイトルは "eGPU: Extending eBPF Programmability and Observability to GPUs"(著者 Yiwei Yang ほか)であり、本文中で「コードは `github.com/victoryang00/bpftime-super` で公開」と明記されている。したがって本 source は eGPU に統合し、別名(aliases)に `eGPU` と `bpftime-super` の双方を含める。既存の単一ソース詳細メモは [[papers/2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs|eGPU 既存ノート]] と [[papers/2025__arXiv__bpftime-super - A GPU observability tool|bpftime-super 既存ノート]] を一方向参照する。 ## 論文情報 - タイトル: eGPU: Extending eBPF Programmability and Observability to GPUs - 著者: Yiwei Yang(UC Santa Cruz)、Tong Yu([[Eunomia Inc]])、Yusheng Zheng(UC Santa Cruz)、Andrew Quinn(UC Santa Cruz) - 会場: 4th Workshop on Heterogeneous Composable and Disaggregated Systems(HCDS '25)、2025-03-30、Rotterdam, Netherlands - 出版: ACM(ISBN 979-8-4007-1470-2/25/03)、全 7 ページのワークショップ論文 - DOI: https://doi.org/10.1145/3723851.3726984 - コード: `github.com/victoryang00/bpftime-super`(eunomia-bpf/eGPU として公開、[[bpftime]] に統合) - 謝辞に「本論文の言語改善と実装節の翻訳に Claude を使用した」と明記。 ## 概要 eGPU は、CPU 中心であった [[eBPF]] のインストルメンテーション能力を GPU カーネルへ拡張する。中核は、eBPF バイトコードを NVIDIA の中間表現である [[PTX]](Parallel Thread Execution)へ実行時にコンパイルし、稼働中の GPU カーネルへ直接注入する「PTX インジェクション」である。ユーザー空間の eBPF uprobe、共有メモリマップ、リアルタイム GPU テレメトリを組み合わせ、最小限の実行時オーバーヘッドで細粒度の GPU 計装を提供する。従来の GPU プロファイリングと異なり、稼働中のカーネルを中断せずに計装を動的に追加・変更・削除できる点を特徴とする。本研究は [[bpftime]] のユーザー空間 eBPF ランタイムを基盤とする。 ## 問題設定 - 入力: GPU 上で稼働する CUDA カーネルと、eBPF プログラムのソースコード。 - 出力: GPU 実行の細粒度な観測データ(メモリアクセスパターン、帯域幅利用率、レイテンシなど)。 - 課題: 既存の GPU インストルメンテーション手法([[CUPTI]]、[[NVBit]] などのバイナリインストルメンテーション)は、大きなオーバーヘッドを伴うか、GPU カーネルを中断する侵襲的な変更を要する。一方で eBPF は従来 CPU 中心であり、ユーザー空間/カーネル空間のコンテキストスイッチに制約され、GPU 実行モデルへの可視性に乏しい。 - GPU 実行モデル固有の難しさ: 非同期なカーネル起動、並列スレッド実行、特殊なメモリ階層により、計装は複雑で高オーバーヘッドに陥りやすい。eBPF の CPU 中心設計は、新規の変換と実行時適応なしには GPU ハードウェアへ直接拡張できない。 ## 提案手法 ### bpftime 基盤(ユーザー空間 eBPF) カーネルベースの eBPF(特に uprobe)は頻繁なコンテキストスイッチで大きなオーバーヘッドを被る。[[bpftime]] はこれらの処理をユーザー空間へ移し、コンテキストスイッチを不要にして最大 10 倍の性能向上をうたう。`bptime-syscall.so` がユーザー空間のベリファイアと JIT コンパイラを提供し、カーネル権限なしに検証とネイティブ命令への変換を行う。共有メモリ上の eBPF マップ、`clang`/`libbpf` との互換、BTF による Compile Once – Run Everywhere(CO-RE)対応を備える。 ### 動的 PTX インジェクション JIT コンパイラが eBPF(またはアプリケーション固有のロジック)から専用の PTX スニペットを生成し、デバイス常駐のフックを介して稼働中のカーネルへ動的に注入する。これを「PTX インジェクション」と呼ぶ。カーネルコンテキストを破棄せずに命令を割り込ませるため、カーネルの停止・全体の再コンパイル・再起動に比べてオーバーヘッドを削減する。PTX JIT は NVBit のような生バイナリ(SASS)書き換えより高位の IR で動作するため、完全コンパイル済み命令の書き換えに伴う複雑さを回避し、レジスタ使用やワープスケジューリングといった機能を活かして高性能を得やすい(出典: §2.2)。 ### eBPF→PTX コンパイルと統合アーキテクチャ Figure 1 のシステム設計では、`clang`/`bpftool`/`bpftrace` で eBPF バイトコードを生成し、ユーザー空間 eBPF ランタイムへ流し込む。ユーザー空間側で生成・注入された PTX は CUDA 環境の `inlineHook`・uprobe・tracepoint を介して GPU ドメインのフックへアタッチする。`bpf syscall` 経由でカーネル eBPF サブシステム(kprobe・socket・tracepoint)へ任意に橋渡しでき、ユーザー空間 eBPF を GPU へ拡張しつつ必要に応じてカーネルへ戻す統合経路を示す。 ### 共有メモリマップと同期 実装では `boost::managed_shared_memory` を用い、eBPF マップ・入力バッチ・中間状態などを CPU と GPU の双方が並行アクセスできる共有領域に保持する。マップを pinned(あるいは pinned 相当)メモリとして登録することで、繰り返しコピーなしにイベントと統計を交換する。同期は階層ごとに行う。CPU 側は `std::atomic` や Boost interprocess プリミティブ、GPU 側は CUDA アトミック操作とデバイス全体のメモリフェンスで更新を直列化する。頻発する小規模同期では、一部のスレッドだけがアトミック操作を担い残りは並列処理を続けることで、ワープ単位の競合を最小化する。 ### セルフモディファイングコード(POS の活用) PTX のセルフモディファイングコードに [[ParallelGPU OS]](POS、Huang+ 2024)を利用する。POS はアプリケーション無改変で GPU ドライバ API 呼び出しを横取りし、カーネルのバッファ読み書き意味を捉える実行時カーネル DAG を構築して、soft copy-on-write・soft dirty bit・soft on-demand load を疑似実現する OS レベルの並行チェックポイント/復元システムである(出典: §5.1)。 ## 新規性 - 世界初の GPU 向け eBPF ランタイム/フレームワーク。既存 eBPF は CPU 専用であり、GPU への動的インストルメンテーション機構は存在しなかった。 - [[CUPTI]]・[[NVBit]] との対比: CUPTI は GPU 性能への洞察を与えるが大きなオーバーヘッドを伴い、NVBit はバイナリレベルの侵襲的計装を要する。eGPU は PTX という高位 IR で計装し、稼働中カーネルを中断せずに動的に着脱できる点で差別化する。 - 既存 eBPF エコシステム(`clang`・`bpftool`・`libbpf`)との互換を保持し、CO-RE もサポートする統合アーキテクチャ。 ## 実験設定 - ハードウェア: デュアルソケット Intel Xeon E5-2697-v2(48 コア、2.7 GHz、30 MB LLC)、256 GB DDR3 RAM、NVIDIA P40 GPU。 - 評価方法: レイテンシ中心のマイクロベンチマーク。load/store 操作を計装しつつ GPU メモリアクセスレイテンシを測定。 - 比較対象: NVBit ベースのインストルメンテーション(gpumemtrace、参照 [14])。gpumemtrace は `mov` 命令を計装し、そのロジックをホストへのメモリ転送に振り替えるベースラインである。 - メモリアクセスサイズを変えた一連の操作で両者を評価。 ## 実験結果 - Figure 2(Runtime Overhead): eGPU は NVBit ベース手法より有意に低いインストルメンテーションオーバーヘッドを示す。NVBit は重い計装で大きなレイテンシ増を呈する一方、eGPU は 128KB 以下の小さなメモリアクセスで安定して低いレイテンシを維持した。 - 128KB を超えるとレイテンシは緩やかに増加するが、依然としてベースラインより低い。 - gpumemtrace との比較(Figure 2)では、ハッシュマップの値サイズが 32KB を超えると NVBit の計装オーバーヘッドがボトルネックになる。32KB を超えるとデータが eBPF スタックに収まらずグローバルマップへ置く必要があり、性能に影響する(出典: §6.1)。 - 主張する設計判断の検証: 軽量な PTX 計装を実行時に動的注入することが、従来の GPU 計装手法に比べてオーバーヘッドを大幅に削減する。 ## 考察 - ユースケース 1(GPU メモリ観測と CXL.mem シミュレータ): NVIDIA GPU の LD/ST 命令をフックし、メモリアドレス・アクセスサイズ・タイムスタンプを捕捉して、帯域幅 $BW = \sum_{i=1}^{N} \text{Bytes}_i / T_{window}$ をリアルタイムに算出する。さらに観測したメモリ操作へ動的レイテンシ挿入を行い、$T_{access}^{(CXL)} = T_{access}^{(local)} + \Delta t(\text{pattern}, BW_{curr})$ により CXL アタッチメモリ(高レイテンシ・低帯域)を疑似する。メモリバウンドなカーネルでは実効レイテンシが最大 2〜3 倍に増えることを示した。これらは著者らの先行研究 [[CXLMemSim]](Yang+ 2023、参照 [15])と整合する。 - ユースケース 2(LLM の CPU-GPU 協調キャッシング): ページフォルト・DMA コピー・ユニファイドメモリ移動などのイベントを記録し、どのモデルパラメータ/アクティベーションが頻繁にアクセスされるかを可視化して、LRU・LFU などのキャッシュ/退避ポリシーの最適化を支援する。 > [!note] bpftime-super ノート由来の補足(eGPU PDF に明示なし) > 既存の [[papers/2025__arXiv__bpftime-super - A GPU observability tool|bpftime-super 既存ノート]] は「永続カーネル(persistent kernel)」を中核コンポーネントとして強調するが、eGPU の PDF 本文は §5 の見出しに永続カーネルを立てておらず、結論節で「長時間稼働カーネルで GPU を占有し続け、頻繁なカーネル起動を避ける」と触れる程度である。永続カーネルが小規模バッチワークロードで GPU メモリを消費し効率が落ちるという議論は bpftime-super ノート側の記述であり、eGPU PDF からは断定できない。本 source では PDF に遡及できる「共有メモリ」「同期」「PTX インジェクション」「C/R(checkpoint/restore)」を一次の根拠とする。 ## 強み - 稼働中の GPU カーネルを止めずに計装を動的着脱できる、初の GPU 向け eBPF アプローチ。 - PTX(高位 IR)レベルの計装により、SASS バイナリ書き換えの複雑さを避けつつ低オーバーヘッドを得る設計。 - 既存 eBPF ツールチェーン・エコシステムとの互換を保ち、CPU/GPU 境界をまたいで一貫した監視ロジックを共有できる。 ## 弱点・課題 - 評価が単一 GPU(NVIDIA P40)・マイクロベンチマークに限定され、大規模機械学習モデルや HPC シミュレーションでのエンドツーエンド評価は未実施(著者も明記)。 - JIT コンパイルのオーバーヘッド。カーネル初期化時の PTX インジェクションと JIT のコストは本実験では小さいものの、多数の小規模・短命カーネルを伴うワークロードでは顕在化しうる。 - 同期メカニズムの最適化と PTX コンパイルオーバーヘッド削減が今後の最適化対象として残る。 - 全 7 ページのワークショップ論文であり、図表の数値が読み取りづらく(Figure 2 のレイテンシ軸)、定量比較の解像度は限定的。 ## 関連 - 同系統の GPU 観測/プロファイリング研究: [[@2024__TOPC__Low-Overhead Trace Collection and Profiling on GPU Compute Kernels]] - 既存の単一ソース詳細メモ(一方向参照): [[papers/2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs|eGPU 既存ノート]]、[[papers/2025__arXiv__bpftime-super - A GPU observability tool|bpftime-super 既存ノート]] - 関連 concept: [[eBPF]]、[[GPUクラスタ運用]]、[[テレメトリ]]、[[GPU観測性]]、[[動的インストルメンテーション]]、[[ハードウェアカウンタ]] - 関連 entity: [[bpftime]]、[[eunomia-bpf]]、[[NVBit]]、[[CUPTI]]、[[PTX]]、[[ParallelGPU OS]]、[[CXLMemSim]]、[[Eunomia Inc]]