Windows Performance Analyzer (WPA) のインストールとシンボル パスの設定

## Windows Performance Analyzer (WPA) とは？
[Windows Performance Analyzer (WPA)](https://learn.microsoft.com/ja-jp/windows-hardware/test/wpt/windows-performance-analyzer) は、Windows のパフォーマンス データを解析するためのツールです。WPA を使用すると、Windows Performance Recorder (WPR) によって生成された ETL ファイルを可視化し、システムリソースの使用状況やアプリケーションのパフォーマンス問題を詳細に分析することが可能になります。CPU、メモリ、ディスクI/Oなど、さまざまなパフォーマンス指標をグラフや表で表示し、パフォーマンスのボトルネックや問題点を特定するのに役立ちます。

今回は、WPA のインストール方法と解析に必要なシンボル情報を保存するためのシンボル パスの設定方法を紹介します。

なお、WPA で解析対象となる ETL ファイルを WPR で作成する方法は、こちらの Web サイトに書いたので一読しておくとよいと思います。

https://jpwinsup.github.io/blog/2024/01/05/Performance/SystemResource/Whatswpr/

## 環境
Windows 10
Windows 11
※ スクリーンショットは、Windows 11 23H2 で取得しています。

## 1. Windows Performance Analyzer インストール
Windows Performance Analyzer は、Microsoft Store から簡単にインストール可能です。Microsoft Store へは以下のリンクからアクセスできます。

https://apps.microsoft.com/detail/9n0w1b2bxgnz

Microsoft Store が使用できない場合には、以下の Web サイトで紹介されている Windows アセスメント & デプロイメント キット (Windows ADK) の Performance Toolkit に Windows Performance Analyzer は含まれているので、Performance Toolkit をインストールしてください。

https://learn.microsoft.com/ja-jp/windows-hardware/get-started/adk-install

## 2. シンボル パス設定
### シンボル
シンボルは、ソフトウェア開発やデバッグにおいて特定のプログラム要素を識別するための名前を指します。シンボルは、ソースコードとコンパイルされたバイナリコードの間で対応関係を持ち、開発者がコードを理解しやすくするために使われます。具体的には、以下のようなものがシンボルに該当します。

### シンボルの例
- **関数名**: 例えば、`CalculateSum()` という関数の名前
- **変数名**: 例えば、`totalAmount` という変数名
- **クラス名**: 例えば、`UserProfile` というクラス名
- **メソッド名**: 例えば、`UserProfile.getUserName()` というメソッドの名前

### デバッグにおけるシンボルの役割
シンボルがあることで、デバッガーはバイナリコードを人間が理解しやすい形に変換できます。例えば、エラーメッセージやスタックトレースに表示される情報が「0x0042F56A のメモリアドレスでエラーが発生」ではなく、「CalculateSum 関数の23行目でエラーが発生」というように分かりやすくなります。

### シンボルと PDB ファイル
シンボルは、通常、コンパイル後にバイナリコードからは削除されますが、デバッグ用に生成される PDB ファイルへ保存されます。これにより、デバッグ セッション中にソースコードと実行中のコードとの間の対応関係が維持され、デバッグがしやすくなります。

シンボルは、特にデバッグや解析の際に不可欠な要素で、コードの動作やエラーの原因を迅速に把握するために使われます。`https://msdl.microsoft.com/download/symbols` で Windows OS の PDB ファイルは、公開されています。ただ、未公開なシンボル情報が多いため、確認できる範囲は限定的です。

PDB ファイルのことをシンボルファイルと呼ぶこともあり、PDB ファイルが保存されているフォルダのパスがシンボル パスになります。

### シンボル パスを環境変数から設定
#### Step 1. Windows + r から sysdm.cpl を実行
![sysdm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/42f6b94b-e723-ae4b-1f96-e59bd3164530.png)

#### Step 2. 詳細設定タブの [環境変数] ボタンをクリック
![system_property.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/c66ffa14-398f-3ffc-d852-94564abbb2cd.png)

#### Step 3. ユーザーの環境変数へシンボル パスを追加
上の段にあるユーザー側の [新規] ボタンをクリックします。
![environment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/9c201c64-50a8-5697-eabb-f1b8a0b89d75.png)

:::note info
システムの環境変数に追加しても OK です。その場合、端末にログインするすべてのユーザーに対して、同じシンボル パスの設定が可能です。
:::

新しいユーザー変数を２つ追加します。

変数名：_NT_SYMBOL_PATH
変数値：`srv*d:\symbols*https://msdl.microsoft.com/download/symbols`
![_NT_SYMBOL_PATH.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/2dee11eb-e257-7762-7ccc-dd8ae8a4992c.png)

変数名：_NT_SYMCACHE_PATH
変数値：`d:\SymCache`
![_NT_SYMCACHE_PATH.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/13747212-6ee3-2d11-a9ca-37ab6f02e4a9.png)

:::note info
変数値にある `d:\symbols` と `d:\SymCache` は、シンボルの保存先フォルダになり、任意の場所に変更が可能です。シンボル ファイルのサイズはかなり大きくなりますので、容量に空きのあるドライブを指定するとよいです。
:::

https://learn.microsoft.com/en-us/windows-hardware/test/wpt/loading-symbols

## さいごに
WPA を使用すると、CPU、メモリ、ディスクI/Oなどの高負荷の原因調査が可能です。次回以降では、CPU、メモリ、ディスク I/O の解析方法について投稿しようと思います。