# 動的計装
## 定義
動的計装(dynamic instrumentation)とは、稼働中のシステムに対して再コンパイル・再起動なしにプローブ(計装コード)を注入・除去し、実行時の振る舞いをオンザフライで観測する技術の総称である。静的計装(ソースコードに監視ロジックをあらかじめ埋め込む)とは対照的に、計装の有効・無効をランタイムに制御できる。無効時はゼロ・プローブ効果(disabled probe effect = 0)が理想とされ、本番環境での常時展開を可能にする。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]], [[@2015__SOSP__Pivot Tracing - Dynamic Causal Monitoring for Distributed Systems]])
代表的な実装:
- **DTrace**(Solaris、Sun Microsystems / [[Bryan Cantrill]] ら): カーネルおよびユーザー空間への統合計装。D 言語でプローブを記述し、無効プローブ時のオーバーヘッドをゼロに設計([[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])。
- **Fay**(分散システム向け): システムイベントをタプルのストリームとしてモデル化し、高レベルクエリで動的にフィルタリング。
- **[[Pivot Tracing]]**(SOSP 2015): 動的計装に happened-before join(⋈→)を加え、コンポーネント・マシン境界をまたぐ因果的イベント相関を実行時クエリとして実現。
## 横断的知見
- **DTrace・Fay が「同一 OS インスタンス内」に閉じる壁を Pivot Tracing が打破した**: DTrace はカーネルとユーザー空間の統合計装を実現したが、OS インスタンス境界を越えたプローブ間情報共有は原理的に不可能。Fay も同一アドレス空間内でのみプローブが情報を共有できる。Pivot Tracing はバゲージ(Baggage)抽象化でリクエストにメタデータを付随伝搬させ、スレッド・プロセス・マシン境界を越えた動的計装を初めて実現した。つまり「計装の動的性(DTrace/Fay の達成点)」と「境界越え因果追跡(X-Trace/Dapper の達成点)」の 2 つを初めて同時に満たしたのが Pivot Tracing である。(Source: [[@2015__SOSP__Pivot Tracing - Dynamic Causal Monitoring for Distributed Systems]], [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])
- **「事前定義なし」と「低オーバーヘッド」はトレードオフではなく同時達成可能**: 従来の観点では「何を記録するか事前定義しなければ、実行時コストは許容不能」と考えられてきた。しかし Pivot Tracing はゼロ・プローブ効果(無効時 0%)とインライン評価(バゲージによる分散結合の局所化)の組み合わせで、実用的なクエリでも HDFS 操作の実行時間増加を 0.3〜6% 以内に抑えた。これは「動的性 vs オーバーヘッド」のトレードオフが、バゲージという適切な抽象化で解消できることを示す。(Source: [[@2015__SOSP__Pivot Tracing - Dynamic Causal Monitoring for Distributed Systems]])
## 未解決の問い
- Pivot Tracing の Java 実装は JVM HotSwap に依存し、デバッグモードが必要。C/Go/Rust ベースのシステムでバゲージ伝搬を実現する手法として eBPF はどの程度有効か。[[BPF]]・[[eBPF]] との設計上の接続を精査する。
- バゲージ伝搬には開発者がシステムコードを改修する負担(スレッド・RPC・非同期境界での伝搬コード追加)がある。非侵入型計装(eBPF カーネル計装)との組み合わせで「バゲージ伝搬の自動化」はどこまで進んでいるか。
- Pivot Tracing は実行時クエリに対してゼロ・プローブ効果を達成したが、複数のクエリが同時に有効な場合(スタック的なアドバイスのウィービング)の相互作用とオーバーヘッド特性は未評価。
## 関連
- ソース: [[@2015__SOSP__Pivot Tracing - Dynamic Causal Monitoring for Distributed Systems]] / [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]]
- 概念: [[分散トレーシング]] / [[Fault Localization]] / [[AIOps]] / [[eBPF]]
- エンティティ: [[DTrace]] / [[Pivot Tracing]] / [[BPF]] / [[Jonathan Mace]] / [[Bryan Cantrill]]
## 出典
- [[@2015__SOSP__Pivot Tracing - Dynamic Causal Monitoring for Distributed Systems]](§3 設計・§5 Java 実装、ゼロ・プローブ効果、バゲージ伝搬)
- [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]](DTrace の動的計装原理・disabled probe effect ゼロの確立)