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에서 필터를 사용하는 방법에 대한 자세한 내용은 사례 연구에서 "USB Netmon 필터" : ETW 및 Netmon을 사용하여 알 수 없는 USB 디바이스 문제 해결을 참조하세요.

디바이스 시작 오류 진단

허브 드라이버가 디바이스의 IRP(시작 I/O 요청 패킷)를 처리하는 동안 디바이스를 시작하지 못하는 경우 USB 디바이스 시작 작업과 연결된 ETW 이벤트를 사용하여 오류를 해결할 수 있습니다. Netmon에서 "USB 디바이스 시작 IRP 디스패치"와 같은 디바이스 시작 이벤트를 찾습니다. 이벤트를 필터링하여 작업 값이 21(USB 디바이스 시작)인 허브 드라이버의 이벤트만 표시할 수 있습니다. 이러한 필터를 만드는 방법에 대한 자세한 내용은 이 항목의 "디바이스 열거 실패 진단"을 참조하세요.

프로파일링 디바이스 삽입 타이밍

열거형 이벤트의 타임스탬프를 확인하여 디바이스를 삽입하는 동안 허브 드라이버에서 소요되는 시간을 확인할 수 있습니다.

열거형 타이밍

허브 드라이버가 디바이스를 열거하는 데 사용한 디바이스 삽입 시간 부분은 다음 두 이벤트 사이에 경과된 시간입니다.

  • 포트 열거 시작
  • 완료된 포트 열거형

프로파일링 열거형 작업

USB 허브 드라이버가 디바이스를 열거하는 경우 다음 순서로 다음 이벤트를 기록합니다.

  • 포트 열거 시작
  • 열거형 디바운스 완료됨
  • 열거형용으로 만든 PDO
  • 첫 번째 열거형 포트 재설정 완료
  • 열거형 - CreateDevice Complete
  • 두 번째 열거형 포트 재설정 완료
  • 열거형 - InitializeDevice Complete
  • 열거형 - SetupDevice Complete
  • 완료된 포트 열거형

허브 드라이버가 각 열거형 작업에 사용한 시간을 확인하려면 이전 이벤트 간에 경과되는 시간을 계산합니다. IoInvalidateDeviceRelations와 IRP_MN_QUERY_DEVICE_RELATIONS 사이의 경과된 시간

시스템이 쿼리 디바이스 관계 IRP를 기다리는 동안 사용한 디바이스 삽입 시간의 부분을 확인하려면 다음 두 이벤트 간의 경과 시간을 측정합니다.

  • 완료된 포트 열거형
  • USB 허브 쿼리 디바이스 관계(BusRelations) IRP Dispatched

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 완료됨

선택적 일시 중단 타이밍에서 허브 다시 시작

다음 두 이벤트 사이의 경과된 시간을 측정하여 허브가 선택적 일시 중단에서 다시 시작하는 데 필요한 시간을 확인할 수 있습니다.

  • 선택적 일시 중단에서 허브 다시 시작
  • 허브 다시 시작 완료

참고 허브 다시 시작 타이밍은 허브 아래의 모든 디바이스와 재개되는 허브 위의 일부 또는 모든 허브의 다시 시작 타이밍에 따라 달라집니다.

Windows USB 이벤트 추적