- A+
客户期望在流式传输电影、听音乐、使用 Skype 参与视频会议以及创建媒体内容时获得流畅和无故障的体验。 本实验室介绍了 Media eXperience Analyzer (MXA),这是一个可视化性能分析工具,使工程师能够验证和优化媒体方案的质量、性能和延迟。 本实践性的实验室还涵盖了以下主题:
- 评估通信场景下的音频延迟性能和质量。
- 使用 MXA 分析音频故障,并验证音频是否已卸载。
- 使用 Windows Performance Recorder Windows (WPR) 为媒体方案收集 Windows 事件跟踪 (ETW) 日志。
目标
本指南介绍低延迟音频通信和低延迟音频故障测试。 阅读完本指南后,你将更好地了解如何使用 MXA 可视化工具来分析 ETW 日志,并确定可改善 Windows 设备上的多媒体体验的机会。
练习
本指南包含以下练习。
- 练习 1 - 针对通信方案评估设备的音频延迟性能
- 练习 2 - 使用 WPR 为媒体方案手动收集 ETW 日志
- 练习 3 - 使用 MXA 验证音频在全屏视频播放期间是否卸载
- 练习 4 - 使用 MXA 分析音频问题
练习 1 - 针对通信方案评估设备的音频延迟性能
在本练习中,我们将运行下面的一组音频延迟测试,它们可为 Windows 中支持的各种延迟模式生成延迟统计信息。 可在其中运行测试的模式包括:
- 默认模式 - 生成默认的现成音频延迟。
- 原始模式 - 删除音频处理对象 (APO)。
- 低期限 - 用于近实时场景(如 Skype)的新的低延迟模式。
该测试呈现由麦克风捕获的测试声音。
注意 此分步指南也可以在第 9 频道上以实验室视频的形式观看,该频道为开发人员提供的视频来自构建 Microsoft 产品和服务的开发人员:https://channel9.msdn.com/Events/WinHEC/2015/OWDHOL301
第 1 步:准备系统以运行测试
- 安装 Hardware Lab Kit (HLK) 控制器。
- 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。
- 浏览到 \\<controller-name>\Tests\<processor architecture>\TE 文件夹。
- 将以下测试和工具从 Hardware Lab Kit (HLK) 控制器复制到你的测试计算机中:C:\Performance\Media
- \\<controller-name>\Tests\<processor architecture>\nttest\multimediatest\wmmftest\glitchfreetaeftests.dll
- \\<controller-name>\TaefBinaries\<processor architecture>\*
- \\<controller-name>\Tests\<processor architecture>\Performance\WindowsXRay\tools\EtwPattern.dll
- \\<controller-name>\Tests\<processor architecture>\test\MediaEngineTest.exe
- \\<controller-name>\Tests\<processor architecture>\audio-test\bin\audiospew.exe
- \\<controller-name>\Tests\<processor architecture>\audio-test\bin\audiostreaming.dll
- \\<controller-name>\Tests\<processor architecture>\nttest\multimediatest\wmmftest\rws.exe
- \\<controller-name>\Tests\<processor architecture>\nttest\multimediatest\wmmftest\audio-fidelity-stress.xml
- \\<controller-name>\Tests\<processor architecture>\audio-test\bin\LatencyTest.dll
- 将扬声器的音量设置为 100%。
第 2 步:在默认模式下运行测试
- 运行以下命令:
te.exe latencytest.dll /name:LatencyTest::Vanilla
- 查看发送到命令提示符窗口的“平均”、“最大”和“最小”延迟值。
第 3 步:在原始模式下运行测试
- 运行以下命令:
te.exe latencytest.dll /name:LatencyTest::Raw
- 查看发送到命令提示符窗口的“平均”、“最大”和“最小”延迟值。
第 4 步:在低延迟模式下运行测试
- 运行以下命令:
te.exe latencytest.dll /name:LatencyTest::LowPeriod
- 查看发送到命令提示符窗口的“平均”、“最大”和“最小”延迟值。
练习 2 - 使用 WPR 为媒体方案手动收集 ETW 日志
自动测试适用于针对特定自动化场景验证设备的音频或时空视频质量;但是,如果在手动测试期间出现音频或视频故障,可以使用 Windows Performance Recorder (WPR) 工具,在问题重现期间手动收集 Windows 事件跟踪 (ETW) 跟踪。
步骤 1:使用 WPR 收集 ETW 跟踪
- 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。
- 浏览到安装 WPR 的文件夹。
- 运行以下命令:
wpr -cancel
- 运行以下命令:
wpr -start Media.wprp -filemode
- 运行工作负载,如视频播放或实时通信方案。
- 运行以下命令:
wpr -stop Media.etl
步骤 2:在 MXA 中可视化 ETW 跟踪
- 在安装 Windows ADK 的过程中安装 Media eXperience Analyzer (MXA)。
- 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。
- 浏览到安装 MXA 的文件夹。
- 运行以下命令:
xa -i <Media.etl location>\Media.etl
例如,如果 Media.etl 位于 C:\Performance\Media 中,则键入以下命令:
xa -i C:\Performance\Media\Media.etl
- 按“关闭符号”按钮关闭符号查找。
- 浏览跟踪中启用的各种与媒体相关的数据集和提供程序。
练习 3 - 使用 MXA 验证音频在全屏视频播放期间是否卸载
在支持音频卸载的芯片组上卸载音频处理会导致在音频和音频/视频播放方案中延长电池使用时间,这些方案在 Windows 下使用媒体引擎。 本练习使用 Media eXperience Analyzer (MXA) 工具确定在全屏视频播放期间音频是否卸载到硬件。
步骤 1:加载在全屏视频播放期间捕获的 ETW 跟踪
- 在安装 Windows ADK 的过程中安装 Media eXperience Analyzer (MXA)。
- 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。
- 导航到安装 MXA 的文件夹。
- 在此处下载 AudioNotOffloaded.etl。
- 运行以下命令:
xa -i <AudioNotOffloaded.etl location>\AudioNotOffloaded.etl
例如,如果将 AudioNotOffloaded.etl 下载到了 C:\Performance\Media\,则键入以下命令:
xa -i C:\Performance\Media\AudioOffload\AudioNotOffloaded.etl
- 按“关闭符号”按钮关闭符号查找。
步骤 2:验证收集 ETW 跟踪时是否呈现了音频
- 加载跟踪后,将 Microsoft-Windows-MediaFoundation-Performance 提供程序拖放到面板中。
- 通过单击此数据集旁边的复选框两次来取消选中 Microsoft-Windows-MediaFoundation-Performancee 提供程序中的所有事件。
- 启用“Task Audio_Render – 482”事件。
- 如果在整个跟踪中都触发音频呈现事件,则在收集跟踪时正在播放音频。
根据上面的屏幕截图,Microsoft-Windows-MediaFoundation-Performance 提供程序中的音频呈现事件 (Task Audio_Render – 482) 在整个跟踪中都进行了记录。 这表明正在播放音频。
步骤 3:确定是否将音频卸载到了硬件
- 将“CPU 计划程序”数据集拖放到面板中。
- 通过单击“CPU 计划程序”数据集根中的复选框两次来取消选中所有事件。
- 展开“CPU 计划程序”数据集和“Windows 系统进程”节点。
- 通过单击复选框一次选中 audiodg.exe 进程。
- 如果在整个播放会话期间存在每 10 毫秒发生一次的 audiodg.exe 线程活动,则音频未卸载。 有关示例,请参阅 MXA 屏幕截图 1。
- 如果仅在启动和关闭期间存在 audiodg.exe 线程活动,则音频正在卸载。 有关示例,请参阅 MXA 屏幕截图 2。
- 在此处下载 AudioOffloaded.etl 跟踪文件。
- 使用 AudioOffloaded.etl 跟踪而不是 AudioNotOffloaded.etl 重复步骤 1、2、3。
请注意:audiodg.exe 每 10 毫秒唤醒一次,以在整个跟踪中处理音频样本。
请注意,在播放的启动和关闭阶段,audiodg.exe 进程中的线程活动非常少。 还请注意,稳定状态期间没有线程活动。
练习 4 - 使用 MXA 分析音频问题
在本实验中,你将分析音频问题。 音频问题通常是由以下问题之一引起的:
- 运行时间超过 1 毫秒的延迟过程调用 (DPC) 或中断服务例程 (ISR)。
- 在调度级别运行 1 毫秒或更长时间的驱动程序或内核线程。
- 无法从磁盘读取数据,或者由于磁盘或网络利用率较高,网络速度不够快。
- 硬件或软件解码器无法比实时更快地解码并处理流。
步骤 1:在 MXA 中打开跟踪,并将相关数据集拖动到面板中
- 在安装 Windows ADK 的过程中安装 Media eXperience Analyzer (MXA)。
- 右键单击“开始”菜单,然后单击“命令提示符(管理员)”。
- 导航到安装 MXA 的文件夹。
- 在电脑上设置 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”初始屏幕上,按“关闭符号”按钮关闭符号查找。
- 加载跟踪后,按每个面板名称旁边的小 X,关闭在应用程序中心显示的任何打开的面板。
- 添加 3 个新面板。 单击“查看”>“新面板”或按 CTRL+N。
- 将“典型音频问题”数据集拖放到顶部面板中的“媒体”节点下。
- 将“计划程序”数据集拖放到从顶部数第 2 个面板中的“CPU”节点下。
- 将“采样的配置文件”数据集拖放到从顶部数第 3 个面板中的“CPU”节点下。
- 从视图中筛选出空闲进程,以便可以更清楚地看到其他线程活动。 在数据集树中,展开“CPU”节点中的“计划程序”数据集,并单击“空闲线程”节点复选框两次以取消选择。 单击复选框一次会突出显示图形中的数据;单击两次会取消选择。
步骤 2:确定发生音频问题的跟踪区域
可以从事件跟踪日志 (.etl) 文件中查看音频引擎数据,以查看这些问题发生时的可视时间线,并将时间线与其他数据集进行比较以查找模式。
- 通过单击并将光标拖动到顶部的“典型音频问题”面板中的某个长条上,放大某个音频问题。
- 请注意,第 2 个面板中“计划程序”数据集中的 iexplore.exe 进程在音频问题发生之前长时间运行(大约 20-35 毫秒)。
- 按 Escape 键缩小 100%,然后重复上述两个步骤,验证每个音频问题之前 iexplore.exe 进程长时间运行(大约 20-35 毫秒)的模式。
- 若要在面板中测量时间,请在按住 SHIFT 键的同时将光标从 iexplore.exe 进程条的一端拖动到另一端。 鼠标光标上的工具提示将显示在时间线上测量的毫秒数。 在下面的 MXA 屏幕截图中,进程运行了大约 35 毫秒。
步骤 3:确定管道中出现延迟的原因
在此音频问题发生之前,长时间运行的 iexplore.exe 进程正在其中一个核心上运行。 若要了解 iexplore.exe 线程是如何使音频管道停止的,可以在“CPU”节点中查看相应的“采样的配置文件”数据集。
- 如果 CallStack 数据查看器在“MXA”窗口中不可见,请依次单击“查看”>“数据查看器”>“CallStack”以打开它。
- 在“采样的配置文件”面板(从顶部数第 3 个面板)中,将光标悬停在与长时间运行的 iexplore.exe 线程颜色相同的示例配置文件事件上。
- “CallStack”窗口显示每个示例的调用堆栈。 请注意,将光标悬停在 iexplore.exe 运行所在的核心中的大多数样本上时,特定驱动程序 ImageRAMONA.sys 位于 CallStack 的顶部。
- 尽管 audiodg.exe 线程(优先级为 22)的优先级高于 iexplore.exe(优先级为 19),但 iexplore.exe 线程会调用驱动程序 (ImageRAMONA.sys),从而提升处理器的 IRQL 级别。 因此,在调度程序保留的 DPC 上等待的 audiodg.exe 无法按 10 毫秒的常规节奏运行,从而导致音频问题。
- 按住 SHIFT 键可冻结 CallStack 和“属性数据”查看器,然后将光标移动到 CallStack 上。 按“复制”。