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


Управление очередями Storport

Чтобы воспользоваться преимуществами высокопроизводительных адаптеров хранилища, минипорт-драйверы должны контролировать очереди устройств, приостановку и возобновление этих очередей способами, которые позволят повысить эффективность.

В модели очереди портов SCSI управление очередями является эксклюзивным доменом драйвера порта. В модели очередей Storport драйвер портов предоставляет несколько подпрограмм поддержки управления очередями, которые предоставляют драйверу минипорта значительный объем управления очередью.

В модели очередей Storport все запросы помещаются в очередь драйвера портов для каждой логической единицы. Без расширенной поддержки SRB каждая логическая единица может иметь не более 255 невыполненных запросов. В противном случае глубина очереди ограничена только доступными системными ресурсами или возможностями адаптера. Когда достигнуто ограничение для глубины очереди, Storport сохраняет дополнительные запросы к этой логической единице, пока число невыполненных запросов к единице не снижается до максимального значения очереди.

Не существует предопределенных ограничений из Storport по количеству невыполненных запросов, которые может иметь адаптер. Например, адаптер с 55 логическими единицами, подключенными к нему с глубиной очереди 255, может размещать не более 14 025 (55 x 255) запросов за раз. См. следующую схему для описания модели очереди драйвера порта.

схема, иллюстрирующая модель очереди драйвера порта.

Модель очереди драйвера портов

Если адаптер и логическая единица оба готовы к получению запроса, система вызывает подпрограммы HwStorBuildIo и HwStorStartIo именно в этом порядке.

В отличие от порта SCSI, Storport позволяет минипорт-драйверам уведомлять драйвер порта о напряженных условиях. Эти коммуникации обрабатываются следующими восемью подпрограммами, которые позволяют минипорту сигнализировать, когда логическая единица или адаптер приостановлена или занята.

Подпрограмма Storport Выполн. действие

StorPortPauseDevice

Приостановка устройства в течение указанного периода времени.

StorPortResumeDevice

Возобновление приостановленного устройства.

StorPortPause

Приостановка адаптера в течение указанного периода времени.

StorPortResume

Возобновление приостановленного адаптера.

StorPortDeviceBusy

Убедитесь, что устройство занято до тех пор, пока очередь устройства не завершит указанный номер запросов ввода-вывода.

StorPortDeviceReady

Сделайте занятое устройство готовым к получению запросов еще раз.

StorPortBusy

Сделайте адаптер занят, пока не завершится указанное число запросов ввода-вывода.

StorPortReady

Приведите занятый адаптер в состояние готовности для приема запросов снова.

Пока устройство приостановлено или занято, драйвер порта не отправляет запросы на устройство. Если минипорт-драйвер завершает запрос с состоянием занятости (SRB_STATUS_BUSY или SCSISTAT_BUSY), драйвер порта будет повторять запрос неограниченное количество раз, пока запрос либо не завершится с ошибкой, либо не будет выполнен.

Помимо предоставления набора явных подпрограмм управления очередями, недоступных в модели очереди портов SCSI, модель очереди Storport не использует неявные подпрограммы управления очередями, используемые портом SCSI. В частности, уведомления NextRequest и NextLuRequest игнорируются.