다음을 통해 공유


동기화되지 않은 HwStorBuildIo 루틴

SCSI 포트 미니포트 드라이버 I/O 모델에서 미니포트 드라이버의 StartIo 루틴인 HwScsiStartIo는 가능한 한 빨리 SCSI SRB(요청 블록)를 하드웨어로 전송해야 합니다. 이는 미니포트 드라이버의 StartIo 루틴에서 수행되는 작업은 인터럽트 사용 안 함 및 IRQL = DISPATCH_LEVEL 동안 수행되기 때문에 필수적입니다. 안타깝게도 이 모델은 일부 HBA(고성능 호스트 버스 어댑터)의 드라이버에 적합하지 않습니다. 이러한 HBA의 미니포트 드라이버는 I/O가 시작될 때 상당한 양의 처리를 수행해야 하기 때문입니다. 미니포트 드라이버가 StartIo 루틴에서 이 처리를 수행하면 시스템 성능이 저하됩니다.

Storport I/O 모델은 미니포트 드라이버의 StartIo 루틴인 HwStorStartIo에서 일부 처리 부담을 제거하기 위해 HwStorBuildIo 루틴을 지원합니다. Storport I/O 모델에서 시스템은 미니포트 드라이버의 HwStorStartIo 루틴을 호출하기 직전에 HwStorBuildIo 를 호출하고 가능한 한 많은 처리를 수행합니다. HwStorBuildIo는 낮은 IRQL에서 실행되고 동기화 잠금이 없으므로 이 전략은 CPU 주기 및 디바이스 확장과 같은 중요한 시스템 구조에 대한 액세스를 위한 경합을 방지합니다.

HwStorBuildIo 루틴은 SRB를 보다 편리한 데이터 구조로 변환하고, 분산/수집 목록을 빌드하고, SRB당 다른 처리를 수행해야 합니다. HwStorBuildIo 루틴을 실행하는 동안 잠금이 유지되지 않으므로 미니포트 드라이버는 SRB 및 SRB 확장에서 이외의 데이터에 액세스하지 않아야 합니다. 처리의 일부에 다른 구조체에 대한 액세스가 필요한 경우 해당 부분은 HwStartIo 루틴에서 계속 수행되어야 합니다.

최대 성능을 얻으려면 HwStorBuildIo 루틴을 전체 이중 모드와 함께 사용해야 합니다.