CLR ETW プロバイダー
共通言語ランタイム (CLR: Common Language Runtime) には、ランタイム プロバイダーとランダウン プロバイダーという 2 つのプロバイダーがあります。
ランタイム プロバイダーは、有効になっているキーワードに応じてイベントを発生させます (キーワードとはイベントのカテゴリです)。 たとえば、ローダー イベントを収集するには LoaderKeyword
キーワードを有効にします。
Windows イベント トレーシング (ETW: Event Tracing for Windows) イベントのログは、.etl 拡張子を持つファイルに記録されます。これは、必要に応じてコンマ区切り値 (.csv) ファイル内で後処理できます。 .etl ファイルを .csv ファイルに変換する方法の詳細については、「.NET Framework のログ記録の制御」を参照してください。
ランタイム プロバイダー
ランタイム プロバイダーは、メインの CLR ETW プロバイダーです。
CLR ランタイム プロバイダーの GUID は e13c0d23-ccbc-4e12-931b-d9cc2eee27e4 です。
一般に利用可能なツールを使用して CLR ETW イベントを記録および表示する方法の例については、「.NET Framework のログ記録の制御」を参照してください。
LoaderKeyword
などのキーワードを使用する以外にも、発生頻度が高いイベントを記録するためのキーワードを有効にしなければならない場合があります。 StartEnumerationKeyword
キーワードと EndEnumerationKeyword
キーワードはこれらのイベントを有効にします。概要については、「CLR ETW Keywords and Levels」(CLR ETW のキーワードおよびレベル) を参照してください。
ランダウン プロバイダー
ランダウン プロバイダーは、一部の特殊な用途で有効にする必要があります。 ただし、大半のユーザーにとっては、ランタイム プロバイダーで十分です。
CLR ランダウン プロバイダーの GUID は A669021C-C450-4609-A035-5AF59AF4DF18 です。
通常は、プロセスが開始される前に ETW のログを有効にし、プロセスの終了後にログを無効にしますが、 プロセスの実行中に ETW ログを有効にする場合もあります。その場合は、そのプロセスについて追加の情報が必要です。 たとえば、シンボルを解決するには、ログを有効にする前に既に読み込まれていたメソッドのメソッド イベントを記録する必要があります。
DCStart
イベントと DCEnd
イベントは、データの収集が開始されたときと停止されたときのプロセスの状態をキャプチャします (状態とは、既に Just-In-Time コンパイルされているメソッド、既に読み込まれているアセンブリなど、高レベルの情報を指します)。 これらの 2 つのイベントを使用すると、そのプロセスで既に行われたことに関する情報 (どのメソッドが Just-In-Time コンパイルされたかなど) を取得できます。
ランダウン プロバイダーで発生するイベントは、名前に DC
、DCStart
、DCEnd
、または DCInit
を含むイベントだけです。 また、これらのイベントはランダウン プロバイダーでしか発生しません。
ランダウン プロバイダーでは、イベント キーワード フィルターのほかに、StartRundownKeyword
と EndRundownKeyword
というキーワードによるターゲット フィルターもサポートされています。
開始ランダウン
開始ランダウンは、StartRundownKeyword
キーワードを使用してランダウン プロバイダーのイベントの記録を有効にした場合にトリガーされます。 開始ランダウンがトリガーされると、DCStart
イベントが発生して、システムの状態がキャプチャされます。 列挙の開始前には DCStartInit
イベントが発生します。 列挙の終了時には DCStartComplete
イベントが発生して、データの収集が正常に終了したことがコントローラーに通知されます。
終了ランダウン
終了ランダウンは、EndRundownKeyword
キーワードを使用してランダウン プロバイダーのイベントの記録を有効にした場合にトリガーされます。 終了ランダウンでは、実行中のプロセスのプロファイリングが停止され、 DCEnd
イベントにより、プロファイリングが停止されたときのシステムの状態がキャプチャされます。
列挙の開始前には DCEndInit
イベントが発生します。 列挙の終了時には DCEndComplete
イベントが発生して、データの収集が正常に終了したことがコンシューマーに通知されます。 開始ランダウンと終了ランダウンは、主にマネージド シンボルの解決のために使用されます。 開始ランダウンは、プロファイリング セッションが開始される前に既に Just-In-Time コンパイル (JIT コンパイル) されていたメソッドのアドレス範囲の情報を提供します。 終了ランダウンは、プロファイリングを停止するときに JIT コンパイルされていたすべてのメソッドのアドレス範囲の情報を提供します。
終了ランダウンは、プロファイリング セッションが停止されると自動的に発生するわけではありません。 ツールでマネージド シンボルを解決する必要がある場合は、プロファイリングを停止する直前に、EndRundownKeyword
キーワードを有効にして CLR ランダウン プロバイダー セッションを明示的に呼び出す必要があります。
マネージド シンボルを解決するためのメソッドのアドレス範囲の情報は、開始ランダウンと終了ランダウンのどちらでも取得できますが、EndRundownKeyword
キーワード (DCEnd
イベント) ではなく StartRundownKeyword
キーワード (DCStart
イベント) を使用することをお勧めします。 StartRundownKeyword
を使用すると、プロファイリング セッションの間にランダウンが発生するため、プロファイリング対象のシナリオに影響を与える可能性があります。
ランタイム プロバイダーとランダウン プロバイダーによる ETW データの収集
次の例は、マネージド プロセスのシンボルを、プロセスの開始または終了がプロファイリング期間の範囲内かどうかに関係なく最小限の影響で解決できるようにするための CLR ランダウン プロバイダーの使用方法を示しています。
CLR ランタイム プロバイダーを使用して ETW のログの記録を有効にします。
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
ログは、clr1.etl ファイルに保存されます。
プロセスの実行中にプロファイリングを停止するには、ランダウン プロバイダーを開始して
DCEnd
イベントをキャプチャします。xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
これにより、
DCEnd
イベントの収集を有効にして、ランダウン セッションを開始できます。 すべてのイベントが収集されるまでには 30 ~ 60 秒かかります。 ログは、clr1.et2 ファイルに保存されます。すべての ETW プロファイリングを停止します。
xperf -stop clrRundown xperf -stop clr
プロファイルをマージして 1 つのログ ファイルを作成します。
xperf -merge clr1.etl clr2.etl merged.etl
merged.etl ファイルには、ランタイム プロバイダー セッションとランダウン プロバイダー セッションのイベントが含まれます。
ツールを使用して、ユーザーがプロファイリングの停止を要求したときに直ちにプロファイリングを停止する代わりに手順 2. と 3. (ランダウン セッションを開始してからプロファイリングを終了する) が実行されるようにすることも、 手順 4. もツールで実行できます。
関連項目
.NET