중단된 드라이버 및 Time-Outs 분석

SCSI 미니포트 드라이버를 디버깅할 때 중단 및 시간 제한의 가장 일반적인 세 가지 원인은 다음과 같습니다.

  • SCSI 미니포트 DPC가 실행되고 있지 않습니다.

  • SCSI 미니포트가 다음 요청을 요청하지 못함

  • 요청은 SCSI 미니포트에서 완료되지 않습니다. 일반적으로 맵 레지스터를 기다리고 있기 때문입니다.

SCSI 미니포트 DPC가 실행되고 있지 않은 것으로 의심되는 경우 !pcr 을 사용하여 현재 프로세서에 대한 DPC 큐를 표시합니다. SCSI 포트 DPC 루틴이 DPC 큐에 있는 경우 이 루틴에 중단점을 배치하여 이 루틴이 호출되었는지 여부를 확인합니다. 그렇지 않으면 각 디바이스에서 !scsikd.scsiext 를 사용합니다. !scsikd.scsiext 확장의 다음 샘플 출력을 고려합니다.

0: kd> !scsikd.scsiext 86353040 
Common Extension:
   < ..omitted.. >
Logical Unit Extension:
  Address (3, 0, 1, 0) Claimed  Enumerated Visible
  LuFlags (0x00000000):
  Retry 0x00          Key 0x008889ff
  Lock 0x00000000  Pause 0x00000000   CurrentLock: 0x00000000
  HwLuExt 0x862e6f00  Adapter 0x8633db28  Timeout 0x0000000a
  NextLun 0x00000000  ReadyLun 0x00000000
  Pending 0x00000000  Busy 0x00000000     Untagged 0x00000000
 
  . . .  
 
Request list @0x86353200:
      Tick count is 2526
      SrbData 8615d700  Srb 8611f4fc  Irp 8611f2b8   Key 60197  <1s
      SrbData 85e72868  Srb 86100c3c Irp 861009f8   Key e29dc7  <1s 

시간 제한 슬롯이 -1이고 태그가 지정되지 않은 슬롯이 0이 아니거나 시간 제한 슬롯이 0이 아니고 요청이 표시되면 미니포트에서 다음 요청을 요청하지 못했습니다.

또는 재시도 슬롯과 사용 중인 슬롯이 0이 아닌 경우 SCSI 미니포트가 맵 레지스터를 기다리고 있기 때문에 요청을 완료하지 못할 수 있습니다. 마찬가지로 태그가 지정되지 않은 보류 중인 슬롯이 0이 아닌 경우 SCSI 미니포트가 지도 레지스터를 기다리고 있을 수 있습니다. 두 경우 모두 SRB(SCSI 요청 블록)의 주소는 사용 중인 슬롯의 주소와 완료되지 않은 요청의 주소입니다. SRB에 대한 자세한 내용은 이 주소를 입력으로 사용하여 !minipkd.srb 확장을 사용합니다.

!devobj 확장은 SCSI 미니포트가 맵 레지스터를 기다리고 있는지 여부를 결정합니다. ! devobj에 대한 입력으로 요청을 발급하는 디바이스의 디바이스 개체 주소를 사용합니다. 현재 IRQ가 0이 아닌 경우 SCSI 미니포트가 맵 레지스터를 기다리고 있는 것일 가능성이 높습니다.