Вот и весь SCSI
Помните конец семидесятых годов прошлого столетия, время только-только появившихся 5-дюймовых флоппи, процессоров Motorola 6800 и Intel 8088, модема Hayes, принтера Epson MX-80?.. Нет, это не приступ ностальгии, а всего лишь праздно-риторическое любопытство: честно говоря, я то время совершенно не помню, потому что тогда еще находился в стадии проектирования. Тогда же в той стадии находился интерфейс, знакомый теперь всем под названием SCSI (Small Computer System Interface).
Детство
Вероятно, фамилия Shugart знакома многим: она принадлежит одному из ярчайших первопроходцев и идеологов «накопительной» индустрии — легендарному силиконовому олимпийцу (в смысле обитателю Олимпа Силиконовой Долины) Алану Ф. Шугарту, который в IBM руководил разработками флоппи и RIGID, потом работал в Memorex. В 1973 году Шугарт привлек капитал со стороны и создал компанию по производству 5,25-дюймовых FDD-приводов — Shugart Associates. Эта фирма проработала под его управлением год, после чего Шугарта выгнали те самые люди, которые инвестировали начинание. Шугарт оправлялся от удара шесть лет — в этот период он даже купил рыбацкую лодку и стал профессиональным рыбаком. Но тяга к хайтеку не прошла: в 1979-м году он совместно с Финисом Коннером основал Seagate Technologies (первоначально — Shugart Technologies), после чего оставался ее руководителем в течении почти 20 лет, за которые компания стала крупнейшим независимым производителем жестких дисков (правда, и из Seagate в 1998 Шугарта «поперли», но это уже совершенно другая история).
Нас больше интересует Shugart Associates, поскольку именно она в 1979 году разработала интерфейс SASI — самый ранний вариант шины SCSI. Развернуть аббревиатуру SASI в настоящее время сложно, первые две буквы достоверно означают Shugart Associates, четвертая — Interface, а третья в разных источниках расшифровывается по-разному — System, Systems, или Standard (думается, верной версией является все-таки последняя). Возможности SASI были весьма скромными даже по сравнению с первым вариантом SCSI — скорость передачи составляла лишь 1,5 Мбайт/с, интерфейс имел очень ограниченный набор команд. Однако заложенные в SASI идеи несли в себе много прогрессивного: вместо повсеместно распространенной тогда аналоговой последовательной передачи использовалась 8-разрядная параллельная цифровая, вместо связки линий управления интерфейс предоставлял набор команд, да и работал он на логическом уровне, позволяя адресовать блоки, а не физические головки, цилиндры и секторы.
Через два года, в конце 1981-го, чтобы подстегнуть принятие интерфейса индустрией Shugart Associates, скооперировавшись с NCR (National Cash Register), подала заявку в ANSI на создание технического комитета для доработки и стандартизации интерфейса. Такой комитет — X3T9.2 — был создан в 1982 году, а имя интерфейса сменилось на безличное описательное SCSI (Small Computer System Interface). В течение нескольких последующих лет стандарт дорабатывался и улучшался: расширилась полоса пропускания, добавились наборы команд — для принтеров, стримеров, процессоров, WORM- и ROM-устройств. (Необходимо заметить, что SCSI в отличие от SASI стал уже не просто дисковым интерфейсом, а родом системной шины: теоретически, на «голом» SCSI можно собрать полноценную систему, подключив процессор, память, накопители и периферию.) После представления чернового варианта SCSI в 1984 году на утверждение ANSI многие фирмы стали выпускать продукты, более или менее совместимые с этим протостандартом. Первый официальный стандарт — X3.131-1986 — был принят в 1986 году (с появлением следующих версий этот стандарт стали называть SCSI-1).
Отрочество
Хотя классический SCSI уже окончательно вышел из употребления, базовые принципы получили развитие в новых воплощениях, поэтому имеет смысл рассмотреть их. Шина была 8-разрядной и работала на частоте 5 МГц. Максимальная длина кабеля (с 50-контактными разъемами) не должна была превышать 6 м, поскольку использовалась несбалансированное соединение (SE — Single-Ended, единственный проводник для каждого сигнала). В истоке шины находился хост-адаптер, к которому можно было подключить до 7 устройств (в цепочке, одно за другим). В синхронном режиме (когда устройства создают канал определенной ширины и общаются по нему без подтверждений) потолок скорости находился на уровне 5 Мбайт/с. Но на практике этот режим почти не применялся, а в асинхронном режиме (запрос-ответ) скорость редко достигала 2 Мбайт/с (более реальная цифра — 1,5 Мбайт/с).
На первом и последнем устройствах шины должно было включаться терминирование (в настоящее время большинство SCSI-устройств включает терминирование автоматически, если устройство оказывается крайним), то есть к каждой сигнальной линии подключалось сопротивление для подавления отраженных сигналов. В первоначальном варианте использовалось только пассивное терминирование, при котором линии подключались к пассивному делителю напряжения (между двумя резисторами на пути от источника питания к земле). При таком подключении колебания напряжения в источнике питания (4,25-5,25 В) вели к скачкам напряжения на сигнальных линиях, поэтом позже стало применяться активное терминирование, где линии подключаются через резисторы к стабилизатору с постоянным выходным напряжением (2,85 В). Есть еще особый «продвинутый» тип активного терминирования, наилучший для использования с SE-шиной — FPT (Forced Perfect Termination, принудительное абсолютное терминирование). Здесь в цепь добавляются диоды, что начисто устраняет практически любые отраженные сигналы.
Юность
За год до принятия SCSI-1 к X3T9.2 (группе ANSI по разработке SCSI) обратилась группа производителей с просьбой сделать стандарт более строгим и подробным (чтобы расширить совместимость и упростить разработку устройств). Вместо того чтобы задерживать принятие стандарта, X3T9.2 отпочковала от себя специальную группу для работы над бумагой CCS (Common Command Set), которая впоследствии обрела большую популярность — многие производители выпустили устройства на ее основе. Одновременно с CCS началась разработка нового стандарта — SCSI-2, который должен был впитать в себя результаты CCS, а также улучшить производительность и добавить возможностей интерфейсу, устранив при этом лишние опции, мешавшие совместимости. Финальная версия SCSI-2 была одобрена ANSI лишь в 1994 году. В стандарте появилась поддержка CD-ROM (взамен абстрактрых ROM-устройств в SCSI-1), оптических устройств с возможностью записи/перезаписи, сканнеров, значительно расширился набор для принтеров и т. д. Пассивные терминаторы остались разрешенными, однако, был рекомендован переход на активное терминирование.
Что касается улучшения производительности, здесь появилось два основных нововведения (с которых началась известная путаница с названиями типов SCSI) — интенсивное и экстенсивное: Fast и Wide SCSI. Fast SCSI — это опция, позволяющая увеличить тактовую частоту (а, следовательно, и пропускную способность шины) вдвое — с 5 до 10 МГц. Wide SCSI — опция увеличения разрядности шины с 8 до 16 бит (и даже до 32, правда до выпуска устройств с 32-битным Wide SCSI дело так и не дошло) путем наращивания количества сигнальных линий. Арбитраж шины, команды, статус, сообщения, к сожалению, остались в стандарте 8-разрядными (впоследствии SCSI-3 начался как раз с перехода на 16-разрядные команды и арбитраж). Для Wide SCSI потребовался новый 68-контактный разъем вместо 50-контактного (разъемы совместимы при использовании A-to-B кабеля). Скорость передачи данных с применением Wide SCSI возрастает еще вдвое, достигая в пределе 20 Мбайт/с (Fast Wide SCSI).
Кроме этого, в SCSI-2 увидели свет и более тонкие хитрости для улучшения производительности. Во-первых, такая замечательная вещь, как организация очереди команд (Command Quequing) — одна из сильных сторон шины SCSI. Command Quequing позволяет отправлять не одну, а сразу несколько (до 128) команд на устройство, а устройство само выбирает последовательность их выполнения таким образом, чтобы оптимизировать свою работу. Во-вторых, метод Scatter/Gather, позволяющий в одном пакете получать/передавать информацию из нескольких (или в несколько) разрозненных страниц памяти, что особенно заметно повышает производительность в ОС, использующих виртуальную память.
Стоит особо отметить попытку движения в сторону сбалансированного соединения (differential signaling, позже — HVD, High Voltage Differential signaling). В отличие от SE, HVD использует для передачи данных не один проводник, а пару — для передачи «нуля» оба проводника пересылают нулевое напряжение, для передачи единицы один из проводников шлет некоторое положительное напряжение, а второй — его отрицательный перевертыш. Получающее устройство воспринимает разницу между напряжениями обоих проводников. Такая схема при высоком напряжении позволяет добиться значительного улучшения качества передачи: длина кабеля может достигать 25 метров даже при высоких частотах шины (например, при 20-МГц шине Fast-20 из SCSI-3, в то время как SE-кабель здесь не может быть длиннее 1,5 метров). Заметим также, что HVD электрически не совместим с SE из-за значительной разницы напряжений (фактически, смешать в одной цепи HVD-устройства с SE- или LVD-устройствами значит сжечь последние). Несмотря на свою эффективность, широкого распространения технология HVD не получила из-за дороговизны реализации (и из-за высокого энергопотребления готовых продуктов) — многим пользователям хватало для их целей и SE-соединений. В результате технология заглохла: цена устроств с HVD была слишком высокой, чтобы они пользовались большой популярностью, а отсутствие спроса не позволило производителям расширить масштабы и снизить цену. SE-кабели продолжили свое существование вплоть до конца 90-х гг.
Зрелость
Опять-таки за год до официального принятия SCSI-2 началась работа над новой версией — SCSI-3. Похоже, что причины окончания работы над одной версией и начала работы над другой в случае SCSI менее всего объясняются техническими и коммерческими мотивами. Они гораздо тривиальнее: просто нужно же когда-то формально закреплять результат. Разработки же идут своим чередом, последовательно, без остановок и скачков. SCSI-3, целиком не ратифицированный до сих пор (да и неизвестно, произойдет это когда-либо вообще), являет собой развитие и расширение SCSI-2 с добавлением к нему множества новых наборов команд технологий и решений.
В последнем своем воплощении SCSI расцвел и разросся настолько бурно, что подробно охватить его целиком было бы весьма и весьма сложно. Разработка такого гигантского стандарта заняла бы очень долгое время и потребовала бы уйму усилий множества людей. Причем нетерпеливые производители не пожелали бы ждать долго и начали бы разрабатывать усовершенствования (разумеется, несовместимые между собой), что привело бы если не к краху стандарта, то к громадной неразберихе в индустрии. Этим объясняется изменение стратегии разработки: вместо одного огромного документа SCSI-3 был разделен на множество сравнительно небольших «стандартиков», охватывающих конкретные технологии, протоколы и наборы команд. Над каждой из бумаг работает особая группа. Естественно, это ведет к более быстрому развитию наиболее востребованных частей стандарта, в то время как общая крыша SCSI-3 не дает им разойтись вразброд от «генеральной линии». Казалось бы, чего еще? — разделяй и властвуй! — однако, со временем назревает подозрение — а не берет ли SCSI-3 больше, чем сможет унести? Под крышей стандарта пригрелось уже больше десятка документов (они развиваются и принимаются независимо), относящихся к SCSI и к SCSI-подобным интерфейсам вроде FireWire и Fibre Channel. Вообще, понятие «стандарт SCSI-3» разбухло изнутри настолько, что сказать теперь «устройство совместимо с SCSI-3», значит не сказать ничего.
В данном материале нас будет интересовать только та часть SCSI-3, которая непосредственно относится к параллельному интерфейсу. Прежде всего, это документ SPI (SCSI-3 Parallel Interface, «Ultra SCSI»), описывающий физическую часть того, что раньше было принято называть просто SCSI. В рамках оригинальной его версии появилась шина Fast-20, которая посредством удвоения тактовой частоты поднимала пиковую пропускную способность шины до 40 Мбайт/с. Следующая версия, SPI-2 (Ultra2 SCSI), помимо очередного удвоения частоты (Fast-40), ввела ряд принципиальных новшеств, особенно заметное из которых — технология LVD. При скорости 40 МГц максимальная длина SE-кабеля составляет всего 75 см (и это для всей цепочки!). Назрела объективная необходимость что-то менять.
И вот, принципы разностной передачи сигнала, использованные в отторгнутой в свое время технологии HVD, получили второе воплощение. LVD представляет собой некоторого рода компромисс между HVD и SE: используется сбалансированная передача данных, однако с низким напряжением (максимальная длина кабеля — 12 м). Электрически технология LVD совместима с SE, на одной шине могут даже находиться и SE-, и LVD-устройства, если последние — многорежимные (LVD/SE multimode). При LVD используются особые терминаторы; кроме того, есть многорежимные LVD/SE-терминаторы, которые при работе шины в режиме SE функционируют, как обычные активные. С появлением LVD необходимость в HVD отпала начисто из-за чего последняя технология и была полностью убрана из стандарта в SPI-3. Время жизни SE так же подошло к концу: скорости шины выше 20 МГц (Ultra SCSI) здесь не поддерживаются.
В следующей версии — SPI-3 (Ultra3 SCSI) — пропускная способность шины снова возросла вдвое (Fast-80DT), но не за счет изменения частоты, а из-за использования Double Transition (передача по переднему и заднему фронтам сигнала). Кроме HVD из стандарта были убраны такие рудименты, как SCAM, 32- и 8-битная ширина шины (использование последней просто не описано для режима Fast-80). Таким образом, начиная с SPI-3, в SCSI остается поддержка только 16-разрядной шины и требуется использование LVD. Кроме Fast-80DT, в стандарт добавилось еще две важных «фичи»: CRC (контроль целостности передачи с помощью циклического кода), Domain Validation (проверка окружения на способность работы с заданной скоростью). Кроме того, имеется два косметических улучшения — QAS (Quick Arbitration and Selection) и Packetization. Формально, любое устройство, поддерживающее любой набор из этих пяти нововведений, может гордо именоваться Ultra3 SCSI (и быть при этом, возможно, несовместимым с другими Ultra3-устройствами). Во избежание недоразумений в индустрии появилось два коммерческих наименования Ultra3 SCSI — Ultra160 (без двух последних фич) и Ultra160+ (полный вариант). Версия SPI-4 увеличивает тактовую частоту шины о 80 МГц, доводя тем самым пиковую пропускную способность до 360 Мбайт/с (Fast-160, Ultra360). SPI-5 (Ultra640), обещающий 640 Мбайт/с находится в разработке.
Характеристики разновидностей интерфейса SCSI | ||||
Ширина шины, бит | Тактовая частота, МГц | Пиковая пропускная способность, Мбайт/с | Электрический тип соединения | |
SCSI | 8 | 5 | 5 | SE (6 м) |
Fast SCSI | 8 | 10 | 10 | SE (3 м), HVD |
Wide SCSI | 16 | 5 | 10 | SE (6 м), HVD |
Fast Wide SCSI | 16 | 10 | 20 | SE (3 м), HVD |
Ultra SCSI | 8 | 20 | 20 | SE (1,5 м), HVD |
Wide Ultra SCSI | 16 | 20 | 40 | SE (1,5 м), HVD |
Ultra2 SCSI | 8 | 40 | 40 | LVD |
Wide Ultra2 SCSI | 16 | 40 | 80 | LVD |
Ultra160/+ SCSI | 16 | 80 (DT) | 160 | LVD |
Ultra320 SCSI | 16 | 160 (DT) | 320 | LVD |
Ultra640 SCSI | 16 | 320 (DT) | 640 | LVD |