windows USB 设备驱动开发-将 Xperf 与 USB ETW 配合使用

可以将 Xperf 与 Netmon 配合使用来分析跟踪数据,或分析与 USB 跟踪相同的时间线上的内核事件。 Xperf 位于 Windows Performance Toolkit 中,它是 Windows 评估和部署工具包 (ADK) 的一 部分。

在 Xperf 中查看 USB 事件跟踪

若要分析性能和计时问题,可以使用 Xperf 查看 USB 事件跟踪。 例如,如果有名为 usb.etl 的事件跟踪日志文件,并且已下载 Xperf 工具,请发出以下命令来分析跟踪:

xperf usb.etl

Xperf 以图形形式显示事件的视图。 初始视图是时间线视图,其中每个菱形表示此图像中的一个或多个事件。 钻石根据事件提供程序进行颜色编码。

时间线视图以图形方式显示事件活动的群集。 在图形视图中,很容易看到事件活动的周期性,以 1 秒间隔查看为 USB 大容量存储设备在此示例中的设备摘要事件跟踪之后发生的 USB 传输请求。

可以在时间线各部分之间移动鼠标指针并放大。 此图显示放大跟踪开头发生的设备摘要事件。

可以在电子表格窗体中显示整个跟踪的事件摘要表,也可以只显示所选间隔,如下图所示。

若要显示摘要表,请在“ 常规事件 ”屏幕中右键单击,然后选择“ 摘要表”。

事件摘要表是一个非常强大的视图,因为您可以拖动列以对其重新排序,并且视图会根据新的列顺序来透视事件。 若要使你能够专注于感兴趣的项目,可以使用相同的排序顺序展开或折叠项。

有时,Netmon 以比 Xperf 更易读的形式呈现 USB 事件数据,但 Netmon 缺少 Xperf 时间线和表视图。 若要分析特定时间段的跟踪事件,可以在 Xperf 和 Netmon 之间切换。

使用 Xperf 和 Netmon 分析 USB 性能问题

Xperf 提供一组内核事件用于分析性能问题。 它会记录这些事件,并在图形中显示它们。

如果熟悉 Xperf 和 USB ETW 事件,则可以创建问题方案的 USB ETW 日志和 Xperf 日志,合并这两个日志文件,并将它们一起分析。 结合使用 Xperf 和 Netmon,可以查看系统事件 (Xperf) ,以及针对给定方案 (Netmon) USB 事件。

通过从提升的命令提示符发出以下命令,并行启动两个跟踪:

Xperf –on Diag

Logman start Usbtrace -p Microsoft-Windows-USB-USBPORT -o usbtrace.etl -ets -nb 128 640 -bs 128

Logman update Usbtrace -p Microsoft-Windows-USB-USBHUB –ets

针对问题场景执行操作,然后通过从提升的命令提示符发出以下命令来停止跟踪:

Logman stop Usbtrace -ets

Xperf –stop

使用以下命令将两个跟踪日志文件合并到单个文件中, () 不需要特权:

Xperf –merge usbtrace.etl C:\kernel.etl merged.etl

此示例创建名为 merged.etl 的合并文件。 可以使用 Xperf 性能分析器或 Netmon 打开此文件。 若要在 Xperf 中打开文件,请运行以下命令:

Xperf merged.etl

Xperf 显示各种内核事件的专用图,如下图所示。 

若要在 Netmon 中打开合并的跟踪日志,请运行 Netmon,单击“ 文件”-> “打开”-> “捕获”,然后选择该文件。 Xperf 和 Netmon 可以同时打开合并的文件。 可以在 Xperf GUI 和 Netmon 之间切换,以分析特定时间段内系统和 USB 堆栈中发生的情况。 除了系统事件之外,还可以在 Xperf 中查看 USB 事件,但在 Netmon 中可以更轻松地读取 USB 事件。

默认情况下,Netmon 显示合并跟踪文件中的所有事件。 若要仅显示 USB 事件,请应用如下筛选器:

ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB" OR ProtocolName == "USBPort_MicrosoftWindowsUSBUSBPORT"


