Главная » Статьи » Ядро | [ Добавить статью ] |
GNU/Linux и SCSI являются естественной парой, поскольку оба имеют
схожие характеристики в соответствующих им средах. GNU/Linux является
безопасной и надёжной операционной системой, работающей без сбоев. SCSI
- очевидный выбор для надежных и высокопроизводительных устройств
хранения. Кроме того, обе системы имеют открытый исходный код. Вы
можете загрузить и прочитать различные спецификации SCSI с сайта
технического комитета T10 Международного комитета по стандартам
информационных технологий (INCITS). Точно так же вы можете загрузить
исходный код GNU/Linux, чтобы разобраться в его реализации. Каждая из
этих технологий доминирует в соответствующей отрасли, поэтому
неудивительно, что GNU/Linux поддерживает SCSI лучше, чем какая бы то
ни было другая операционная система. SCSI - это очень интересный для изучения интерфейс, поскольку он является одним из старейших интерфейсов, который продолжает развиваться и по сей день. Первый стандарт SCSI, SCSI-1, был создан Shugart Associates примерно в 1979 году. SCSI-1 определяет 8-битный параллельный интерфейс с частотой синхронизации 5 МГц, обеспечивающий максимальную скорость передачи данных 5 мегабайт в секунду (МБ/с). Стандарт SCSI-2 был разработан в 1985 году и отличался в два раза большей тактовой частотой (10 МГц) и более широкой шиной (16 бит). SCSI-2, получивший название Fast/Wide SCSI, обеспечивает скорости передачи данных до 20 МБ/с, он обратно совместим со SCSI-1, хотя и со скоростью SCSI-1. Разработка SCSI-3 началась в 1993 году; на самом деле он представляет собой набор стандартов, определяющих протоколы, команды и методы сигнализации. Под именем SCSI-3 объединяются стандарты параллельного SCSI под названием Ultra и современных последовательных протоколов на базе SCSI, к которым относятся IEEE 1394 (FireWire), Fibre Channel, Internet SCSI (iSCSI) и новика в этой серии - SAS. Эти стандарты изменили ситуацию на рынке устройств хранения, предоставив технологии сетей хранения данных (такие как FC-AL и iSCSI), увеличив скорость передачи данных до уровня, превышающего 1 гигабит в секунду (Гбит/с), повысив количество адресуемых устройств до более чем 100, а также увеличив максимальную длину кабеля более чем до 25 метров. На рисунке 1 показана эволюция скорости передачи данных SCSI с 1986 по 2007 годы. Рисунок 1. Эволюция скорости передачи данных SCSI В SCSI реализуется клиент-серверная архитектура связи. Инициатор отправляет запросы команд целевым устройствам. Целевое устройство обрабатывает запрос и направляет ответ инициатору. Инициатор может представлять устройство SCSI клиентского компьютера, а целью SCSI может быть дисковый накопитель, CD-ROM, накопитель на магнитной ленте или специальные устройства, например, сервис мониторинга блока накопителей. Несмотря на то, что транспортные протоколы SCSI изменялись с годами, команды SCSI сохранили многие свои первоначальные элементы. Команда SCSI определяется в блоке дескриптора команды (Command Descriptor Block, CDB). В CDB содержится код операции, определяющий ту или иную операцию, которую необходимо выполнить, и несколько параметров для этой операции. Команды SCSI поддерживают чтение и запись данных (по четыре варианта каждого действия) и ряд команд, не относящихся к данным, например test-unit-ready (проверка готовности устройства), inquiry (получение основной информации о целевом устройстве), read-capacity (получение ёмкости целевого устройства), и т.д. Набор команд, поддерживаемых целевым устройством, зависит от типа устройства. Инициатор определяет тип устройства посредством команды inquiry. В таблице 1 перечислены наиболее распространённые команды SCSI, которые могут вам встретиться. Таблица 1. Распространенные команды SCSI
В SCSI реализовано около шестидесяти команд для широкого спектра устройств (включая устройства с произвольным доступом, такие как диски, и устройства с последовательным доступом, такие как лента). В SCSI также реализованы особые команды для доступа к сервисам enclosure services (например, запрос текущих параметров состояние и температуры в корпусе устройства хранения). Дополнительную информацию можно найти в разделе Ресурсы. На рисунке 2 показаны места взаимодействия подсистемы SCSI и ядра Linux. Над ядром находится интерфейс системных вызовов, который обрабатывает маршрутизацию вызовов из пространства пользователя соответствующей цели в ядре (например, открытие, чтение и запись). Уровень абстракции для множества файловых систем, поддерживаемых ядром, предоставляет виртуальная файловая система (VFS) Она берет на себя отправку запросов соответствующей файловой системе. Связь с большинством файловых систем производится через буферный кэш, который оптимизирует доступ к физическому устройству путём кэширования последних использованных данных. Далее располагается уровень драйверов блочных устройств, который может содержать различные блочные драйверы для расположенных ниже устройств. Одним из таких драйверов блочных устройств является подсистема SCSI. Рисунок 2. Места взаимодействия подсистемы SCSI и ядра Linux Аналогично другим основным подсистемам ядра Linux, подсистема SCSI реализована в многоуровневой архитектуре с тремя различными уровнями. Так называемый верхний уровень представляет интерфейс высокого уровня ядра для SCSI и драйверы устройств основных типов. Далее идёт средний уровень, также называемый общим или объединяющим уровнем. На этом уровне располагаются общие сервисы для верхнего и нижнего уровней стека SCSI. И, наконец, нижний уровень представляет фактические драйверы для физических интерфейсов, связанных со SCSI (смотри рисунок 3). Рисунок 3. Многоуровневая архитектура подсистемы SCSI в Linux Исходный код подсистемы SCSI (верхний и средний уровни SCSI, а также множество драйверов) можно найти в ./linux/drivers/scsi. Структуры данных SCSI могут находиться в директории исходных кодов SCSI и в ./linux/include/scsi. Верхний уровень подсистемы SCSI представляет интерфейс ядра самого высокого уровня (уровень устройства). Он состоит из набора драйверов блочных (дисков и CD-ROM SCSI) и символьных устройств (ленточных накопителей SCSI и базовых устройств SCSI). Верхний уровень принимает запросы от расположенных выше систем (например, VFS) и преобразует их в запросы SCSI. Верхний уровень также выполняет команды SCSI и уведомляет вышестоящий уровень о состоянии их выполнения. Драйвер дисков SCSI реализован в ./linux/drivers/scsi/sd.c. Драйвер дисков SCSI инициализируется вызовом Драйвер
ленточных накопителей SCSI реализован в ./linux/drivers/scsi/st.c.
Драйвер ленточных накопителей представляет собой устройство
последовательного доступа и регистрируется как символьное устройство с
помощью Драйвер
CD-ROM SCSI реализован в ./linux/drivers/scsi/sr.c. Драйвер CD-ROM
также является блочным устройством и представляет набор функций,
аналогичный набору функций драйвера дисковых накопителей SCSI. Функция И, наконец, драйвер базового устройства SCSI реализован в ./linux/drivers/scsi/sg.c. Этот драйвер позволяет пользовательским приложениям отправлять устройствам команды SCSI (например, format, mode sense или диагностические команды). Использовать драйвер базового устройства SCSI из пространства пользователя можно посредством пакета sg3utils. В этом пакете пространства пользователя содержится множество утилит для отправки команд SCSI и обработки ответов на них. Средний уровень SCSI является уровнем общих служб для верхнего и нижнего уровней SCSI (реализован частично в ./linux/drivers/scsi/scsi.c). В нем реализованы функции, используемые драйверами верхнего и нижнего уровня; таким образом, он служит связующим элементом между этими уровнями. Этот уровень важен тем, что он абстрагирует реализацию драйверов нижнего уровня (LLD); частично он реализован в ./linux/drivers/scsi/hosts.c. Это позволяет использовать хост-адаптеры шины (HBA) Fibre Channel с различными интерфейсами одинаковым образом. Средний уровень SCSI выполняет регистрацию драйверов нижнего уровня и обработку ошибок. На среднем уровне также реализованы команды SCSI для организации очереди между верхними и нижними уровнями. Ключевой функцией среднего уровня SCSI является преобразование запросов команд верхнего уровня в запросы SCSI. Кроме того, он управляет обработкой ошибок SCSI. По существу, средний уровень действует посредником между верхним и нижнем уровнями подсистемы SCSI. Он принимает запросы на выполнение операций SCSI и организует очередь обработки (как можно увидеть в ./linux/drivers/scsi/scsi_lib.c). После завершения выполнения этих команд он получает ответ SCSI от драйверов нижнего уровня и уведомляет верхний уровень о завершении выполнения запроса. Одним из наиболее важных аспектов среднего уровня является обработка ошибок и тайм-аутов. Если команда SCSI не выполнена в приемлемое время или на запрос SCSI была возвращена ошибка, средний уровень обрабатывает ошибку или повторяет запрос. Средний уровень также управляет восстановлением более высокого уровня, например, запросами на сбросSCSI или HBA (LLD). Обработчик ошибок и тайм-аутов SCSI реализован в ./linux/drivers/scsi/scsi_error.c. На нижнем уровне расположен набор драйверов, называемых драйверами SCSI нижнего уровня. Это специализированные драйверы, которые предоставляют интерфейсы к физическим устройствам, например, к HBA. Драйверы нижнего уровня обеспечивают абстрагирование HBA конкретных устройств от общего среднего уровня. Каждый драйвер нижнего уровня предоставляет интерфейс к определенному оборудованию, но имеет стандартный набор интерфейсов для среднего уровня. На нижнем уровне содержится большая часть кода, поскольку он учитывает различные вариации типов адаптеров SCSI. Например, в протокол Fibre Channel входят драйверы нижнего уровня для адаптеров Emulex и QLogic. В число драйверов нижнего уровня для адаптеров SAS входят драйверы для адаптеров Adaptec и LSI. Можно с уверенностью сказать, что у SCSI есть будущее, и его место будет в Linux. С развитием SCSI Linux будет поддерживать самые современные усовершенствования. Linux поддерживает новый протокол SAS с драйверами для целого ряда HBA. По мере развития протокола до более высоких скоростей (например, до 6 Гбит/с в SAS или 8 Гбит/с в FC) Linux будет оставаться на передовой разработки и внедрения. Также Linux будет оставаться на переднем крае создания новых протоколов SCSI. Среди них важно упомянуть Fibre Channel over Ethernet (FCoE). FCoE является наложением кадров Fibre Channel на полнодуплексные сети Ethernet (как правило, 1 Гбит/с или 10 Гбит/с). Протокол FCoE важен потому, что он объединяет наиболее распространённый протокол сетевых устройств хранения с наиболее распространённой сетевой средой. За этой технологией определенно следует наблюдать, и Linux будет в ней присутствовать. Также ожидается выход комплексной защиты данных в SCSI на основе нового стандарта целостности данных T10. Этот стандарт добавляет в каждый сектор поле контроля целостности данных (DIF), поддерживающее защиту данных на носителях. Новое 8-байтовое поле DIF содержит циклический избыточный код (CRC) для защиты данных, ссылочную метку для защиты от неверно направленной записи, а также метку приложения. Метка приложения соответствует конкретному приложению и определяет назначение данных — например, часть документа PDF. Дополнительную информацию можно найти в разделе Ресурсы. Ядро Linux - это классический пример абстрактной многоуровневой архитектуры. Оно объединяет отдельные файловые системы различных типов с различными физическими средами хранения данных. Когда эти среды связаны со SCSI, подсистема SCSI преобразует общие блочные запросы Linux в запросы SCSI для определенных устройств. С годами сама подсистема SCSI претерпела множество изменений, и они ещё не закончены. В Linux реализуются новые технологии, в том числе комплексная защита данных и новые протоколы, например, FCoE.
Источник: http://www.ibm.com/developerworks/ru/library/l-scsi-subsystem/index.html | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: 2043 | Комментарии: 2 | |
Всего комментариев: 1 | |
| |
Операционные Системы
[61]
ОС Open Source
|
Мобильный Linux [26] |
Сравнение ОС [7] |
Статьи о Linux [16] |
Свободное ПО [10] |
Програмирование [6] |
Не для нубов [5] |
Ядро [13] |
Хранилище данных [9] |
Устройства [1] |
Установка/конфигурирование/планиров [16] |
Файловые системы [3] |
Управление, основанное на политиках [1] |
Управление инфраструктурой [0] |
Серверы [5] |
Биографии [6] |
Прочее [25] |