将 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 驱动程序的事件日志

  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。

分析跟踪

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

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

有一个用于 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 驱动程序的 EvtDeviceD0EntryEvtDeviceD0Exit EvtDevicePrepareHardware 回调持续时间。

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

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

检测了哪些调用?

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

为特定驱动程序运行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