可以在“Netmon 筛选器显示”窗格中输入此筛选器文本。 

若要分析 USB 事件的计时,可以查看 Netmon 中显示的事件之间的时间差。

查看所显示事件的时差

1. 在“ 框架摘要 ”窗格中,右键单击列标题,然后选择“ 选择列”。

2. 在 “禁用列” 列表中,选择“ 时间增量”,单击“ 添加”,然后单击“ 确定”。

3. 编写一个筛选器,仅显示要查看其计时的事件。 例如,若要查看非重叠批量传输调度与完成事件之间的延迟,请添加以下筛选器:

Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Dispatch URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER"
OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER"
OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER with Data"

a.可以从跟踪中显示的事件中选择事件 ID (说明) 。
b.若要在筛选器中使用事件 ID,请右键单击“ 框架摘要 ”窗格中的事件说明,然后选择“ 向显示筛选器添加说明”。

USB ETW 和电源管理

如果 USB 设备驱动程序支持 USB 选择性挂起,则可以在设备空闲时关闭 USB 设备。 当设备不再空闲时,系统将唤醒设备并恢复正常操作。 当系统处于空闲状态且所有 USB 设备暂停时,不需要处理器活动,因此处理器进入低功耗状态。 正确实现选择性暂停可以显著节省电量并延长移动系统的电池使用时间。

可以使用 USB ETW 检查 USB 设备及其驱动程序,以验证它们是否成功进入选择性挂起状态。 检查 USB 设备和驱动程序,确保在向最终用户提供设备之前,它们正确支持选择性挂起。

为了帮助你识别系统能效问题,我们增强了 Windows 7 中的 Windows PowerCfg 实用工具。 PowerCfg 是 Windows 附带的命令行实用工具,用于启用电源策略枚举和配置。 使用 /energy 选项对 PowerCfg 的增强功能来确定能效问题。 这些增强功能使 PowerCfg 能够检查系统中是否存在常见的能效问题,并生成包含其发现的任何问题的 HTML 报告。

PowerCfg 可检测各种能效问题,包括:

  • USB 设备对选择性挂起的使用无效
  • 处理器使用率过高
  • 提高了计时器分辨率
  • 低效电源策略设置
  • 电池容量下降

PowerCfg 可识别不同级别的问题,包括服务器错误和警告。

若要使用 PowerCfg 实用工具生成电源效率诊断报表,请在提升的命令提示符下运行以下命令:

powercfg /energy

相关推荐

  1. 设备驱动开发_1

    2024-07-19 05:04:01       47 阅读
  2. 设备驱动开发_2

    2024-07-19 05:04:01       43 阅读
  3. Linux驱动开发——(十)MISC设备驱动

    2024-07-19 05:04:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 05:04:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 05:04:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 05:04:01       57 阅读
  4. Python语言-面向对象

    2024-07-19 05:04:01       68 阅读

热门阅读

  1. 【无标题】

    2024-07-19 05:04:01       22 阅读
  2. 帝王蝶算法(EBOA)及Python和MATLAB实现

    2024-07-19 05:04:01       20 阅读
  3. 数据解析的四种方式

    2024-07-19 05:04:01       13 阅读
  4. 任务调度与执行的C++线程池

    2024-07-19 05:04:01       20 阅读
  5. Android EDLA项目 5G热点打开失败分析

    2024-07-19 05:04:01       22 阅读
  6. PHP 调用 1688 详情 API 接口的实战攻略

    2024-07-19 05:04:01       20 阅读
  7. 数据挖掘新技能:Python爬虫编程指南

    2024-07-19 05:04:01       20 阅读
  8. git-常用基础指令

    2024-07-19 05:04:01       17 阅读
  9. unity C#执行bat文件

    2024-07-19 05:04:01       18 阅读
  10. C语言 分割链表

    2024-07-19 05:04:01       20 阅读
  11. 如何使用Python实现一个简单的Web服务器

    2024-07-19 05:04:01       17 阅读