Конспект вебинара HonorCup E=DC2 для сдачи HCNA Storage. О SCSI интерфейсе больше информации тут.
SCSI (Small computer system interface) – набор стандартов регламентирующих взаимодействие компьютера с разной периферией (ЖД, приводы CD/DVD, принтеры, сканеры, etc). В основном используется для соединения серверов и систем хранения.
Под SCSI подразумевается много вещей: SCSI-стандарты определяют SCSI протокол, SCSI команды, электрические и оптические интерфейсы SCSI HBA (host bus adapter), среду передачи данных SCSI bus. Поэтому с SCSI так много путаницы. Еще подбавляет то, что хотя интерфейс SCSI устарел и применяется редко, в тоже время, набор команд SCSI используется актуальным и повсеместно распространенным SAS в сетях SAN (как IP SAN, так и FC SAN). Связка же из SCSI HBA и SCSI bus может использоваться для самого простого способа подключения устройства хранения к серверу – DAS, но нужно помнить об ограничениях скорости SCSI интерфейса в 640мб/c.
Протокол SCSI трехуровневый, похож на стек TCP/IP.
- Interconnect – физический: размер разъемов, кабелей
- Transport – транспортный: описание команд, PDU, подтверждение
- Application – приложения: взаимодействие с ОС
Общая шина
В SCSI есть возможность нескольким устройствам (больше двух, но не более 16) работать на общей шине (расстояние до 25 метров) – Parallel SCSI. Обмен данными только в режиме half-duplex и после обмена в одну сторону среда может быть занята не для обратной передачи, а каким-то другим участником 🙂 Обмен данными очень похож на работу Ethernet с hub’ами по алгоритму CSMA/CD. Такой же режим работы есть и у SAS интерфейсов с рядом улучшений (подробнее тут). На конце шины ставится terminator чтобы сигнал не отразился обратно.
Адресация
У каждого устройства SCSI есть свой ID. Адресация в SCSI иерархическая: номер контроллера, номер шины, устройства и LUN. Используя ID SCSI контроллер различает разные SCSI array, поэтому на шине не должно быть устройств с одинаковым ID.
SCSI device ID назначается аппаратно на основе номера шины, устройства (может назначаться с помощью DIP-переключателя на устройстве ) и LUN. В диспетчере устройств Windows можно легко посмотреть SCSI device ID. В линуксе для этого используем lsscsi (по умолчанию не назначается, в отличии от Windows).
Взаимодействие
По шине SCSI передаются команды в виде блоков команд CDB. Эти команды определены в стандарте SCSI Primary Commands (SPC, текущая актуальная версия спецификации SPC4). Пример command – запрос готовности устройства, ответ на запрос.
В терминологии SCSI Initiator – клиент, а Target – сервер с данными. Когда приложение запрашивает данные роль SCSI Initiator в конвертации user read/writer operation в SCSI read operation. Далее Initiator захватывает шину (в один момент времени может быть активен только один контроллер на шине) и отправляет данные SCSI Target. После установки связи target является стороной, которая контролирует обмен. На стороне Target происходит исполнение запроса, выполняется передача данных (если был запрос на чтение) и подтверждение завершения исполнения запроса. После получения ACK Initiator освобождает шину (переводит в idle state).
Синхронная и асинхронная передача
SCSI использует два варианта передачи:
- Асинхронная (asynchronous) – перед передачей данных используется преамбула, временные промежутки между данными разные (пример: статус шины, установка нового соединения)
- Синхронная (synchronous) – перед передачей данных HBA выжидает фиксированное время, в результате используются равные промежутки между данными (пример: данные)
При первичной передаче данных между устройствами сначала происходит проверка соседа на возможность приема информации (асинхронно), а потом передаются данные (синхронно).
Вопросы
все вопросы/ответы по теме тут