# DTrace
## 定義
DTrace は [[Sun Microsystems]] が [[Bryan Cantrill]] · [[Michael Shapiro]] · [[Adam Leventhal]] によって開発し、Solaris に統合した動的計装フレームワークである(USENIX ATC 2004、[[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])。**本番稼働中のシステム**に対し、(1) 無効時ゼロ・プローブ効果、(2) 絶対的安全性、(3) 任意の述語とアクション、(4) スケーラブルな集約という 4 原則で、ユーザー空間・カーネル空間を統一的かつ安全に計装する。C ライクな高水準言語 D でプローブ記述・述語・アクションを記述し、DIF (D Intermediate Format) 仮想マシンがカーネル内で安全に実行する。
プローブは `< provider, module, function, name >` の 4 タプルで識別され、最小構成でも 30,000 以上の計装ポイントをカバーする(FBT プロバイダが 25,000+ を担う)。集約関数により大量データをソースで削減し、投機的トレース(speculative tracing)により散発的異常の記録を後決めで確定・破棄できる。
## 横断的知見
- **ゼロ・プローブ効果と安全性は本番計装の必要条件であり、eBPF の設計思想もここから来る**: DTrace が 2004 年に確立した「無効時は絶対に影響ゼロ、有効化しても絶対に安全」という原則は、Linux eBPF の検証器(verifier)設計に同一の哲学が受け継がれている。eBPF は DTrace の思想的後継と位置づけられる。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]], [[eBPF]])
- **静的計装と動的計装は「disabled probe effect」の有無で本番適用可能性が決まる**: LTT・ATOM・Purify 等の静的計装は無効時にも微小なオーバーヘッドが生じ、本番への常駐が難しい。DTrace の SDT プロバイダはコンパイル時に no-op 命令を埋め込み、動的書き換えで有効化することで、150+ の計装点を追加しても性能差を計測不能にした。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])
- **ユーザー/カーネル統合計装がシステミック問題の診断を可能にする**: 本番事例(SunRay サーバ)では、gtik2_applet2 プロセスがほとんど仕事をせずに X サーバを介して OS に大量の mmap/munmap を誘発するという「プロセス中心ツールでは不可視のシステミック問題」を DTrace の統合計装・スレッド局所変数・集約で初めて特定した。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])
## 未解決の問い
- DTrace の投機的トレース(speculative tracing)は eBPF に相当する機能として現代どのように実装されているか。eBPF の ring buffer やペリスコープ型は投機的記録を直接サポートするか。
- D 言語の「前向き分岐のみ」という制限は現代 eBPF の verifier ループ制限(反復回数上限)とどの程度等価か。安全性保証の形式的な比較はどこかで行われているか。
- Solaris の FBT と Linux ftrace / kprobe の計装手法(branch-based vs trap-based)の実測オーバーヘッド比較はあるか。
## 関連
- ソース: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]]
- 概念: [[動的インストルメンテーション]] / [[プローブ効果]] / [[eBPF]] / [[オブザーバビリティ]] / [[継続的プロファイリング]] / [[テレメトリ]]
- エンティティ: [[Bryan Cantrill]] / [[Michael Shapiro]] / [[Adam Leventhal]] / [[Sun Microsystems]]
- 関連 MOC: [[AI Infra Telemetry - MOC]]
## 出典
- [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]](DTrace 一次ソース、USENIX ATC 2004)