スレッド ビュー (並行処理のパフォーマンス)
スレッド ビューは、同時実行ビジュアライザーの中で最も詳細で多機能なビューです。このビューを使用すると、スレッドが何であるかを識別し、その同期、I/O、またはそのほかのように実行するか、ブロックされます。
プロファイル分析では、同時実行ビジュアライザーでは、各アプリケーション スレッドのオペレーティング システムのコンテキスト切り替えイベントを調べます。コンテキスト切り替えは、次のような、さまざまな理由で発生する:
同期プリミティブでスレッドがブロックされた
スレッドのクォンタムの期限が切れた
スレッドがブロックの原因となる I/O 要求を実行した
スレッド ビューには、各コンテキストの切り替えに、スレッドが実行を停止したカテゴリを割り当てます。カテゴリは、ビューの左下の一部の凡例に表示されます。同時実行ビジュアライザーは、既知のブロッキング API をスレッドの呼び出し履歴を検索してコンテキスト切り替えイベントを使用します。呼び出し履歴の一致が存在しない場合、Windows によって提供される待機の原因が使用されます。ただし、Windows のカテゴリは実装に基づいており、ユーザーの意図を反映しないそうでない場合があります。たとえば、Windows は同期ではなく I/O としてネイティブ スリム リーダー ライター ロックでの待機のブロッキングの原因を報告します。ほとんどの場合、コンテキスト切り替えイベントに対応する呼び出し履歴を調べることでブロック イベントの根本的な原因を特定できます。
スレッド ビューには、スレッド間の依存関係を表します。たとえば、同期オブジェクトでブロックされたスレッドを特定すると、他の 1 種類のブロックを解除したときに、ブロックを解除した時点で、そのスレッドの呼び出し履歴のアクティビティを調べるスレッドを検索します。
スレッドの実行中に、同時実行ビジュアライザーでは、サンプルが収集されます。スレッド ビューでは、コードが実行セグメントの間に一つ以上のスレッドで実行されるかを分析できます。、ブロッキングの呼び出し履歴のツリーの実行プロファイリング レポートとレポートを確認できます。
使用法
スレッド ビューを使用して、方法があります:
アプリケーションのユーザー インターフェイス (UI) が特定の実行フェーズ中に応答しない理由を特定します。
同期、I/O、ページ フォールトやそのほかのイベントで費やされたブロッキングにかかる時間を指定します。
システムで実行されている他のプロセスによる干渉の程度を指定します。
並列実行の負荷分散問題を特定します。
多くの論理コアが使用できると並列) アプリケーションのパフォーマンスが改善しない理由など、スケーラビリティ、最適なスケーラビリティの理由を指定します (たとえば。
並列に役立つようにアプリケーションの同時実行の程度を理解します。
実行のワーカー スレッドとクリティカル パスの間の依存関係を把握する。
確認の特定の時間間隔とスレッド
スレッド ビュー タイムラインを示します。タイムライン内でアプリケーションの特定のスペーシングとスレッドを調べるには、ズーム、パンする。x 軸の時間であり、y 軸に複数のチャネルがあります:
システムの各ディスク ドライブの 2 種類の I/O チャネル、1 番目のチャネルがの読み込み、1 はに書き込みます。
プロセスの各スレッドのチャネル。
トレースにマーカーのイベントがある場合は、チャネル マーカー。マーカー チャネルは、イベントを生成したスレッド チャネルの下に表示されます。
GPU チャネル。
スレッド ビューの図を次に示します。:
スレッド ビュー
最初に、スレッドが作成された順にメインのアプリケーション スレッドが 1 番目のと同様に、並べ替えられます。ビューの左上隅にある他の条件によってスレッドを並べ替える並べ替えオプションを使用して (たとえば、実行するほとんどの実行作業によって)。
左の列の名前を選択し、ツール バーの [選択したスレッドを非表示にします] ボタンをクリックすると、タスクを実行していないスレッドを非表示にします。これは統計情報が関係がなく、レポートを詰らせるできるため、ブロックされたスレッドを非表示にすることをお勧めします。
へ追加スレッドを特定するには、アクティブな凡例に非表示に [プロファイル レポート] タブの [スレッド別の概要] のレポートを選択します。これは、現在選択されている時間間隔のスレッドの状態を示す実行ブレークダウン"グラフを表示します。のズーム レベルで、あるスレッドが表示されない場合があります。この場合、省略記号は右側に表示されます。
その時間と、スレッドの間隔は、パフォーマンス分析を開始します。
Analysis Tools
ここでは、レポート、およびそのほかの分析ツールについて説明します。
スレッドのブロックの詳細
スレッドに特定の領域ブロック イベントに関する情報を取得するには、ツールヒントが表示されるように、領域にポインターを置きます。これは、1 より大きい場合、カテゴリ、領域の開始時間などの情報が含まれ、長さ、ブロッキング API をブロックします。ブロッキング領域を選択すると、時間のスタックはその時点ツールヒントに同じ情報とともに下部のペインに表示されます。呼び出し履歴を調べることで、スレッドをブロックしたイベントの根本的な原因を特定できます。セグメントを選択し、現在のタブを調べることによって、追加のプロセスおよびスレッド情報を確認できます。
実行パスには複数のブロック イベントがあります。カテゴリのブロックで、これらを調べて問題領域をすばやく見つけることができます。、左の凡例のブロッキングのカテゴリの 1 をクリックします。
スレッド間の依存関係
同時実行ビジュアライザーでは、プロセスでブロックされたスレッドが、他のスレッドが実行可能にした内容を確認しようとしていたかを判断できるように、スレッド間の依存関係を示すことができます。まで、どのスレッドが別のスレッドのブロックを解除したのかを確認するには、関連するブロッキング セグメントを選択します。同時実行ビジュアライザーが Unblock のスレッドが判断できた場合、ブロック解除のスレッドとブロッキング セグメントに続く実行セグメントの間に直線を描画します。また、[ブロック解除スタック] タブに関連する呼び出し履歴が表示されます。
スレッド実行の詳細
スレッドのタイムライン グラフで、緑のセグメントは、コードを実行していたかを示します。実行セグメントに関する詳細情報を取得できます。
次に実行セグメントのポイントを選択すると、同時実行ビジュアライザーでは、関連する呼び出し履歴の位置を検索し、実行セグメントにおける点の上に黒のキャレットを表示し、[現在のスタック] タブに呼び出し履歴が表示されます。実行セグメントの複数のポイントを選択できます。
[!メモ]
同時実行ビジュアライザーは、実行セグメントの選択を解決できない場合があります。通常、セグメントの長さが 1 ミリ秒未満にはの場合に発生します。
に現在指定時間範囲のすべての有効な (非表示) スレッドの実行プロファイルを取得するには、アクティブな凡例の [実行] ボタンをクリックします。
タイムライン グラフ
タイムライン グラフには、プロセス内のすべてのスレッド、およびホスト コンピューター上のすべての物理ディスク デバイスのアクティビティが表示されます。また、GPU アクティビティとマーカーのイベントが表示されます。より多くの詳細を表示したり、時間の長い時間を表示するために拡大できます。、カテゴリ、開始時間、長さ、および呼び出し履歴の状態に関する詳細情報を取得するためのグラフのポイントを選択できます。
タイムライン グラフで、スレッドの状態がある時点で示します。たとえば、緑のセグメントは実行していた、赤色のセグメントは同期用に一つ、黄色のセグメントは占有され、紫色のセグメントはデバイス I/O で実行されます。並列ループ、同時実行に関連するスレッドの間のバランスを調べる場合は、このビューを使用できます。スレッドが完了するために、より多くの時間がかかり、作業は危険な場合があります。スレッド間の作業をより公平に配布して、プログラムのパフォーマンスを向上させるために、この情報を使用できます。
1 種類のスレッドのみ時点で緑 (実行) の場合、アプリケーションはシステムの同時実行を十分に活用されていない可能性があります。ブロッキングとブロックされたスレッドのスレッドに一時的なリレーションシップ間の依存関係を調べるために、タイムライン グラフを使用できます。次にスレッドを並べ替えるために、ツール バーのスレッドを、上下に選択しますをクリックします。にスレッドを非表示にするには、それらを選択し、[スレッドを隠す] ボタンをクリックします。
プロファイル レポート
タイムライン グラフの下にタイムライン プロファイルとさまざまなレポートのタブを持つウィンドウがあります。レポートは自動的にスレッド ビューを変更するように更新します。大規模なトレースに、レポートのペインが更新の計算中、使用できない場合があります。各レポートに 2 個のフィルターの調整があります: 不要項目の非表示とマイ コードのみ。少し時間がかかるコール ツリー エントリが除外するには、不要項目の非表示オプションを使用します。既定のフィルター値は 2 です。ただし、それを調整してから 0 ~ 99。コードへのコール ツリーを表示するには、[マイ コードのみ] チェック ボックスをオンにします。にすべてのコール ツリーを表示するには、属性をオフにします。
プロファイル レポート
このタブには、アクティブな凡例のエントリに対応するレポートを示します。でレポートを表示するには、エントリの 1 をクリックします。
現在のスタック
このタブは、タイムライン グラフでスレッド セグメントの指定ポイントの呼び出し履歴が表示されます。呼び出し履歴は、プログラムに関連するアクティビティが非表示になり、
ブロック解除スタック
を参照するには、どのコード行で選択したスレッドをクリックします [ブロック解除スタック] タブのブロックを解除します。
実行
実行レポートは、実行に時間のように費やされたアプリケーションを示します。
次に実行時間に該当するコード行を見つけるために、コール ツリー エントリのショートカット メニューのコール ツリーを展開し、または [呼び出しサイトの表示][ソースの表示] をクリックします。[ソースの表示] は 実行されたコード行を検索します。[呼び出しサイトの表示] は 実行されたコード行を呼び出したコードが検索されます。1 呼び出しサイトが一つだけの場合、コード行が強調表示されます。呼び出しサイトが複数ある場合は、1 を選択できますが、表示し、呼び出しサイト コードを強調表示するに [ソースに移動] ボタンを選択するダイアログ ボックスです。通常は、インスタンス数が最も、ほとんどの時間、またはその両方を持つ呼び出しサイトを見つけるのに役立ちます。詳細については、「実行プロファイル レポート」を参照してください。
同期
同期レポートには、同期ブロックの原因となった呼び出しが表示されると共に、各呼び出し履歴のブロック時間の総計が表示されます。詳細については、「同期時間」を参照してください。
入出力
I/O レポートには、I/O ブロックの原因となった呼び出しが表示されると共に、各呼び出し履歴のブロック時間の総計が表示されます。詳細については、「I/O 時間 (スレッド ビュー)」を参照してください。
Sleep
スリープ レポートには、スリープ ブロックの原因となった呼び出しが表示されると共に、各呼び出し履歴のブロック時間の総計が表示されます。詳細については、「スリープ時間」を参照してください。
メモリ管理
メモリ管理レポートには、各呼び出し履歴の数のブロッキング時間とともにメモリ管理ブロックの原因となった呼び出しが表示されます。余分なページングやガベージ コレクションの問題がある領域を識別するには、この情報を使用できます。詳細については、「メモリ管理時間」を参照してください。
優先
優先レポートは、システムのプロセスは、現在のプロセスのスレッドを二つのユーザー スレッドと現在のプロセスを占有されているインスタンスに示します。最も優先に対応しているスレッドとプロセスを識別するために、この情報を使用できます。詳細については、「優先時間」を参照してください。
UI 処理
UI 処理レポートには、UI 処理ブロックの原因となった呼び出しが表示されると共に、各呼び出し履歴のブロック時間の総計が表示されます。詳細については、「UI 処理時間」を参照してください。
スレッド別の概要
このタブは、実行ブロック I/O などの状態の合計時間の総計を色別に表した列のビューには、各スレッドを示します。棒の最下部にはラベルが表示されます。タイムライン グラフでズーム レベルを調整すると、タブが自動的に更新されます。のズーム レベルで、あるスレッドが表示されない場合があります。この場合、省略記号は右側に表示されます。対象のスレッドが、他のスレッドを切り替えることができる場合。詳細については、「スレッド別の概要レポート」を参照してください。
ディスク操作
このタブは、プロセスのスレッドがファイル (DLL と、内容、読み取られたバイト数などの情報や、読み込まれた触れた) 現在のプロセスに代わってディスク I/O させるうえで関係または。特にプロセスがバインドされる I/O のような場合、実行中にファイルにアクセスするのにかかる時間を評価するには、このレポートを使用できます。詳細については、「ディスク操作レポート (スレッド ビュー)」を参照してください。