Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформы
Серверы — Windows Server 2012
Описание
В Windows Server 2012 новая структура STORAGE_REQUEST_BLOCK (расширенный SRB) заменяет SCSI_REQUEST_BLOCK (устаревший SRB) в стеке основного хранилища. Расширенные SRB реплицируют функциональные возможности устаревших SRB, но также являются расширяемыми и масштабируемыми.
Multipath I/O (MPIO) поддерживает расширенные srBs и позволяет отдельным модулям (DSM) указывать расширенную поддержку SRB. Тем не менее, чтобы стек хранилища устройства с несколькими путей использовал расширенные SRB, все компоненты в стеке должны поддерживать расширенные SRB, включая DSM. Обратите внимание, что microsoft in-box DSM, MSDSM, поддерживает расширенные SRB.
Структура SCSI_PASS_THROUGH_EX не является частью расширенной структуры MPIO, так как расширенный проход SCSI может иметь переменный размер в зависимости от отладчика командной строки (CDB). Вместо этого расширенный проход MPIO содержит поле, описывающее смещение с начала расширенного MPIO, передаваемое через структуру SCSI_PASS_THROUGH_EX. Вызывающий объект должен убедиться, что он выделяет буфер соответствующего размера и правильно задает смещение SCSI. До тех пор, пока вызывающий объект следует правилам для расширенных сквозных сквозных SCSI, для них не должно быть дополнительной работы, чтобы использовать расширенный проход MPIO.
Примечание
Если DSM не поддерживает расширенные srBs, MPIO завершится сбоем расширенного прохода MPIO через запросы, для которых установлен флаг MPIO_IOCTL_FLAG_INVOLVE_DSM.
Проявление
Если какая-либо часть стека хранилища устройства, включая DSM, не поддерживает расширенные SRB, стек хранилища вернется к использованию устаревших SRB.
Решение
Существует только два требования MPIO для DSM для поддержки STORAGE_REQUEST_BLOCKS:
- DSM должен сообщить о своем типе как DsmType6
- DSM должен предоставить функцию DSM_ADDRESS_TYPE_SUPPORTED
Если DSM не сообщает DsmType6 или если он сообщает DsmType6, но не предоставляет функцию DSM_ADDRESS_TYPE_SUPPORTED, MPIO предполагает, что DSM не поддерживает расширенные SRB.
Функция DSM_ADDRESS_TYPE_SUPPORTED принимает два параметра, один из которых является типом адреса. Этот тип адреса должен быть одним из значений STORAGE_ADDRESS_TYPE_*, определенных в файле srb.h. DSM должен возвращать значение TRUE, если он поддерживает заданный тип адреса и ЗНАЧЕНИЕ FALSE, если он не поддерживается. Определение "поддержки" в конечном счете зависит от DSM. MPIO использует эту функцию, чтобы убедиться, что DSM не будет неправильно работать, если она передает расширенный SRB с STOR_ADDRESS структурой заданного типа. Таким образом, MPIO обычно вызывает эту функцию при перечислении многопутного устройства, но ее можно вызывать в любое время.
Если DSM никогда не касается расширенного STOR_ADDRESS SRB, он может вернуть значение TRUE для любого допустимого значения STORAGE_ADDRESS_TYPE_*. Просмотрите пример DSM в WDK.
Другие важные заметки
- DSM, поддерживающие расширенные SBS, должны иметь возможность обрабатывать как структуры SCSI_REQUEST_BLOCK, так и структуры STORAGE_REQUEST_BLOCK. Только потому, что DSM сообщает, что поддерживает расширенные SRB, не означает, что он будет получать только расширенные SRB. Он по-прежнему может получать любое количество устаревших SRB в дополнение к расширенным SRB, и, следовательно, иметь возможность обрабатывать оба.
- Мы предоставили файл заголовка в WDK под названием srbhelper.h, который содержит встроенные функции, которые помогают драйверам, которые должны обрабатывать как расширенные, так и устаревшие SRB. В нашем примере DSM используется этот заголовок, поэтому его можно использовать в качестве примера использования этих функций.
- DSM, не поддерживающий расширенные srBs, никогда не будет обрабатывать расширенные srB.
- Возможно, mpIO приведет к тому, что стек хранилища вернется к устаревшим SRB в случае, если DSM не поддерживает заданный STORAGE_ADDRESS_TYPE_* (но в противном случае поддерживает расширенные SRB).
- BTL8 — это единственный STORAGE_ADDRESS_TYPE_*, определенный в настоящее время для Windows Server 2012.