Лекция 7 (2012-11-26)
Устройства хранения данных
Жесткие диски и вариации на тему, устройства хранения применимые к малым и средним ЭВМ.
Сначала про историю того, как эволюционировали способы подключения и сами устройства.
Исторически конторы которые занимались жесткими дисками -- основными устройствами хранения средних и малых ЭВМ -- Seagate и Western Digital. Seagate когда-то имел другое название, но будем называть его Seagate.
Изначально Seagate разработал ST-506. Пример но в те же годы WD разрабатывала интерфейс IDE. Посредством эволюции этих двух для компьютера IBM PC/AT появился ATA, который использовался на протяжение лет 20 -- началось в 1983, задепрекейчен был интерфейсом SATA, который разрабатывался с небольшим участием Intel 2003 году. SATA заменил Parallel ATA, так получилось, что последовательный интерфейс был проще.
Опять же Seagate разрабатывал собственный чудесный интерфейс SASI, который опять же в начале 70-ых эволюционировал в Small Computer System Interface -- SCSI, помимо протокола много чего определял относительно среды передачи данных, был параллельным. У ATA было 40 пинов (9+16+??), у SCSI 50-60 пинов. Со временем так получилось, что с приходом к пониманию, что дальше тянуть среду передачи данных с параллельной шиной нельзя, появилось SCSI для различных интерфейсов -- iSCSI(over IP), SCSI over FiberChannel. Сам по себе SCSI определял не только протокол для устройства хранения (как АТА), SCSI устройства весьма разнообразны в своих возможностях -- допустимы, например, removable media. Важным медиа для SCSI стал ATAPI -- способ передавать команды SCSI по ATA. Таким образом подключались cd-rom, ZIP, супердрайвы. Где-то здесь появился EIDE. SAS. ATA over Ethernet. Как симметричный ответ iSCSI ATA тоже можно передавать по сети, но не поверх IP, а поверх Ethernet, что имеет некоторые следствия.
Актуальными на данный момент являются SATA, SAS и SCSI(больше софтовая штука). Остальное почило в бозе или осталось как легаси.
Сегодня будет про
- ATA
- SATA
- SCSI
- ATAPI
- SAS
- (iSCSI)
- (PC)
- (IB)
Вообще говоря сам по себе протокол ATA ничего интересного не представляет, хотя в нем есть много особенностей, с которыми вы можете столкнуться если будете обширно взаимодействовать со стораджем. До сих пор есть понятие device 0, device 1, до сих пор CHS нумерация.
ATA
Интерфейс подключения устройств хранения данных. Достаточно простой.
40 пинов. 16 бит данных, device addr, cs, slave, DMACK/DMARQ, INTRQ, IORD/IOWR/IORDY(для PIO и в режиме DMA для подтверждения DMA -- DMA ready на data in, DMA ready on data out), Reset.
Ещё есть такие понятия как pin 20, pin 28, pin 34.
Основная идея -- обновление блока регистров (в SATA -- shadow register block). У устройства поддерживается некое состояние и не его базе оно понимает, чего ему делать. Команда подается следующим образом -- специальным образом конфигурируется блок регистров и потом начинают передаваться данные. Практически все выписанные пины -- легаси. В связи с чем? DMA появилось в ит атачмент чуть ли не в первом, в связи с тем, что альтернативой было только PIO, а он работал отвратительно медленно. PIO это Programmed IO. DMA появилось в первой версии протокола, до этого использовался упомянутый IDE с PIO.
Начнем выписывать версии, их было много.
- ATA 1. 1994 год. Появилось DMA. Так же как и с памятью не сразу появилась возможность писать понесколько слов подряд в одну строку. Так и здесь -- запись была по одному слову 16 бит.
- ATA 2. Много улучшений. MW DMA, 28-bit addr. Изначально регистра адреса был 22 бита, что ограничивает емкость в 2 терабайта, но это исправили и позволили адресовать 128 гигабайт. В DMA использовалась CHS, как в IDE. Во времена PC AT то какую геометрию у диска знал биос сам и в нем информация либо была зашита железно, либо конфигурировалась. Потом стало понятно что так жить нельзя и надо делать со стороны устройства. Но с конца 90 начали использовать зональную запись и оно потеряло смысл. цхс перестало отражать реальную геометрию диска. В разное время упирались в различные ограничения, но это исправлялось либо в биосе, либо руками в нулевом секторе можно было поправить геометрию.
- ATA-3 sw dma deprecated, smart. DMA 2
- ATA-4. впервые появилось atapi UDMA 33
- В районе ATA 5. Появилась поддержка цф. Появилось 80 пин, ультра-DMA-2, скорость типа 33 мегагерца, 32 бита, позволяет передавать 16 гигабайт в секунду. Там они сломали механическую совместимость по коннекторам но добавили землю между проводами -- меньше кросстолки и уменьшается сопротивление. UDMA 66
- ATA 6. 48-битная адресация путем накидывания ещё слов в реджистер блок (сейчас он около 512 слов). Позволяет адресовать дикие петабайты.
- ATA 7. Появилась очередная скорость UDMA/133 это условно говоря предел.
В протокол вкорячили работу с 2 дисками. Пин 20 просто ключик. В современных разъёмах там заглушка. Пин 28 -- cable select. Идея в том, что жесткие диски могут сами понять мастер он или слейв. До этого такая фича была, но в проводах. Если у вас 28 пин заземлен, то можете считать себя мастером. А если висит -- слейвом. Это все условность,конфигурация может быть переписана на устройстве и вообще не связана с тем, что ходит когда девай селект. До тех пор как появились 80 пиновые кабеля он был прописан как фича но не был стандартизован и народ кустарно выбивал/перебивал дорожку. Это было плохо тем, что возникало отражение. ATA он не терминируется в отличие от SCSI и при увеличении скорости отражение начинает играть все большую роль. При разработке ATA 5 было принято волевое решение о физическом расположение мастера.
В режиме DMA если 2 девайса подключены работало то что медленнее. Если было ATA4 и ATA5, то ATA5 или ATA6 не могли отдельно тактироваться.
SATA
Существует 3 итерации стандарта, готовится 4-ая, возможно выйдет в следующем году. По скоростям 1.5 GT ~ 150 MB/s, 3 и 6. Кодирование везде 8/10. Питание у ATA 4-пиновое -- 12в, земля, земля, 5 в.
Сигнальный кабель -- 7 пинов. Причем довольно смешно -- то что торчит, это земля -- она есть общая, для трансивера, для ресиваер, ещё есть пины Tx Rx.
Питание -- 15 пинов. Причем там выставляется 3 разных вольтажа -- 3.3, 5, 12. Это все хорошо размешано землей. На каждый из этих вольтажов по 3 пина, причем один торчит -- чтобы земля поднималась первой. И три пина только земли. Чтобы можно было в сумме нагрузку распределять. Один пин зарезервирован, сейчас граундится.
Ещё есть такая тенденция -- не все вольтажи везде разводятся. Если реализуется мобильное устройство, можно забить на разводку 5 и 12 вольт.
Это оказывает негативное влияние на минимизацию устройств -- разъемы большие. Можете использовать нестандартный разъем, но вы будете не совсем SATA устройство и это может негативно сказаться на вашей карме.
Маленькие ссдшки 5х5 см, которые вешаются на одну линию пси ген 3.
На линклеере все кучеряво. Используется кодирование 8/10.
По поводу физики ещё стоит рассказать -- как вообще поднимается линк. Стейт машина в стандарте для описания различных аспектов взаимодействия девайса и хоста в том что касается поднятияя линка. В PCIe она весьма развесистая и много внимания уделено параллелстейтам. PCIe, как и в пси, который за счет отраженного сигнала позволял делать устройства зеленее, нонандерстендабл. У вас есть некая логика транзишнов между ними поскольку надо делать синхронизацию заголовки кул старт в течение того что. Отличие кулстарат -- л1 состояние в котором фактически все отключено но трансмитер работает и когда приходит синхропоследовательность он синхронизируется и заодно поднимает всю железку обратно и соответственно л0с тоже какой то войд стейт.
С устройствами есть только типы и отдельное состояние и диаграмма попроще.
Первым поднимается хост -- начинает транслировать первую синхропоследовательность (то что в PCIe было бикон). Это символ. Кодирование 8/10. 8 бит называются символами. Обозначаются ABCDEFGH. ABCDE FGH берёте как десятично число k 28.3. 5 бит транслируются в 6, 3 в 4 и следят чтобы было уравновешено по единичкам, что бы вольтаж не задирался. То, чего было в последнее время больше определяет какой вариант преобразования взять для этих половинок. По два варианта для каждого,меняющего диспарити на плюс и на минус. 8 бит это символ -- как данные 8 бит, в канале 10 бит. Почему к? Для данных стандартная таблица, но у нас остается много избыточности, которой можно пользоваться чтобы передвать командные биты. В SATA таких символов 2 -- k28.3 k28.5 -- отдельный битик говорит данные или команда. Но реально командных символов 2. В PCIe их побольше. 28.5 только для лайна. 28.3 для команд.
Host tx: wake -- caminit -- ?? -- comwave Посылается не один символ, а сто шесть десятых, расстояние 66 милисекунд и 100 милисекунд. DevTX: -- --
Схема.
У PCIe семь состояний, каждый определяется своей стейт машиной, некоторые довольно развесистые.
SDF
FIS
CRC
EOF
Так выглядит одна SATA- транзакция. Start of Frame, Enf of Frame -- стандартныесимволы. FIS -- заголовок и команды, стандартная структура. Команды могут быть либо легаси, либо более модные. Когда принимающая сторона видит EOF он знает, что предыдущее было црц. Здесь выравниваюшие символы можно вставлять просто посередине транзакции. Если вы вставили холд, в ответ может придти холдда, это означает что все плохо. Это позволяет делать флоу контрол -- если все буфера забились и все закончилось, но вы начинаете слать флоу. А вот в PCIe для несколько типов операций определены кредиты и считаются отдельно по головам и катушкам.
Подробнее по состояниям. Начинаете слать холд резет, делаете это заданное в стандарте время. Посылаете 28. что-то -- определенный символ, который говорит о том, что резет. Как только вы перестаете это делать, девайс в определенные рамки должен прислать ответ (минимальный и макс границы, миним дли эвитации отражений при кросстолках). Дальше происходит калибровка линий связи на основании комм инита. Начинаете посылать вейк, устройство калибруетсЯ, выравнивается, начинаете посылать данные.
Для поддержки обратной совместимости SATA может выглядеть как легаси ATA хост и рассказывать, что у него есть много девайсов. В режиме эмуляции должен предоставлять реджистер блок и поддерживать его сотояние чтобы выглядеть достаточно ATA устройством.
SCSI
Определили не просто физический протокол, а как и ATA, PCI, ISA -- определили довольно большое количество команд, определили некий формат,этим занимался Seagate, некий формат сообщений -- довольно прикольный. Первые 4 бита номера команды указывали на то, какой у неё будет размер. Команда 0xh или 1xh, то дальше 6 байт заголов Схема.
С физической точки зрения это шина. В первых версиях скорости типа 5 мб на 16 бит -- 10 мб/сек. В какой-то момент перешли на LDS, сохранив механически разъем, но поменяв эдектрически. LDS был в ультра SCSI 2 начиная с 40 мгц.
К ней может подключаться 16 устройств, сейчас это называется таки parallel scsi коннектор. Шина должна явно терминироваться -- в отличие от ATA. Терминирование означает, что там сильный большой и страшный резистор. Если у вас Open Ended кабель, то изменение вольтажа начинает отражаться, усиливаясь. Есть кабель. Начинаете внезапно увеличивать ему вольтаж. Если у вас кабель висит. Пока оно статическое все нормально, а при изменении сигнала.. на такой частоте задается индуктивность и чтобы сменить вектор надо повесить резистор. Быстрая смена напряжения в высокочастотном линке -- индуктивность кабеля сильно влияет и если его терминировать, то наводки от самого же кабеля.. там не наводки. Отражения -- эффект в том, что вольтаж усиливается идя обратно от конца кабеля, если кабель нетерминирован. За счет регулярности передаваемых данных наложение отраженного сигнала закрывает глазок.
Поскольку передача по 2 фронатм + 16 битов у вас получается 140 мб, что быстрее чем SAS 2.0
Командный уровень SCSI довольно универсальный язык для управления устройствами оказался пригодным много где и используется поверх различных сред передачи данных.
LUN -- сначала 16, потом до 256 плюс в теории может быть некоторая иерархия. Logical Unit(??) Number.
ATAPI
Advanced Technology Atached Program Interface. Тянется с PC AT.
Про него можно сказать только то, что тот же самый ATA, но введена команда пэкет и стандартный набор команд ATA, которые устройство может не поддерживать, так как они заменяются командами SCSI. Нужно было потому что как среда передачи данных интерфейс ATA получил широкое распространение, но был предназначен только для жестких дисков. Возникала проблема со всяким ремувабл медиа, а хотелось подключать cd rom, ZIP, супердрайвы по интерфейсу ATA. До этого они подключались кто во что горазд, была куча расширений IDE, которые долго тянулись. Как правило cd rom подключались на звуковые карты, которые таскали на себе по 4 варианта разъема, которые почти ничем не отличались. ZIP и супердрайвы иногда подключались как честный SCSI. Потом некотрое время просто добавляли преобразователь в SATA. Radeon два поколения тянул добавление к интерфейсу AGP оборачиватель и разворачиватель в PCIe.И был смешно наблюдать как некоторые вещи упирались в скорость работы этого переходника.
SAS
Обратно совместим с SATA, но туда насыпали ещё пинов. Скорость у него 600 гб в секунду, при том, что он использует ??2.
iSCSI
SCSI over IP, протокол 3 уровня, может раздавать SCSI устройства всему миру и позволяет с них грузится, хотя это кроме спец железок почти никто не умеет.
Как вообще работает PXE? Есть сервер, который раздает по tftp загрузчик, ?? скачивает образ, а образ умеет работать со SCSI.
AoE
Ata over ethernet, правда лектор его никогда не видел. Оно не маршрутизируется.
FC & IB
FiberChannel исторически для того чтобы сторадж ходил, потом добавили подержку SCSI. 1-2-8-16 гигабит, разрабатывалось для мейнфреймов, основная медиа -- оптика. Хотя сейчас умирает, убиваемый иб, кое где остается, большое легаси. IB умеет инкапсулировать ethernet, поверх ethernet есть IP, поверх IP можно гонять SCSI и некоторые люди так делают.
В плане физики, как это на самом деле реализуется. Все довольно банально. Стоит ведерко с IB, подключено к свитчу, в нем торчит устройство. Схема. Ведерко может не иметь когнитивных свойств и просто быть большим диском, либо какие-то когнитивные свойства иметь. Если не имеет, то ведерок можно напихать сколько угодно, свитч -- кроссбар, он не тормозит. Эта штука пафосно называется SAN, на них навешивается gpfs, lustre.