Condividi tramite


Debug di problemi di dispositivo USB tramite eventi ETW

Questo argomento fornisce suggerimenti per il debug dei problemi di dispositivo USB usando eventi ETW.

Diagnosi degli errori di enumerazione del dispositivo

È possibile usare gli eventi ETW associati all'attività di enumerazione dell'hub USB per determinare la causa radice della maggior parte degli errori di enumerazione del dispositivo.

Per visualizzare gli eventi in un log di traccia associato all'attività di enumerazione dell'hub USB

  1. Aprire Netmon e individuare un evento di enumerazione, ad esempio "Avvia enumerazione della porta". Fare clic sull'evento nel riquadro Riepilogo frame .

  2. Verificare che l'attività per questo evento sia enumerazione hub USB esaminando il campo Attività per l'evento:

    1. Nel riquadro Dettagli cornice espandere l'evento Net, espandere intestazione, espandere il descrittore e quindi individuare il campo Attività .
    2. Verificare che il campo Attività contenga il valore 2 (enumerazione hub USB).
  3. Filtrare gli eventi per visualizzare solo quelli dal driver dell'hub con il valore dell'attività 2:

    1. Fare clic con il pulsante destro del mouse sul campo Attività .

    2. Selezionare Aggiungi valore selezionato per visualizzare il filtro.

    3. Fare clic con il pulsante destro del mouse sull'evento nel riquadro Riepilogo fotogrammi e scegliere Aggiungi "Nome protocollo" per Visualizzare il filtro.

    4. Nel riquadro Filtro visualizzato modificare "OR" su "AND". L'esempio seguente mostra il filtro risultante:

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

      Per altre informazioni sull'uso dei filtri in Netmon, vedere "USB Netmon Filters" in Case Study: Risoluzione dei problemi relativi a un dispositivo USB sconosciuto tramite ETW e Netmon.

Diagnosi degli errori di avvio del dispositivo

Se un dispositivo non viene avviato durante la gestione del driver dell'hub del pacchetto di richiesta I/O iniziale del dispositivo, è possibile usare gli eventi ETW associati all'attività di avvio del dispositivo USB per risolvere l'errore. In Netmon individuare un evento di avvio del dispositivo, ad esempio "USB Device Start IRP Dispatched". È possibile filtrare gli eventi per visualizzare solo quelli dal driver dell'hub con un valore di attività pari a 21 (avvio del dispositivo USB). Per altre informazioni sulla creazione di un filtro di questo tipo, vedere "Diagnosi degli errori di enumerazione del dispositivo" in questo argomento.

Intervallo di inserimento del dispositivo di profilatura

È possibile determinare dove viene trascorso il tempo nel driver hub durante l'inserimento del dispositivo esaminando i timestamp degli eventi di enumerazione.

Intervallo di enumerazione

La parte del tempo di inserimento del dispositivo usato dal driver hub per enumerare un dispositivo è il tempo trascorso tra i due eventi seguenti:

  • Avvio dell'enumerazione della porta
  • Enumerazione della porta completata

Attività di enumerazione profilatura

Quando il driver dell'hub USB enumera un dispositivo, registra gli eventi seguenti nell'ordine seguente:

  • Avvio dell'enumerazione della porta
  • Enumerazione Debounce completata
  • PDO Creato per l'enumerazione
  • Primo completamento della reimpostazione della porta di enumerazione
  • Enumerazione - CreateDevice Complete
  • Seconda reimpostazione della porta di enumerazione completata
  • Enumerazione - InitializeDevice Complete
  • Enumerazione - SetupDevice Complete
  • Enumerazione della porta completata

Per determinare il tempo utilizzato dal driver dell'hub per ogni attività di enumerazione, calcolare il tempo trascorso tra gli eventi precedenti. Tempo trascorso tra IoInvalidateDeviceRelations e IRP_MN_QUERY_DEVICE_RELATIONS

Per determinare la parte del tempo di inserimento del dispositivo usato dal sistema durante l'attesa dell'IRP delle relazioni del dispositivo di query, misurare il tempo trascorso tra i due eventi seguenti:

  • Enumerazione della porta completata
  • Relazioni del dispositivo di query dell'hub USB (busRelations) inviato dall'IRP

Tempo trascorso tra il completamento di IRP_MN_QUERY_DEVICE_RELATIONS e IRP_MN_START_DEVICE

Per determinare la parte del tempo di inserimento del dispositivo tra la segnalazione del nuovo oggetto dispositivo fisico (PDO) al gestore Plug and Play e la ricezione dell'IRP iniziale, misurare il tempo trascorso tra i due eventi seguenti:

  • Usb Hub Query Device Relations IRP completato
  • Invio di IRP per l'avvio del dispositivo USB

Avviare i tempi di IRP

Per determinare il tempo trascorso nel driver hub che gestisce l'IRP di inizio, misurare il tempo trascorso tra i due eventi seguenti:

  • Invio di IRP per l'avvio del dispositivo USB
  • Usb Device Start IRP completato

Software-Initiated Tempo di ripresa del dispositivo

Il driver di funzione di un dispositivo può inviare una richiesta di alimentazione del dispositivo D0 per riprendere il dispositivo dallo stato di sospensione. Per determinare la quantità di tempo necessaria per il dispositivo da sospendere e per essere pronti per le richieste di trasferimento, misurare il tempo trascorso tra i due eventi seguenti:

  • Set di dispositivi USB D0 Device Power IRP inviato
  • Set di dispositivi USB D0 Device Power IRP completato

Hardware-Initiated Tempo di ripresa del dispositivo

Un segnale di ripresa sul bus causa la ripresa di un dispositivo dallo stato sospeso. Per determinare la quantità di tempo necessaria per il dispositivo da riprendere a uno stato in cui è pronto per le richieste di trasferimento, misurare il tempo trascorso tra i due eventi seguenti:

  • L'hub padre non è sospeso:
    • Attivazione della riattivazione del dispositivo USB completata
    • Set di dispositivi USB D0 Device Power IRP completato
  • L'hub padre è sospeso:
    • Avvio della ripresa dell'hub dalla sospensione selettiva (prima di questi eventi per qualsiasi hub tra il dispositivo e il controller host)
    • Set di dispositivi USB D0 Device Power IRP completato

HUB RESUME FROM Selettiva Sospensione Time

È possibile determinare la quantità di tempo necessaria per un hub da riprendere dalla sospensione selettiva misurando il tempo trascorso tra i due eventi seguenti:

  • Avvio della ripresa dell'hub da sospensione selettiva
  • Ripresa dell'hub completata

Nota

Il tempo di ripresa dell'hub dipende dalla ripresa dei tempi di tutti i dispositivi sotto l'hub e probabilmente da alcuni o tutti gli hub sopra l'hub che viene ripreso.