演習 2 - Windows Performance Toolkit を使用して高速スタートアップを評価する
高速スタートアップ評価は、 簡単に読み取り可能なレポートで測定を取得する簡単な方法ですが、ADK をインストールする必要があり、これは実行に時間がかかります。 Windows Performance Recorder (WPR) ツールを使用すると、高速スタートアップ トレースを迅速に取得できます。
手順 1: WPA を使用して高速スタートアップ トレースを開く
[スタート] メニューから Windows Performance Recorder (WPR) を開きます
トレース構成を変更します。
第 1 レベルのトリアージ と CPU 使用率 プロバイダーを選択します。
パフォーマンス シナリオを高速スタートアップに変更します。
1つのトレースを収集するために、 イテレーションの回数 を 1 に変更します。
[開始] をクリックします。
結果のトレースを保存するためのパスを入力し、[保存] をクリックします。
- これにより、システムの再起動が強制され、トレースを収集して保存します。
システムが再起動したら、トレースが終了するまで 5 分間待ちます。
これで、 Windows Performance Analyzer (WPA) を使用して分析できるトレースが作成されました。
手順 2: WPA を使用して高速スタートアップ トレースを開く
[スタート] メニューから Windows Performance Analyzer (WPA) を開きます
[ファイル] メニューから、手順 1. で作成したトレースを開きます。
[プロファイル] メニューを開き、[適用…] をクリックします
[カタログを参照…] をクリックします
[Faststartup.wpaprofile] を選択します。
[開く] をクリックします。
これで、一般的に使用されるグラフ (CPU、ディスクなど) を取得するため、視覚化プロファイルがトレースに適用されました。
手順 3: アクティビティのタイムラインを視覚化する
[詳細分析] タブで、グラフの関心領域を確認します。
このビューには、演習 1 で説明したすべての高速スタートアップ サブフェーズのタイムラインの概要が表示されます。
領域バーの上にマウス ポインターを置くと、ポップアップ ウィンドウが表示され、領域自体に関する詳細情報が提供されます。
ブート メイン パス領域の上にマウスを置くと、その期間を確認できます。 次の例では、13.6 秒継続します。
領域ツリー内を移動して、すべてのサブ フェーズを確認して理解します。
Explorer が初期化して完了するまでにかかる時間は、Windows デスクトップを作成し、ユーザーに表示されるまでの時間です。 このフェーズ (およびこの後起きるすべて、再開後のオン/オフと呼ばれます) が起動時に開始されたプロセスの影響を受ける可能性があります。
Explorer の初期化の開始から 90 秒間隔を選択し、ズームインします。
関心領域グラフには、 CPU 使用率 (サンプリング) とディスク使用量という 2 つの重要なグラフがあります。 これらは、ソフトウェアが事前ロードが再開後のオン/オフのリソース消費と応答速度に与える影響を評価するために使用されます。
アプリケーションやサービスによる CPU 使用率が高いと、UI の無応答やビデオまたはサウンドの問題など、ユーザー エクスペリエンスが低下する可能性があります。 1つのプロセスで使用する CPU が多すぎる場合、システム リソースの競合が発生するため、他のプロセスが遅延する可能性があります。
スレッドでストレージ リソースを使用すると、アクティビティの実行時間が長くなる可能性があります。 ストレージの使用に対して複数のスレッドが競合した場合、その結果発生するランダムなディスク シークによって、遅延がより大きくなります。
手順 4: プロセスの CPU 使用率を分析する
プロセスによって消費される CPU 時間を評価するには、 CPU 使用率 (サンプリング) グラフに注目します。 CPU 使用率 (サンプリング) グラフに表示されるデータは、定期的な 1 ミリ秒のサンプリング間隔で取得される CPU アクティビティのサンプルです。 テーブルの各行は 1 つのサンプルを表します。
このサンプリング方法では、サンプル間に発生した CPU のアクティビティは記録されません。 そのため、割り込みなどの非常に短い時間のアクティビティは、 CPU サンプリング グラフでは十分に表示されません。
各プロセスの CPU 使用率を確認して、CPU 使用率が最も高いプロセス (重み と 重み率 %) を特定します。 これを行うには、グラフの CPU 使用率 (サンプリング)まで下にスクロールします。 左側には、プロセスの一覧が表示されます。 左側で選択されているアクティブなプロセスがグラフに表示されます。
* * ヒント: * *
WPA グラフを使用しているとき、グラフとテーブルの両方を表示するようにビューを変更できます。 [最大化] ボタンをクリックすると、[分析] タブに表示されるている他のグラフが非表示になります。
この例では、ImageSHELLY.exe は、現在分析されている 90 秒間に12.4 秒の CPU 時間を消費します。 このシステムの CPU には 2 つのコアがあるため、これは 6.9% の使用率の相対的な割合を表します。
この情報を使用して、この CPU 消費の原因となっている特定のプロセスを調査したり、このプロセスを所有している開発者にこれらの詳細を転送することができます。
追加の列を追加して、さらに詳しい情報を抽出できます (テーブルの列ヘッダーを右クリックします)。
スレッド ID: CPU 使用率の原因となったスレッドの識別子
スタック: CPU 使用率の原因となっているコード パスと関数を強調表示する呼び出し履歴
上記の例では、ImageSHELLY.exe プロセス内のほとんどの CPU 使用率の原因となっているスレッドは 1 つだけです。スレッド 2612 では、CPU アクティビティが10.77 秒です。
スタックは、このアクティビティが ImageSTACEY.dll モジュールから来ていることを示しています。
手順 5: プロセス ディスク使用量の分析
プロセスによって消費されるディスク帯域幅を評価するには、ディスク使用量グラフに注目します。
対象の列は次のとおりです。
Pri: ディスク I/O の優先度。 優先度レベルは、normal、low、および very low の 3 種類があります。
IO の種類: I/O の種類。 I/O には、読み取り、書き込み、フラッシュの 3 種類があります。
プロセス: ディスク I/O を作成したプロセスの識別子。
パス ツリー: I/O によってアクセスされるファイルの場所を表す構造化ツリー。
サイズ: I/O のサイズ (バイト単位)。
ディスク サービス時間: ディスクが I/O を処理するのにかかる時間。
IO 時間: Windows I/O キューで I/O が費やされた時間の長さ。
- IO 時間は、ディスク サービス時間よりも常に長くなります。これは、ディスクの競合が発生したとき、または優先順位の高い I/O ディスパッチャーを先に完了する必要があるときに I/O をキューに入れることができるためです。
これらの列を追加して、このビューを取得するように配置します。
再開後のオン/オフでは、通常の優先度の I/O のみが考慮されます。 プロセスに従って、それらのディスクの読み取りに関する情報を調査します。 ディスク読み取りは、プロセスやサービスを起動するために多くのデータをディスクから読み取る必要があるため、通常、ブート時のディスクのアクセス時間がディスクの書き込みよりも多くなります。
Pri: Very Low および Pri: Low シリーズの横にあるカラーマーカーをクリックして、通常の優先度の I/O だけがグラフに表示されるようにします。
テーブル ビューで、 通常の優先度の行を展開します。
テーブルビューで、[書き込み]、[読み取り]、[フラッシュ] の行を展開し、[サイズ] 列のヘッダーをクリックして、コンテンツを降順に並べ替えます。
画面は次のようになります。
前の例では、次のことを示しています。
通常の優先順位で 152 MB のデータがディスクから読み取られた。
通常の優先順位で 129 MB のデータがディスクに書き込まれた。
- これらは主にディスク書き込みであり、キャプチャされた ETL トレースファイルをストレージに保持します。
テーブル ビューで、読み取り IO の種類の行を展開します。
- これで、再開後のオン/オフ中に、読み取りディスク I/O が最も多く発生したプロセスを確認できるようになりました。
ディスク読み取りに貢献していて、Windows コンポーネントではない、上位 3 つのプロセスを特定します。
テーブル ビューで、 ImageSTUART.exeの [パス ツリー] 行を展開し、その行を移動します。
前の例では、 再開後のオン/オフ時に起動されたときに、 ImageSTUART.exe がディスクから 13.5 MB のデータを読み取り、ほとんどのアクセスは [プログラム ファイル] フォルダー内の DLL コンポーネントの読み取りを行います。
この情報を使用して、ソフトウェア開発者は自分のコンポーネントとプロセスを特定し、コンポーネントのサイズを減らすことができるかどうか、または起動コード パスを最適化してディスクから読み取られるデータ量を最小限に抑えることができるかを判断する必要があります。
また、このデータを使用して、ブート時に起動され、ディスクの使用率が高い原因となっているサードパーティのプロセスを特定することもできます。 ディスクの競合が発生していると思われる場合は、そのプロセスをイメージから削除するか、ブート時に起動しないようにすることができます。