アプリケーションのギアを上げよう ― Visual Studio 2010でアプリケーションのパフォーマンス・チューニング ― 第1回 OS機能によるアプリのパフォーマンス測定 亀川 和史2011/04/08 |
|
|
●スタック情報を有効にしてETWを実行する方法
スタック情報を有効にしてETWを実行するには、コマンド・プロンプトから以下の画面のように(「xperf -on Latency -stackwalk profile」コマンドを)実行する。注意点として、64bit OSではレジストリを修正する必要がある(Xperfコマンド実行時に警告が出る)ので注意してほしい(詳しくは、次の画面の説明欄を参照してほしい)。ただし、レジストリを修正して、起動しなくなった場合、最悪、OSから再インストールしなければならない可能性がある。
スタック情報を有効にしたETWの実行 | ||||||
スタック情報を含めたETWイベント・トレース・データの採取を開始しているところ。 | ||||||
|
先ほどと同様に性能測定したいプログラムを実行し、「-d」オプションを付けてETLファイルに保存し(コマンド例:「xperf -d stackwalk.etl」)、XperfコマンドでETLファイルを指定して読み込ませると(コマンド例:「xperf stackwalk.etl」)、今度はPerformance Analyzerの一番上に[CPU Sampling By CPU]ビューが追加される。その中からプログラムが実行していた対象範囲を選択する。次の画面はその例だ。
「選択すべき時間範囲」と「プロセスの起動から終了までの時間範囲」の関連付けが分かりづらいという場合は、同じ右クリック・メニューの中にある[Overlay Graph]から[Process Lifetimes]−[All]を実行して、両者のレイヤを重ね合わせれば、2つの表示が重なって見づらくなるものの、選択すべき時間範囲は分かりやすくなる。あるいはから表示される[Frame List]一覧から[Process Lifetime]と[CPU Sampling By CPU]のみをチェックすれば、2つのビューだけが上下に並ぶので比較しやすくなる。
●シンボルの読み込み
スタック情報を含めた詳細な解析を行う前に、シンボルの読み込みに関する設定を行う必要がある。(メニューバーの)[Trace]メニューの中にある[Configure Symbol Paths]をクリックすると表示される[Configure Symbol Paths]ダイアログで、その設定を行える。なお、すでに環境変数「_NT_SYMBOL_PATH」にシンボル・パスを設定している場合は、あらためて設定を行う必要はない。
[Configure Symbol Paths]をクリック |
||||||
シンボルの読み込みに関する設定 | ||||||
スタック情報を含めた詳細な解析を行う前に、シンボルの読み込みに関する設定を行う必要がある。 | ||||||
|
以上の設定を行ったうえで、同じ[Trace]メニューの中にある[Load Symbols]をクリックする。これにより、[Load Symbols]メニューの左にチェックが入った状態になり、マイクロソフトのシンボル・サーバおよび、ローカルのキャッシュからシンボルが読み込まれるようになる。
●スタック情報を有効にしたETWイベント・トレース・データ採取結果の確認
それでは、スタック情報を有効にしたETWイベント・トレース・データ採取結果の詳細を確認してみよう。
先ほど選択した範囲の右クリック・メニューから[Summary Table]を選択する。[CPU Sampling Summary Table]ウィンドウが表示されるので、次の画面のように(メニューバーから)[Columns]メニューの[Stack]を選択すると、一覧表に[Stack]列が表示される。
一覧表に[Stack]列を表示する手順 | |||
スタック情報を調べるには、[Summary Table]ウィンドウ内の一覧表で[Stack]列を表示する。 | |||
|
この状態から、[Summary Table]ウィンドウ内の一覧表でプロセスの右にある[+]をクリックすると、[Stack]列に「[Root]」が表示される(次の画面を参照)。さらにその右側の[+]をクリックしていくと、(マイクロソフトのシンボル・サーバなどで)公開されているシンボルの範囲で、処理の階層構造を追跡できる。これで右側に表示されている[Weight]列/[% Weight]列および[Count]列で各行を比較すれば、実際のDLLのどの関数の呼び出しで時間がかかっているか、ある程度めぼしを付けることが可能だ。
範囲選択された時間帯で動作していた各プロセスのCPU使用率(スタック情報込みの情報)の表示 | ||||||||||||||||||
[Stack]列にスタック情報が表示されるので、より詳細に各処理でのCPU使用率を分析できる。 | ||||||||||||||||||
|
こうやって性能問題の原因個所に当たりを付けていけば、少なくとも最も呼び出し回数が多い処理は分かるだろう。
■
本稿で示したOS機能を活用したパフォーマンス測定は、Visual Studioのインストールができない環境で役に立つ。そのためにもリリースしたモジュールのシンボル・ファイル(=.pdbファイル)は大切に保持しておく必要がある(※自作プログラムの性能解析や障害解析をする場合、.pdbファイルと(アンマネージドの場合).mapファイルは必須である。詳しくは、「Tech Fielders:Visual Studio を利用したアンマネージ DLL 開発のイ・ロ・ハ」を参照してほしい)。
本稿ではVisual Studioを使わない方法を説明したが、Visual Studioで開発している場合(Visual Studio Premium以上のエディションであれば)、ソース・コードから、より詳細な性能測定/分析を行える。次回はその方法を紹介する。
INDEX | ||
アプリケーションのギアを上げよう ― Visual Studio 2010でアプリケーションのパフォーマンス・チューニング | ||
第1回 OS機能によるアプリのパフォーマンス測定 | ||
1.パフォーマンス・モニタとWindows Performance Toolkitによる性能問題の分析 | ||
2.Event Tracing for Windows(ETW)によるイベント・トレース・データの採取/分析 | ||
3.スタック情報による詳細なイベント・トレース・データの採取/分析 | ||
「アプリケーションのギアを上げよう」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -