使用 ETW 事件调试 USB 设备问题

本主题提供有关使用 ETW 事件调试 USB 设备问题的提示。

诊断设备枚举失败

可以使用与 USB 集线器枚举任务关联的 ETW 事件来确定大多数设备枚举失败的根本原因。

查看跟踪日志中与 USB 集线器枚举任务关联的事件

  1. 打开 Netmon 并找到枚举事件,例如“启动端口枚举”。 单击“ 帧摘要 ”窗格中的事件。

  2. 通过检查事件的“ 任务” 字段,确认此事件的任务是 USB 集线器枚举:

    1. 在“ 框架详细信息 ”窗格中,展开“ Net 事件”,展开 “标头”,再展开 “描述符”,然后找到 “任务” 字段。
    2. 确认“任务”域包含值 2 (USB 集线器枚举) 。
  3. 筛选事件以仅显示中心驱动程序中任务值为 2 的事件:

    1. 右键单击“ 任务” 域。

    2. 选择“ 添加所选值 以显示 筛选器”。

    3. 右键单击“帧摘要”窗格中的事件,然后选择“将”协议名称“添加到”显示筛选器”。

    4. “显示筛选器 ”窗格中,将“OR”更改为“AND”。 以下示例显示了生成的筛选器:

      NetEvent.Header.Descriptor.Task == 0x2 AND ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB"
      

      有关在 Netmon 中使用筛选器的详细信息,请参阅 案例研究:使用 ETW 和 Netmon 对未知 USB 设备进行故障排除中的“USB Netmon 筛选器”。

诊断设备启动故障

如果设备在中心驱动程序处理设备的启动 I/O 请求数据包 (IRP) 期间无法启动,则可以使用与 USB 设备启动任务关联的 ETW 事件来排查故障。 在 Netmon 中,找到设备启动事件,例如“USB 设备启动 IRP 调度”。 可以筛选事件,以仅显示中心驱动程序中的事件,其任务值为 21 (USB 设备启动) 。 有关创建此类筛选器的详细信息,请参阅本主题中的“诊断设备枚举失败”。

分析设备插入计时

可以通过查看枚举事件的时间戳来确定在设备插入期间中心驱动程序中花费的时间。

枚举计时

中心驱动程序枚举设备所消耗的设备插入时间部分是以下两个事件之间经过的时间:

  • 启动端口枚举
  • 已完成端口的枚举

分析枚举任务

当 USB 集线器驱动程序枚举设备时,它将按以下顺序记录以下事件:

  • 启动端口枚举
  • 枚举 Debounce Completed
  • 为枚举创建的 PDO
  • 第一个枚举端口重置完成
  • 枚举 - CreateDevice Complete
  • 第二个枚举端口重置完成
  • 枚举 - InitializeDevice Complete
  • 枚举 - SetupDevice Complete
  • 已完成端口的枚举

若要确定中心驱动程序用于每个枚举任务的时间,请计算上述事件之间经过的时间。 IoInvalidateDeviceRelations 和 IRP_MN_QUERY_DEVICE_RELATIONS 之间的运行时间

若要确定系统等待查询设备关系 IRP 时所使用的设备插入时间部分,请测量以下两个事件之间的已用时间:

  • 已完成端口的枚举
  • USB 中心查询设备关系 (总线关系) IRP 调度

完成IRP_MN_QUERY_DEVICE_RELATIONS到IRP_MN_START_DEVICE之间的运行时间

若要确定从向即插即用管理器报告新的物理设备对象 (PDO) 到收到启动 IRP 之间的设备插入时间部分,请测量以下两个事件之间的已用时间:

  • USB 集线器查询设备关系 IRP 已完成
  • 已调度 USB 设备启动 IRP

启动 IRP 计时

若要确定处理启动 IRP 的中心驱动程序所用的时间,请测量以下两个事件之间的已用时间:

  • 已调度 USB 设备启动 IRP
  • USB 设备启动 IRP 已完成

Software-Initiated 设备恢复计时

设备的功能驱动程序可以发送 D0 设备电源请求,使设备从挂起状态恢复。 若要确定设备从挂起恢复并准备好传输请求所需的时间,请测量以下两个事件之间的运行时间:

  • USB 设备集 D0 设备电源 IRP 已调度
  • USB 设备集 D0 设备电源 IRP 已完成

Hardware-Initiated 设备恢复计时

总线上的恢复信号会导致设备从挂起状态恢复。 若要确定设备恢复到已准备好传输请求的状态所需的时间,请测量以下两个事件之间的运行时间:

  • 父中心未挂起:
    • USB 设备等待唤醒 IRP 已完成
    • USB 设备集 D0 设备电源 IRP 已完成
  • 父中心暂停:
    • 已启动 从选择性挂起恢复中心 (设备与主机控制器之间的任何中心的第一个事件)
    • USB 设备集 D0 设备电源 IRP 已完成

中心从选择性暂停计时恢复

通过测量以下两个事件之间的运行时间,可以确定中心从选择性挂起恢复所需的时间:

  • 从选择性挂起开始恢复中心
  • 中心恢复已完成

注意

中心恢复计时取决于中心下方所有设备的恢复计时,并且可能取决于正在恢复的中心上方的部分或所有中心。