# uprobe ## 定義 uprobe(userspace probe)は、Linux カーネルが提供する動的計装機構であり、ユーザ空間プログラムの関数入口や出口にブレークポイントを設置して、引数・戻り値・実行時コンテキストを観測する仕組みである。[[eBPF]] プログラムを uprobe にアタッチすることで、対象プロセスのソース改変や再起動を伴わずに計装できる。(Source: [[@2021__yuuk.io__Linux eBPF Tracing Technology]]) ## 横断的知見 - **uprobe はライブラリ境界の関数呼び出しを非侵襲に観測する**: CUDA ランタイムライブラリ `libcudart.so` の `cudaMalloc` や `cudaLaunchKernel` といった関数に uprobe を当てることで、アプリケーションのソースを変更せずに GPU 利用の入口をモニタリングできる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - **return probe(uretprobe)と組み合わせると関数の入出力を両方捉えられる**: enter プローブで引数(サイズ・方向など)、return プローブで戻り値(エラーコードなど)を取得する。これにより API 呼び出しの成否とリソース操作の対応関係を追跡できる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - **uprobe の粒度は関数レベルに制限される**: 関数内部の基本ブロックやメモリアクセスまでは直接観測できない。より細かい粒度が必要な場合は、コンパイル時計装や実行時バイナリ書き換え(PTX/SASS 注入)、ハードウェアカウンタなど他の計装層を併用する。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]], [[@2025__HCDS__eGPU - Extending eBPF Programmability and Observability to GPUs]]) - **uprobe のオーバーヘッドは実行場所(カーネル vs ユーザ空間)で桁違いに変わる**: Linux カーネル uprobe はブレークポイントでカーネルトラップを発生させ、1 呼び出しあたり約 2,500-3,000 ns のオーバーヘッドを持つ。対して [[bpftime]] のようなユーザ空間 eBPF ランタイムは、同一プロセス内で拡張を実行し、uprobe/uretprobe をそれぞれ 190/187 ns に短縮する。これはソース改変なしの非侵襲計装が「カーネルで実行するか」「ユーザ空間で実行するか」という実装選択で、オーバーヘッドの桁が変わることを示す。ただし syscall tracepoint や hash_map_lookup など一部操作ではカーネル eBPF の方が有利なため、観測対象と操作の組み合わせで使い分ける必要がある。(Source: [[@2025__OSDI__Extending Applications Safely and Efficiently]], [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) ## 未解決の問い - uprobe のオーバーヘッドは関数呼び出し頻度に依存するが、高頻度なユーザ空間関数(例: 推論エンジンの内部ループ)を常時トレースした際の許容限界はどう定量化できるか。 - ランタイムライブラリのシンボル名や ABI がバージョンで変化した場合、uprobe ベースのツールはどの程度自動的に適応できるか。 - ユーザ空間 uprobe 実行([[bpftime]])とカーネル uprobe 実行は、観測対象の関数種別(計算密集型 vs システムコール密集型)とデータ共有範囲(プロセス内 vs カーネル全体)でどう使い分けるか。 ## 関連 - 概念: [[eBPF]] / [[動的計装]] / [[CUDA API トレース]] / [[GPU観測性]] / [[kprobe]] / [[Extension Interface Model]] - エンティティ: [[libbpf]] / [[bpftrace]] / [[BCC]] / [[bpftime]] - ソース: [[@2021__yuuk.io__Linux eBPF Tracing Technology]] / [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]] / [[@2025__OSDI__Extending Applications Safely and Efficiently]]