ETW 이벤트를 사용하여 USB 디바이스 문제 디버깅
이 항목에서는 ETW 이벤트를 사용하여 USB 디바이스 문제를 디버깅하기 위한 팁을 제공합니다.
- 디바이스 열거 실패 진단
- 디바이스 시작 오류 진단
- 프로파일링 디바이스 삽입 타이밍
- 소프트웨어 시작 디바이스 다시 시작 타이밍
- 하드웨어 시작 디바이스 다시 시작 타이밍
- 선택적 일시 중단 타이밍에서 허브 다시 시작
디바이스 열거 실패 진단
USB 허브 열거형 작업과 연결된 ETW 이벤트를 사용하여 대부분의 디바이스 열거 실패의 근본 원인을 확인할 수 있습니다.
USB 허브 열거 작업과 연결된 추적 로그에서 이벤트를 보려면
Netmon을 열고 "포트 열거 시작"과 같은 열거형 이벤트를 찾습니다. 프레임 요약 창에서 이벤트를 클릭합니다.
이벤트에 대한 작업 필드를 검사하여 이 이벤트에 대한 작업이 USB 허브 열거형인지 확인합니다.
- 프레임 세부 정보 창에서 Net 이벤트를 확장하고 헤더를 확장하고 설명자를 확장한 다음 작업 필드를 찾습니다.
- 작업 필드에 값 2(USB 허브 열거형)가 포함되어 있음을 확인합니다.
작업 값이 2인 허브 드라이버의 이벤트만 표시하도록 이벤트를 필터링합니다.
작업 필드를 마우스 오른쪽 단추로 클릭합니다.
필터 표시에 선택한 값 추가를 선택합니다.
프레임 요약 창에서 이벤트를 마우스 오른쪽 단추로 클릭하고 필터 표시에 "프로토콜 이름" 추가를 선택합니다.
필터 표시 창에서 "OR"을 "AND"로 변경합니다. 다음 샘플에서는 결과 필터를 보여줍니다.
NetEvent.Header.Descriptor.Task == 0x2 AND ProtocolName == "USBHub_MicrosoftWindowsUSBUSBHUB"
Netmon에서 필터를 사용하는 방법에 대한 자세한 내용은 사례 연구: ETW 및 Netmon을 사용하여 알 수 없는 USB 디바이스 문제 해결의 "USB Netmon 필터"를 참조하세요.
디바이스 시작 오류 진단
허브 드라이버가 디바이스의 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 완료됨
선택적 일시 중단 타이밍에서 허브 다시 시작
다음 두 이벤트 사이의 경과된 시간을 측정하여 허브가 선택적 일시 중단에서 다시 시작하는 데 필요한 시간을 확인할 수 있습니다.
- 선택적 일시 중단에서 허브 다시 시작
- 허브 다시 시작 완료됨
참고
허브 다시 시작 타이밍은 허브 아래의 모든 디바이스와 재개되는 허브 위의 일부 또는 모든 허브의 다시 시작 타이밍에 따라 달라집니다.