将 Windows Performance Toolkit (WPT) 与 WDF 配合使用
从 Windows 10 开始,可以使用 Windows 性能工具包(WPT)查看给定内核模式驱动程序框架(KMDF)或用户模式驱动程序框架(UMDF)2 驱动程序的性能数据。
适用于 WPT 的 Windows 驱动程序框架 (WDF) 扩展如何帮助?
可以使用 WPT 获取性能见解或排查性能问题。 例如:
- 检查驱动程序的 WDF I/O 请求完成率、CPU 利用率以及 PnP 和电源回调所用的时间。
- 将 UMDF 2 驱动程序与类似的 KMDF 驱动程序进行比较,并确定 UMDF 是否符合性能要求。
- 识别 WDF I/O 路径中的性能故障。
- 确定给定回调的实例需要很长时间。 然后检查抽样 CPU 使用情况以了解原因。
- 检查设备是否频繁进入和退出 D0 电源状态。
使用入门
WPT 是 Windows 评估和部署工具包(ADK)的一部分。 可以从“下载”安装 ADK 并安装 Windows ADK。
WPT 由两个单独的工具组成:Windows 性能记录器和 Windows 性能分析器(WPA)。 在本主题中,我们使用 WPR 记录跟踪,然后使用 WPA 以可配置的 GUI 格式查看跟踪。
若要了解如何使用 Windows 性能工具包来度量 WDF 驱动程序的性能,请观看以下视频,或阅读视频下面的步骤。 视频和步骤涵盖相同的过程。
记录和查看 WDF 驱动程序的事件日志
安装驱动程序(如果尚未安装)。
在提升的命令提示符下,输入以下命令。
<WdfPerfEnhancedVerifier.cmd ServiceName><UMDF 或 KMDF>
请注意 ,应从安装 WPT 的位置复制WdfPerfEnhancedVerifier.cmd。 如果在开发计算机上安装了 WPT,则需要将脚本从 WPT 安装目录复制到目标计算机。
此脚本设置指定驱动程序的注册表项,以便框架记录在步骤 4 中启用 ETW 提供程序时启用性能分析所需的事件。
重新启动计算机。
在提升的命令提示符下,输入以下命令。
Wpr.exe -Start WdfTraceLoggingProvider -filemode
此命令为 WDF 启用 ETW 提供程序。 计算机开始记录跟踪。
请注意 ,如步骤 2 中所示,应从安装 WPT 的位置复制Wpr.exe。 如果在开发计算机上安装了 WPT,请将这些文件从 WPT 安装目录复制到目标计算机。
在 Windows 10 桌面版(家庭版、专业版、企业版和教育版)上,还可以使用 Wprui.exe 启动跟踪,该跟踪提供用于录制跟踪的 GUI。 在更多选项下,展开 资源分析 并选择 WDF 驱动程序活动。
练习感兴趣的方案。
停止 ETW 跟踪会话: Wpr.exe -Stop MyPerfTrace.etl
在 Windows 性能分析器查看器中打开事件跟踪日志:
Wpa.exe MyPerfTrace.etl
若要捕获同一驱动程序的另一个跟踪,请使用Wpr.exe启动和停止新跟踪。 若要捕获其他驱动程序的跟踪,请先重新运行新驱动程序WdfPerfEnhancedVerifier.cmd。
分析跟踪
若要开始分析驱动程序的性能,请在左侧找到 Graph 资源管理器,打开计算类别,然后将 UMDF 或 KMDF 图形拖动到“分析”选项卡下的主要工作区域。此屏幕截图显示了“图形资源管理器”窗格:
有一个用于 UMDF 的专用表,另一个表用于 KMDF 驱动程序。
UMDF I/O 请求图和摘要表
WPT 可以通过两种方式显示 WDF I/O 请求完成吞吐量:
- 每秒完成的 I/O 请求数
- 每个 I/O 请求的时间持续时间(格式化为甘特图)
以下屏幕截图显示了 CPU 和 UMDF I/O 请求性能的示例摘要图和表。 在 UMDF I/O 请求完成率图中,每秒请求数显示在 y 轴上。
在 摘要表中,大多数列都是自我解释的,但需要注意几个事项。 WdfDevice 列包含与 I/O 请求关联的 WDFDEVICE 句柄。 ActivityID 包含 I/O 请求的唯一标识符。 框架在向驱动程序传递 I/O 请求时创建此标识符。 如果活动标识符已与相应的 IRP 关联,则框架使用该标识符。 有关详细信息,请参阅 “使用活动标识符”。
输入时间是框架将请求传递到驱动程序时的跟踪时间戳,退出时间是调用 WdfRequestComplete 的驱动程序或完成请求的相关方法时的时间戳。
KMDF I/O 请求图和摘要表
下面是类似的屏幕截图,其中显示了 KMDF 驱动程序的 I/O 请求信息。
PnP Power 回调图和摘要表
WPT 还可以显示每个 PnP 和电源回调的处理时间。 以下屏幕截图显示了示例 KMDF 驱动程序和示例 UMDF 驱动程序的 EvtDeviceD0Entry、EvtDeviceD0Exit 和 EvtDevicePrepareHardware 回调持续时间。
WdfDevice 列包含与回调关联的 WDFDEVICE 句柄。 ActivityID 包含回调实例的唯一标识符。
检测了哪些调用?
本部分介绍哪些事件用于生成上面所示的图形和表。
为特定驱动程序运行WdfPerfEnhancedVerifier.cmd后,当系统调用某些指定驱动程序的回调时,框架将记录 ETL 跟踪日志中的事件,并在指定的驱动程序调用某些框架方法时记录事件。
若要确定 I/O 请求何时启动,框架在调用以下回调时记录事件:
当驱动程序调用以下方法时,框架还会记录 I/O 请求启动事件:
若要确定 I/O 请求何时完成,框架跟踪驱动程序调用的时间:
最后,为了确定 PnP/Power 回调的回调持续时间,框架在调用以下驱动程序提供的回调例程以及它们完成时记录:
资源和故障排除
运行WdfPerfEnhancedVerifier.cmd脚本后,请务必重新启动。
若要确定驱动程序是否已配置为记录事件日志,请使用 !WdfKd.wdfdriverinfo 内核调试器命令。 如果驱动程序配置为进行性能跟踪,则会看到如下所示的输出:
!WdfKd.WdfDriverInfo Echo.sys … … ---------------------------------- WDF Verifier settings for echo.sys is ON Enhanced verifier: performance analysis hooking ON ----------------------------------
仅用于开发和测试目的,可以暂时禁用驱动程序代码签名策略的强制实施。 有关详细信息,请参阅 在开发和测试过程中安装未签名的驱动程序包。