Поделиться через


Несинхронизированная подпрограмма HwStorBuildIo

В модели ввода-вывода драйвера порт-минипорт SCSI подпрограмма StartIo драйвера мини-порта HwScsiStartIo должна как можно быстрее передавать блоки запросов SCSI на оборудование. Это важно, так как работа, выполняемая в подпрограмме StartIo драйвера мини-порта, выполняется при отключении прерываний и в IRQL = DISPATCH_LEVEL. К сожалению, эта модель не подходит для водителей некоторых высокопроизводительных адаптеров шины (HBA), так как драйверы мини-портов для этих HBA должны выполнять значительный объем обработки при инициации ввода-вывода. Если драйвер мини-порта выполняет эту обработку в своей подпрограмме StartIo , это снижает производительность системы.

Модель ввода-вывода Storport поддерживает подпрограмму HwStorBuildIo , чтобы снять часть нагрузки на обработку из процедуры StartIo драйвера мини-порта HwStorStartIo. В модели ввода-вывода Storport система вызывает HwStorBuildIo непосредственно перед вызовом процедуры HwStorStartIo драйвера мини-порта и выполняет там как можно больше операций обработки. Эта стратегия позволяет избежать конфликтов за циклы ЦП и доступ к критически важным системным структурам, таким как расширение устройства, так как HwStorBuildIo выполняется на более низком irQL и не блокирует синхронизацию.

Подпрограмма HwStorBuildIo должна преобразовывать SRB в более удобную структуру данных, создавать точечные и собираемые списки и выполнять другую обработку по SRB. Так как во время выполнения подпрограммы HwStorBuildIo блокировки не удерживаются, драйвер мини-порта не должен получать доступ к данным, кроме данных в SRB и расширении SRB. Если для части обработки требуется доступ к другим структурам, эта часть по-прежнему должна выполняться в подпрограмме HwStartIo .

Для достижения максимальной производительности следует использовать подпрограмму HwStorBuildIo в сочетании с полнодуплексным режимом.