Storport 큐 관리

고성능 스토리지 어댑터의 기능을 활용하려면 미니포트 드라이버가 디바이스 큐를 제어하고 이러한 큐를 일시 중지하고 재개하여 효율성을 극대화해야 합니다.

SCSI 포트 큐 모델에서 큐 관리는 포트 드라이버의 전용 도메인입니다. Storport 큐 모델에서 포트 드라이버는 미니포트 드라이버에 상당한 양의 큐 관리 제어를 제공하는 여러 큐 관리 지원 루틴을 제공합니다.

Storport 큐 모델에서 모든 요청은 논리 단위별 큐의 포트 드라이버에서 큐에 대기됩니다. 확장된 SRB 지원이 없으면 각 논리 단위에 최대 255개의 미해결 요청이 있을 수 있습니다. 그렇지 않으면 큐 깊이는 사용 가능한 시스템 리소스 또는 어댑터의 기능에 의해서만 제한됩니다. 큐 깊이에 대해 설정된 제한에 도달하면 Storport는 단위에 대한 미해결 요청 수가 큐 최대값 아래로 떨어질 때까지 해당 논리 단위에 대한 추가 요청을 보유합니다.

어댑터가 가질 수 있는 미해결 요청 수에 대한 Storport의 미리 정의된 제한은 없습니다. 예를 들어 큐 깊이가 255인 55개의 논리 단위가 연결된 어댑터는 한 번에 최대 14,025개(55 x 255) 요청까지 게시할 수 있습니다. 포트 드라이버의 큐 모델에 대한 설명은 다음 다이어그램을 참조하세요.

포트 드라이버의 큐 모델을 보여 주는 다이어그램

포트 드라이버의 큐 모델

어댑터와 논리 단위가 모두 요청을 받을 준비가 되면 시스템은 미니포트 드라이버의 HwStorBuildIoHwStorStartIo 루틴을 해당 순서로 호출합니다.

SCSI 포트와 달리 Storport를 사용하면 미니포트 드라이버가 포트 드라이버에 사용 중인 상태를 알릴 수 있습니다. 이러한 통신은 논리 단위 또는 어댑터가 일시 중지되거나 사용 중일 때 미니포트 드라이버가 신호를 보낼 수 있도록 하는 다음 8개의 루틴에 의해 처리됩니다.

Storport 루틴 수행한 작업

StorPortPauseDevice

지정된 기간 동안 디바이스를 일시 중지합니다.

StorPortResumeDevice

일시 중지된 디바이스를 다시 시작합니다.

StorPortPause

지정된 기간 동안 어댑터를 일시 중지합니다.

StorPortResume

일시 중지된 어댑터를 다시 시작합니다.

StorPortDeviceBusy

디바이스 큐가 지정된 수의 I/O 요청을 완료할 때까지 디바이스를 사용 중으로 만듭니다.

StorPortDeviceReady

사용 중인 디바이스가 요청을 다시 받을 준비가 되도록 합니다.

StorPortBusy

지정된 수의 I/O 요청을 완료할 때까지 어댑터를 사용 중으로 만듭니다.

StorPortReady

사용 중인 어댑터를 다시 요청을 받을 준비가 되도록 합니다.

디바이스가 일시 중지되거나 사용 중인 동안 포트 드라이버는 디바이스에 요청을 보내지 않습니다. 미니포트 드라이버가 사용 중인 상태(SRB_STATUS_BUSY 또는 SCSISTAT_BUSY)으로 요청을 완료하는 경우 포트 드라이버는 요청이 실패하거나 완료될 때까지 요청을 무기한 횟수만큼 다시 시도합니다.

Storport 큐 모델은 SCSI 포트 큐 모델에서 사용할 수 없는 명시적 큐 관리 루틴 집합을 제공하는 것 외에도 SCSI 포트에서 사용하는 암시적 큐 관리 루틴을 사용하지 않습니다. 특히 NextRequestNextLuRequest 알림은 무시됩니다.