将 Windows 性能工具包 (WPT) 与 WDF 配合使用

从 Windows 10 开始,可以使用 Windows Performance Toolkit (WPT) 查看给定 Kernel-Mode 驱动程序框架 (KMDF) 或 User-Mode Driver Framework (UMDF) 2 驱动程序的性能数据。

Windows 驱动程序框架如何为 WPT (WDF) 扩展提供帮助?

可以使用 WPT 获取性能见解或排查性能问题。 例如:

  • 检查驱动程序的 WDF I/O 请求完成率、CPU 利用率以及 PnP 和电源回调所用的时间。
  • 将 UMDF 2 驱动程序与类似的 KMDF 驱动程序进行比较,并确定 UMDF 是否满足性能要求。
  • 识别 WDF I/O 路径中的性能故障。
  • 确定给定回调的哪个实例需要很长时间。 然后,检查采样的 CPU 使用率以了解原因。
  • 检查设备是否过于频繁地在 D0 电源状态中切换电源。

入门

WPT 是 Windows 评估和部署工具包 (ADK) 的一部分。 可以从 下载并安装 Windows ADK 安装 ADK

WPT 由两个独立的工具组成:Windows Performance Recorder 和 Windows 性能分析器 (WPA) 。 在本主题中,我们使用 WPR 记录跟踪,然后使用 WPA 以可配置的 GUI 格式查看跟踪。

若要了解如何使用 Windows 性能工具包测量 WDF 驱动程序的性能,请watch以下视频,或阅读视频下面的步骤。 视频和步骤涵盖相同的过程。

记录和查看 WDF 驱动程序的事件日志

  1. 安装驱动程序(如果尚未安装)。

  2. 在提升的命令提示符下,输入以下命令。

    WdfPerfEnhancedVerifier.cmd<ServiceName><UMDF 或 KMDF>

    注意 应从安装 WPT 的位置复制 WdfPerfEnhancedVerifier.cmd。 如果在开发计算机上安装了 WPT,则需要将脚本从 WPT 安装目录复制到目标计算机。

此脚本设置指定驱动程序的注册表项,以便框架记录在步骤 4 中启用 ETW 提供程序时启用性能分析所需的事件。

  1. 重新启动计算机。

  2. 在提升的命令提示符下,输入以下命令。

    Wpr.exe-Start WdfTraceLoggingProvider -filemode

    此命令为 WDF 启用 ETW 提供程序。 计算机开始记录跟踪。

    注意 与步骤 2 中一样,应从安装 WPT 的位置复制 Wpr.exe。 如果在开发计算机上安装了 WPT,请将这些文件从 WPT 安装目录复制到目标计算机。

    在家庭版、专业版、企业版和教育版) (桌面版Windows 10上,还可以使用 Wprui.exe 启动跟踪,后者提供用于记录跟踪的 GUI。 在“更多选项”下,展开“ 资源分析 ”并选择“ WDF 驱动程序活动”。

  3. 练习感兴趣的方案。

  4. 停止 ETW 跟踪会话: Wpr.exe -Stop MyPerfTrace.etl

  5. 在 Windows 性能分析器查看器中打开事件跟踪日志:

    Wpa.exe MyPerfTrace.etl

若要捕获同一驱动程序的另一个跟踪,请使用 Wpr.exe 启动和停止新的跟踪。 若要捕获其他驱动程序的跟踪,请先为新驱动程序重新运行 WdfPerfEnhancedVerifier.cmd。

分析跟踪

若要开始分析驱动程序的性能,请在左侧找到“图形资源管理器”,打开“计算”类别,然后将 UMDF 或 KMDF 图拖到“分析”选项卡下的main工作区。此屏幕截图显示了“Graph 资源管理器”窗格:

Windows 性能分析器中图形资源管理器窗格的屏幕截图。

有一个专用表用于 UMDF,另一个表用于 KMDF 驱动程序。

UMDF I/O 请求图和摘要表

WPT 可以通过两种方式显示 WDF I/O 请求完成吞吐量:

  • 每秒完成的 I/O 请求数
  • 每个 I/O 请求的持续时间 (格式化为甘特图)

以下屏幕截图显示了 CPU 和 UMDF I/O 请求性能的示例摘要图和表。 在 UMDF I/O 请求完成率图中,每秒的请求数显示在 y 轴上。

UMDF I/O 请求示例摘要图和 CPU 使用率 (采样) 的屏幕截图。

摘要表中,大多数列都是不言而喻的,但有几点需要注意。 WdfDevice 列包含与 I/O 请求关联的 WDFDEVICE 句柄。 ActivityID 包含 I/O 请求的唯一标识符。 框架在向驱动程序传递 I/O 请求时创建此标识符。 如果活动标识符已与相应的 IRP 关联,框架将使用该标识符。 有关详细信息,请参阅 使用活动标识符

输入时间是框架将请求传递给驱动程序时的跟踪时间戳,退出时间是驱动程序调用 WdfRequestComplete 或相关方法完成请求时的时间戳。

KMDF I/O 请求图和摘要表

下面是一个类似的屏幕截图,其中显示了 KMDF 驱动程序的 I/O 请求信息。

KMDF I/O 请求性能图的屏幕截图。

PnP Power 回调图和摘要表

WPT 还可以显示每个 PnP 和电源回调的处理时间。 以下屏幕截图显示了示例 KMDF 驱动程序和示例 UMDF 驱动程序的 EvtDeviceD0EntryEvtDeviceD0ExitEvtDevicePrepareHardware 回调持续时间。

WdfDevice 列包含与回调关联的 WDFDEVICE 句柄。 ActivityID 包含回调实例的唯一标识符。

KMDF 和 UMDF 驱动程序的 PnP Power 回调图的屏幕截图。

检测哪些调用?

本部分介绍使用哪些事件来生成上面所示的图形和表。

为特定驱动程序运行 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
    ----------------------------------
    
  • 仅出于开发和测试目的,可以暂时禁用驱动程序代码签名策略的执行。 有关详细信息,请参阅 在开发和测试期间安装未签名的驱动程序包

Windows Performance Analyzer