Отладка проблем с USB-устройством с помощью событий ETW
В этом разделе приведены советы по отладке проблем с USB-устройством с помощью событий трассировки событий Windows.
- Диагностика сбоев перечисления устройств
- Диагностика сбоев запуска устройства
- Время вставки устройств профилирования
- Время возобновления работы устройства, инициированного программным обеспечением
- Время возобновления работы устройства, инициированного оборудованием
- HUB RESUME FROM Выборочная приостановка времени
Диагностика сбоев перечисления устройств
Чтобы определить основную причину большинства сбоев перечисления устройств, можно использовать события ETW, связанные с задачей перечисления USB-концентратора.
Просмотр событий в журнале трассировки, связанных с задачей перечисления концентратора USB
Откройте Netmon и найдите событие перечисления, например "Start Enumeration of Port". Щелкните событие в области Сводка по кадрам .
Убедитесь, что задача для этого события является перечислением концентратора USB, изучив поле Задача для события:
- В области Сведения о фрейме разверните net event, разверните заголовок, разверните дескриптор, а затем найдите поле Задача .
- Убедитесь, что поле Задача содержит значение 2 (перечисление USB-концентратора).
Отфильтруйте события, чтобы отобразить только те из драйвера концентратора, которые имеют значение задачи 2:
Щелкните правой кнопкой мыши поле Задача .
Выберите Добавить выбранное значение для фильтра отображения.
Щелкните правой кнопкой мыши событие в области Сводка по кадру и выберите Добавить "Имя протокола" для отображения фильтра.
В области Фильтр отображения измените значение "OR" на "AND". В следующем примере показан результирующий фильтр:
NetEvent.Header.Descriptor.Task == 0x2 AND ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB"
Дополнительные сведения об использовании фильтров в Netmon см. в разделе "Фильтры USB Netmon" статьи Пример. Устранение неполадок с неизвестным USB-устройством с помощью ETW и Netmon.
Диагностика сбоев запуска устройства
Если устройство не запускается во время обработки драйвером концентратора пакета запроса ввода-вывода (IRP) устройства, вы можете использовать события трассировки событий Windows, связанные с задачей запуска USB-устройства, чтобы устранить сбой. В Netmon найдите событие запуска устройства, например "Usb Device Start IRP Dispatched". Вы можете отфильтровать события, чтобы они отображались только из драйвера концентратора со значением задачи 21 (запуск USB-устройства). Дополнительные сведения о создании такого фильтра см. в разделе Диагностика сбоев перечисления устройств в этой статье.
Время вставки устройств профилирования
Вы можете определить, где тратится время в драйвере концентратора во время вставки устройства, просмотрев метки времени событий перечисления.
Время перечисления
Часть времени вставки устройства, затраченная драйвером концентратора на перечисление устройства, — это время, прошедшее между следующими двумя событиями:
- Начало перечисления портов
- Перечисление завершенных портов
Задачи перечисления профилирования
Когда драйвер USB-концентратора перечисляет устройство, он регистрирует следующие события в следующем порядке:
- Начало перечисления портов
- Перечисление завершено
- PDO, созданный для перечисления
- Завершение сброса порта первого перечисления
- Перечисление — CreateDevice Complete
- Второй сброс порта перечисления завершен
- Перечисление — InitializeDevice Complete
- Перечисление — SetupDevice Complete
- Перечисление завершенных портов
Чтобы определить время, затраченное драйвером концентратора на каждую задачу перечисления, вычислите время, прошедшее между предыдущими событиями. Затраченное время между IoInvalidateDeviceRelations и IRP_MN_QUERY_DEVICE_RELATIONS
Чтобы определить часть времени вставки устройства, которое система потребляла, пока она ждала IRP отношений устройств с запросами, измерьте время, затраченное между следующими двумя событиями:
- Перечисление завершенных портов
- USB Hub Query Device Relations (BusRelations) IRP Dispatched
Затраченное время между завершением IRP_MN_QUERY_DEVICE_RELATIONS и IRP_MN_START_DEVICE
Чтобы определить часть времени вставки устройства между отправкой нового объекта физического устройства (PDO) диспетчеру Plug and Play и получением начального IRP, измерьте время, затраченное между следующими двумя событиями:
- Запрос к отношениям устройств USB Hub IRP завершен
- Usb-устройство запускает IRP Dispatched
Запуск времени IRP
Чтобы определить время, затраченное драйвером концентратора на обработку IRP запуска, измерьте время, затраченное между следующими двумя событиями:
- Usb-устройство запускает IRP Dispatched
- Запуск IRP usb-устройства завершен
Время возобновления Software-Initiated устройства
Драйвер функции устройства может отправить запрос на питание устройства D0, чтобы возобновить работу устройства из состояния приостановки. Чтобы определить время, необходимое для возобновления работы устройства с приостановки и готовности к запросам на передачу, измерьте время, затраченное между следующими двумя событиями:
- Набор устройств USB D0 Power IRP Dispatched
- Набор устройств USB D0 Power IRP завершен
Время возобновления Hardware-Initiated устройства
Сигнал возобновления в шине приводит к возобновлению работы устройства из приостановленного состояния. Чтобы определить время, необходимое для возобновления работы устройства до состояния, в котором оно готово для запросов на передачу, измерьте время, затраченное между следующими двумя событиями:
- Родительский центр не приостанавливается:
- Usb-устройство Wait Wake IRP завершено
- Набор устройств USB D0 Power IRP завершен
- Родительский центр приостановлен:
- Начало возобновления работы концентратора с выборочной приостановки (первое из этих событий для любого концентратора между устройством и контроллером узла)
- Набор устройств USB D0 Power IRP завершен
HUB RESUME FROM Выборочная приостановка времени
Вы можете определить время, необходимое для возобновления работы концентратора с выборочной приостановки, измерив время, затраченное между следующими двумя событиями:
- Начало возобновления работы концентратора из выборочной приостановки
- Возобновление работы концентратора завершено
Примечание
Время возобновления работы концентратора зависит от времени возобновления работы всех устройств под концентратором и, возможно, некоторых или всех концентраторов над возобновляемого концентратора.