SCSI

Конспект вебинара 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 выжидает фиксированное время, в результате используются равные промежутки между данными (пример: данные)

При первичной передаче данных между устройствами сначала происходит проверка соседа на возможность приема информации (асинхронно), а потом передаются данные (синхронно).

 

Вопросы

все вопросы/ответы по теме тут

Leave a Reply