练习 4 - 使用 MXA 分析音频问题

在本实验中,你将分析音频问题。 音频问题通常是由以下问题之一引起的:

  • 运行时间超过 1 毫秒的延迟过程调用 (DPC) 或中断服务例程 (ISR)。

  • 在调度级别运行 1 毫秒或更长时间的驱动程序或内核线程。

  • 无法从磁盘读取数据,或者由于磁盘或网络利用率较高,网络速度不够快。

  • 硬件或软件解码器无法比实时更快地解码并处理流。

步骤 1:在 MXA 中打开跟踪,并将相关数据集拖动到面板中

  1. 在安装 Windows ADK 的过程中安装 Media eXperience Analyzer (MXA)。

  2. 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。

  3. 导航到安装 MXA 的文件夹。

  4. 在电脑上设置 MXA 符号路径。

  5. 此处下载 AudioGlitches_ThreadsAtDispatchLevel.etl。

  6. 通过键入以下命令打开 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
    
  7. 在“MXA”初始屏幕上,按“关闭符号”按钮关闭符号查找。

    Media eXperience Analyzer (MXA) 中“符号”选项按钮的屏幕截图。

  8. 加载跟踪后,按每个面板名称旁边的小 X,关闭在应用程序中心显示的任何打开的面板。

  9. 添加 3 个新面板。 单击“查看”>“新面板”或按 CTRL+N。

  10. 将“典型音频问题”数据集拖放到顶部面板中的“媒体”节点下。

  11. 将“计划程序”数据集拖放到从顶部数第 2 个面板中的“CPU”节点下。

  12. 将“采样的配置文件”数据集拖放到从顶部数第 3 个面板中的“CPU”节点下。

  13. 从视图中筛选出空闲进程,以便可以更清楚地看到其他线程活动。 在数据集树中,展开“CPU”节点中的“计划程序”数据集,并单击“空闲线程”节点复选框两次以取消选择。 单击复选框一次会突出显示图形中的数据;单击两次会取消选择。

步骤 2:确定发生音频问题的跟踪区域

可以从事件跟踪日志 (.etl) 文件中查看音频引擎数据,以查看这些问题发生时的可视时间线,并将时间线与其他数据集进行比较以查找模式。

  1. 通过单击并将光标拖动到顶部的“典型音频问题”面板中的某个长条上,放大某个音频问题。

  2. 请注意,第 2 个面板中“计划程序”数据集中的 iexplore.exe 进程在音频问题发生之前长时间运行(大约 20-35 毫秒)。

  3. 按 Escape 键缩小 100%,然后重复上述两个步骤,验证每个音频问题之前 iexplore.exe 进程长时间运行(大约 20-35 毫秒)的模式。

  4. 若要在面板中测量时间,请在按住 SHIFT 键的同时将光标从 iexplore.exe 进程条的一端拖动到另一端。 鼠标光标上的工具提示将显示在时间线上测量的毫秒数。 在下面的 MXA 屏幕截图中,进程运行了大约 35 毫秒。

    显示示例进程运行约 35 毫秒的 Media eXperience Analyzer (MXA) 屏幕截图。

步骤 3:确定管道中出现延迟的原因

在此音频问题发生之前,长时间运行的 iexplore.exe 进程正在其中一个核心上运行。 若要了解 iexplore.exe 线程是如何使音频管道停止的,可以在“CPU”节点中查看相应的“采样的配置文件”数据集。

  1. 如果 CallStack 数据查看器在“MXA”窗口中不可见,请依次单击“查看”>“数据查看器”>“CallStack”以打开它。

  2. 在“采样的配置文件”面板(从顶部数第 3 个面板)中,将光标悬停在与长时间运行的 iexplore.exe 线程颜色相同的示例配置文件事件上。

  3. “CallStack”窗口显示每个示例的调用堆栈。 请注意,将光标悬停在 iexplore.exe 运行所在的核心中的大多数样本上时,特定驱动程序 ImageRAMONA.sys 位于 CallStack 的顶部。

  4. 尽管 audiodg.exe 线程(优先级为 22)的优先级高于 iexplore.exe(优先级为 19),但 iexplore.exe 线程会调用驱动程序 (ImageRAMONA.sys),从而提升处理器的 IRQL 级别。 因此,在调度程序保留的 DPC 上等待的 audiodg.exe 无法按 10 毫秒的常规节奏运行,从而导致音频问题。

  5. 按住 SHIFT 键可冻结 CallStack 和“属性数据”查看器,然后将光标移动到 CallStack 上。 按“复制”。

显示 CallStack 数据查看器的 Media eXperience Analyzer (MXA) 屏幕截图。