・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)。
KG | KF |
Base | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO+MEMINFO_WS |
Diag | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH |
DiagEasy | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER |
Latency | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE |
FileIO | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+FILE_IO+FILE_IO_INIT |
IOTrace | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+CSWITCH |
ResumeTrace | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+POWER |
SysProf | PROC_THREAD+LOADER+PROFILE |
ResidentSet | PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+MEMORY+MEMINFO+VAMAP+SESSION+VIRT_ALLOC |
ReferenceSet | PROC_THREAD+LOADER+HARD_FAULTS+MEMORY+FOOTPRINT+VIRT_ALLOC+MEMINFO+VAMAP+SESSION+REFSET+MEMINFO_WS |
Network | PROC_THREAD+LOADER+NETWORKTRACE |
★WPA
1. Xperfで取得したキャプチャファイルをダブルクリック。以上。
(※)シンボルの設定は環境変数で指定しておければ反映される。
[動作確認]
⇒
「Windows Internals Book」から取得した「NotMyFault」を利用。1MByte/secでリークさせる設定にして37sec間実行したケース。スタック情報からリークしているモジュール「myfault.sys」とCount(37個)を特定出来ている。
[参考]
0 件のコメント:
コメントを投稿