# 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]]) - **技術的な先進性(2004年)と実務での普及(2005年以降)の間にはタイムラグがある**: USENIX ATC 2004 論文が確立したゼロ・プローブ効果・絶対的安全性という設計原則そのものは、Linux用の動的インストルメンテーションが2000年に開発され2004年にkprobeとしてカーネルにマージされていた事実と並行している。しかしGregg(2023)の回顧によれば、これらの初期の動的インストルメンテーション技術は「あまり知られておらず、使い方が難しかった」のに対し、2005年にSun MicrosystemsがDTraceを「使いやすく本番環境で使える」独自ツールとしてリリースしたことで初めて動的インストルメンテーションの知名度が大きく上がった。技術的な原則の確立(2004年の論文)と、その原則がツールとして普及し実務家に認知される時点(2005年のリリース以降)は同一ではないことを、一次論文と教科書的回顧の両方が別々の角度から裏付ける。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 1 イントロダクション]]) - **ソフトウェア分野における「observability」という語の系譜は、DTrace の予算獲得資料に遡ると当事者が回顧している**: [[Charity Majors]] は、DTrace の開発を継続するための予算を Sun の経営陣から得るべく [[Bryan Cantrill]] が2003年にまとめた社内デッキ *Software Observability* を語の起源として挙げ、そこから当時の Twitter の "Observability Engineering" チーム(2010年代初頭)を経由して自身の目に留まったとする(Source: [[@2026__OReilly__Observability Engineering 2E - Chapter 3 The Origins of Observability in Software]] 脚注)。USENIX ATC 2004 論文([[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]])は DTrace の技術設計(ゼロ・プローブ効果・4原則)を確立した一次資料だが、そこでは「observability」という語自体は前面に出ていない。技術的な設計原則の確立(2004年論文)と、その設計を説明するための命名(2003年デッキ)は同時期でありながら異なる文書系譜に属しており、後年ソフトウェア業界で「オブザーバビリティ」が独立した技術用語として定着する遠因になったことがわかる。(Source: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]], [[@2026__OReilly__Observability Engineering 2E - Chapter 3 The Origins of Observability in Software]]) ## 未解決の問い - **2003年の Cantrill デッキ *Software Observability* の内容そのもの(なぜ「observability」という語を選んだか)は現存・公開されているか**: Majors(2026)の回顧は又聞きに近い伝聞情報であり、デッキ自体の内容や、Cantrill が制御理論の定義を意識していたかどうかは確認できていない。([[@2026__OReilly__Observability Engineering 2E - Chapter 3 The Origins of Observability in Software]]) - DTrace の投機的トレース(speculative tracing)は eBPF に相当する機能として現代どのように実装されているか。eBPF の ring buffer やペリスコープ型は投機的記録を直接サポートするか。 - D 言語の「前向き分岐のみ」という制限は現代 eBPF の verifier ループ制限(反復回数上限)とどの程度等価か。安全性保証の形式的な比較はどこかで行われているか。 - Solaris の FBT と Linux ftrace / kprobe の計装手法(branch-based vs trap-based)の実測オーバーヘッド比較はあるか。 - DTrace(2005年公開)の「使いやすさ」が普及の決め手だったとGregg(2023)は回顧するが、何が具体的に「使いやすさ」を構成していたのか(D言語の設計、ドキュメント、配布形態など)は2004年の技術論文からは分からない。使いやすさの要因を実証的に特定できる別ソースはあるか。 ## 関連 - ソース: [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]] / [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 1 イントロダクション]] / [[@2026__OReilly__Observability Engineering 2E - Chapter 3 The Origins of Observability in Software]] - 概念: [[動的計装]] / [[プローブ効果]] / [[eBPF]] / [[オブザーバビリティ]] / [[継続的プロファイリング]] / [[テレメトリ]] / [[BPF]] / [[フレームグラフ]] - エンティティ: [[Bryan Cantrill]] / [[Michael Shapiro]] / [[Adam Leventhal]] / [[Sun Microsystems]] / [[Brendan Gregg]] / [[Charity Majors]] - 関連 MOC: [[AI Infra Telemetry - MOC]] ## 出典 - [[@2004__USENIX-ATC__Dynamic Instrumentation of Production Systems]](DTrace 一次ソース、USENIX ATC 2004) - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 1 イントロダクション]](§1.7.3.2、動的インストルメンテーションの歴史とDTrace公開の普及インパクトの教科書的回顧) - [[@2026__OReilly__Observability Engineering 2E - Chapter 3 The Origins of Observability in Software]](脚注、「observability」という語の系譜を Cantrill の2003年デッキに遡る当事者の回顧)