2014年10月19日日曜日

Xperf+WPAの使い方メモ(メモリリーク解析の例を添えて)

・Xperfによるカーネルトレースのキャプチャ
・WPA(Windows Perfomrance Analyzer)によるトレース情報の分析
に関するメモ書き(参考文献の内容を見て自分で動作確認してみただけ)。


[使い方]
★Xperf
1. コマンドプロンプトを管理者権限で起動
2. 「Xperf.exe」が存在するディレクトリへ移動
 ※自分の場合「C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit
3. Xperfによるキャプチャ開始
4. Xperfによるキャプチャ終了(と同時にETLファイルの書き出し)

<3.4で実行するコマンド形式>
○キャプチャ開始 : 「XPerf -on <カーネルフラグ> -stackwall <Stack Walking フラグ>」
 ⇒カーネルフラグ値は「xperf -providersで確認可。
 ⇒Stack Walkingフラグ値は「xperf -help stackwalk」で確認可。
 ⇒デフォルトではログファイルが延々と増え続けるが、
  「-FileMode Circular」を指定すれば循環出力してくれる(最新のログで上書かれる)
 (ex) 「Xperf -on Latency -stackwalk profile -FileMode Circular
    「Xperf -on Base+CSwitch+POOL -stackwalk PoolAlloc+PoolAllocSession
○キャプチャ終了 : 「XPerf -d <ファイルの出力先パス>」
 ⇒キャプチャの終了とキャプチャファイルの書き出しが同義。
 (ex) 「Xperf -d C:\Xperf\Test.etl」

カーネルフラグの指定については、フラグ値を個別に指定(+で連結)する方法と、複数の代表的なフラグを括ったカーネルグループを指定する方法の2通りが存在する。

或はカーネルグループとカーネルフラグを連結する方法も可(ex. Base+CSwitch+POOL)。






















KGKF
BasePROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO+MEMINFO_WS
DiagPROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH
DiagEasyPROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER
LatencyPROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE
FileIOPROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+FILE_IO+FILE_IO_INIT
IOTracePROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+CSWITCH
ResumeTracePROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+POWER
SysProfPROC_THREAD+LOADER+PROFILE
ResidentSetPROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+MEMORY+MEMINFO+VAMAP+SESSION+VIRT_ALLOC
ReferenceSetPROC_THREAD+LOADER+HARD_FAULTS+MEMORY+FOOTPRINT+VIRT_ALLOC+MEMINFO+VAMAP+SESSION+REFSET+MEMINFO_WS
NetworkPROC_THREAD+LOADER+NETWORKTRACE


★WPA
1. Xperfで取得したキャプチャファイルをダブルクリック。以上。
  (※)シンボルの設定は環境変数で指定しておければ反映される。


[動作確認]












Windows Internals Book」から取得した「NotMyFault」を利用。1MByte/secでリークさせる設定にして37sec間実行したケース。スタック情報からリークしているモジュール「myfault.sys」とCount(37個)を特定出来ている。


[参考]

0 件のコメント:

コメントを投稿