演習 4 - MXA を使用してオーディオ異常を分析する
このラボでは、オーディオ異常を分析します。 オーディオ異常は、多くの場合、次のいずれかの問題が原因で発生します。
実行が 1 ミリ秒を超える遅延プロシージャ呼び出し (DPC) または割り込みサービス ルーチン (ISR)
ディスパッチ レベルで 1 ミリ秒以上実行されるドライバーまたはカーネル スレッド
ディスクまたはネットワークの使用率が高いためにディスクからデータを読み取れない場合またはネットワークが十分に高速でない場合
ハードウェアまたはソフトウェアのデコーダーで、ストリームのデコードおよび処理をリアルタイムよりも高速に実行できない場合
手順 1: MXA でトレースを開き、関連するデータセットをパネルにドラッグする
Windows ADK の一部である Media eXperience Analyzer (MXA) をインストールします。
[スタート] メニューを右クリックし、[コマンド プロンプト (管理者)] をクリックします。
MXA をインストールしたフォルダーに移動します。
PC 上で MXA シンボル パスを設定します。
こちらから AudioGlitches_ThreadsAtDispatchLevel.etl をダウンロードします。
次のコマンドを入力して AudioGlitches_ThreadsAtDispatchLevel.etl トレース ファイルを開きます。
xa.exe -i <AudioGlitches_ThreadsAtDispatchLevel.etl location>\AudioGlitches_ThreadsAtDispatchLevel.etl
たとえば、AudioGlitches_ThreadsAtDispatchLevel.etl を C:\Performance\Media にダウンロードした場合は、次のコマンドを入力します。
xa.exe -i C:\Performance\Media\AudioGlitches_ThreadsAtDispatchLevel.etl
MXA のスプラッシュ スクリーンで、[Turn Symbols Off] (シンボルをオフにする) ボタンを押 して、シンボルの参照をオフにします。
トレースを読み込んだ後、アプリケーションの中央に開いたパネルが表示される場合は、各パネルの名前の横にある小さな X を押してパネルを閉じます。
新しいパネルを 3 つ追加します。 [表示]>[New Panel] (新しいパネル) をクリックするか、CTRL + N を押します。
Media ノードの下にある Audio Glitches Classic データセットをトップ パネルにドラッグ アンド ドロップします。
CPU ノードの下にある Scheduler データセットを、トップから 2 番目のパネルにドラッグ アンド ドロップします。
CPU ノードの下にある Sampled Profiles データセットを、トップから 3 番目のパネルにドラッグ アンド ドロップします。
アイドル状態のプロセスをビューからフィルター処理し、他のスレッド アクティビティをより明確に確認できるようにします。 データセット ツリーで、CPU ノードの Scheduler データセットを展開し、Idle Threads ノードのチェック ボックスを 2 回クリックして選択を解除します。 チェック ボックスを 1 回クリックすると、グラフ内のデータが強調表示され、2 回クリックすると選択が解除されます。
手順 2: オーディオ異常が発生したトレースの領域を特定する
イベント トレース ログ (.etl) ファイルからオーディオ エンジンのデータを調べて、これらの異常がいつ発生したかを示す視覚的なタイムラインを確認し、タイムラインを他のデータのセットと比較してパターンを探すことができます。
上部の [Audio Glitches Classic] パネルのバーの 1 つをクリックしてドラッグし、オーディオ異常を拡大します。
2 番目のパネルの Scheduler データセットで iexplore.exe プロセスが、オーディオ異常の直前に長い時間 (約 20 - 35 ms) 実行されていた点に注意してください。
エスケープを押して 100% に縮小してから、前の 2 つの手順を繰り返して、すべてのオーディオ異常について、その前に iexplore.exe プロセスが長期間 (約 20 - 35 ms) 実行されていたパターンを確認します。
パネル内で時間を測定するには、Shift キーを押しながら iexplore.exe プロセスのバーの一方の端から他方の端へとマウスをドラッグします。 マウス カーソルの上のツールヒントに、タイムライン上で測定している時間 (ミリ秒) が表示されます。 次の MXA のスクリーンショットでは、このプロセスが約 35 ミリ秒間実行されていました。
手順 3: パイプラインの遅延の原因を特定する
このオーディオ異常の前には、実行時間の長い iexplore.exe プロセスがコアの 1 つで実行されていました。 iexplore.exe スレッドによってオーディオ パイプラインが停止する仕組みを確認するには、CPU ノード内の対応する Sampled Profiles データセットに注目します。
呼び出し履歴のデータ ビューアーが MXA ウィンドウに表示されない場合は、[表示]>[データ ビューアー]>[呼び出し履歴] をクリックして開きます。
[Sampled Profiles] パネル (トップから 3 番目) で、実行時間の長い iexplore.exe スレッドの色と一致するサンプル プロファイル イベントの上にカーソルを合わせます。
[呼び出し履歴] ウィンドウには、各サンプルの呼び出し履歴が表示されます。 iexplore.exe を実行しているコア内のほとんどのサンプルの上にカーソルを合わせると、特定のドライバー ImageRAMONA.sys が呼び出し履歴の一番上に表示されることに注意してください。
audiodg.exe スレッドは iexplore.exe スレッド (優先度 19) よりも高い優先度 (優先度 22) で実行されていますが、iexplore.exe スレッドはドライバー (ImageRAMONA.sys) を呼び出すため、プロセッサの IRQL レベルが上がります。 その結果、ディスパッチャーによって保持されている DPC を待機している audiodg.exe には、定期的な 10 ms サイクルで動作する機会がなくなり、オーディオ異常が発生します。
Shift キーを押したままにして [呼び出し履歴] と [プロパティ] データ ビューアーを固定し、マウスを [呼び出し履歴] に移動します。 [コピー] を押します。