이 항목에서는 ETW 이벤트를 사용하여 USB 디바이스 문제를 디버깅하기 위한 팁을 제공합니다.
- 디바이스 나열 실패 진단
- 디바이스 시작 실패 진단
- 프로파일링 디바이스 삽입 타이밍
- Software-Initiated 디바이스 다시 시작 타이밍
- Hardware-Initiated 디바이스 다시 시작 타이밍
- HUB 선택적 일시 중단 타이밍 다시 시작
디바이스 열거 실패 진단
USB 허브 열거형 작업과 연결된 ETW 이벤트를 사용하여 대부분의 디바이스 열거 실패의 근본 원인을 확인할 수 있습니다.
USB 허브 열거형 작업과 연결된 추적 로그에서 이벤트를 보려면
Netmon을 열고 "포트 열거 시작"과 같은 열거형 이벤트를 찾습니다. 프레임 요약 창에서 이벤트를 클릭합니다.
이벤트에 대한 작업 필드를 검사하여 이 이벤트에 대한 작업이 USB 허브 열거형인지 확인합니다.
- 프레임 세부 정보 창에서 Net 이벤트확장하고 헤더확장하고 설명자확장한 다음 작업 필드를 찾습니다.
- 작업 필드에 값 2(USB 허브 열거형)가 포함되어 있음을 확인합니다.
작업 값이 2인 허브 드라이버의 이벤트만 표시하도록 이벤트를 필터링합니다.
작업 필드를 마우스 오른쪽 단추로 클릭합니다.
선택한 값 선택하여 필터 .
프레임 요약 창에서 이벤트를 마우스 오른쪽 단추로 클릭하고 디스플레이 필터에 "프로토콜 이름"을추가를 선택합니다.
표시 필터 창에서 "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
- 첫 번째 열거형 포트 재설정 완료
- 열거형 - 장치 생성 완료
- 두 번째 열거 포트 재설정 완료
- 열거 - InitializeDevice 완료
- 열거 - SetupDevice 완료
- 포트 열거 완료
허브 드라이버가 각 열거형 작업에 사용한 시간을 확인하려면 이전 이벤트 간에 경과되는 시간을 계산합니다. IoInvalidateDeviceRelations와 IRP_MN_QUERY_DEVICE_RELATIONS 사이의 경과된 시간
시스템이 쿼리 디바이스 관계 IRP를 기다리는 동안 사용한 디바이스 삽입 시간의 부분을 확인하려면 다음 두 이벤트 사이의 경과 시간을 측정합니다.
- 포트 열거 완료
- USB 허브 쿼리 디바이스 관계(BusRelations) 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 완료됨
선택적 일시 중단 타이밍에서 허브 다시 시작
다음 두 이벤트 사이의 경과 시간을 측정하여 허브가 선택적 일시 중단에서 다시 시작하는 데 필요한 시간을 확인할 수 있습니다.
- 선택적 일시 중단에서 허브 다시 시작
- 허브 다시 시작 완료됨
비고
허브 다시 시작 타이밍은 허브 아래의 모든 디바이스와 다시 시작 중인 허브 위의 일부 또는 모든 허브의 다시 시작 타이밍에 따라 달라집니다.