Спецификация atapi
Для подключения к интерфейсу АТА накопителей CD-ROM, стримеров и ряда других устройств набора регистров и системы команд АТА оказывается недостаточно. Для них существует аппаратно-программный интерфейс ATAPI (ATA Package Interface — пакетный интерфейс АТА).
Устройство ATAPI поддерживает минимальный набор команд АТА, а также 16-байтный командный пакет, который пересылается хост-контроллером в регистр данных устройства. Структура командного пакета аналогична таковой для шины SCSI, что обеспечивает схожесть драйверов одних и тех же устройств, имеющих интерфейсы SCSI и ATAPI.
Классификация устройств совпадает с принятой в SCSI, информация о классе устройства размещается им самостоятельно в начале блока параметров идентификации.
Интерфейс ATAPI можно использовать с любыми адаптерами АТА, поскольку для контроллера поддержка ATAPI иногда выполняется чисто программными средствами. Специфические команды вместе с необходимыми параметрами передаются по команде Packet, код которой является недействительным для устройств АТА.
Шина Serial ATA
Спецификации последовательного интерфейса Serial ATA (SATА) версии 1.0 были опубликованы в августе 2001 г., а спецификация Serial ATA II— в октябре 2002 г. В настоящее время интерфейс SATА считается основным для подключения накопителей различных типов в современных платформах настольных ПК.
Стандарт SATА подразумевает последовательную передачу данных, а потому сигнальные линии задействуют всего две дифференциальные пары. Одна из них работает на передачу, а другая — на прием. Всего же в кабеле SATА допускается использование семи проводников, три из которых предназначены для заземления. Максимальная длина кабеля при этом составляет один метр.
По сравнению с традиционным параллельным интерфейсом ATА шина Serial ATA имеет большую помехозащищенность и мало восприимчива к электромагнитным помехам благодаря использованию низкоуровневых дифференциальных сигналов. Уровень сигнала измеряется не по отношению к “земле”, а по отношению к уровню сигнала в соседнем проводе, то есть как разница сигналов в двух проводниках. Любая наведенная помеха сказывается на обоих сигналах, однако их дифференциальная разница при этом не меняется.
На логическом уровне для передачи данных используется двухэтапное кодирование 8bit/10bit. При логическом кодировании 8b/10Ь каждые 8 бит исходной последовательности данных замещаются 10-битным кодом в соответствии с определенными правилами. В результате для 256 возможных комбинаций из 8 бит на входе получают 1024 возможные комбинации для 10 бит на выходе. При классическом подходе разрешенными из этих 1024 комбинаций считаются только 256, а остальные — запрещенными.
Такая избыточность используется для повышения помехоустойчивости кодирования.
Однако в протоколе SATA используется больше, чем 256 разрешенных комбинаций, за счет двухэтапного кодирования. При этом каждой входной последовательности может соответствовать несколько выходных, а какая именно выходная комбинация будет использована, зависит от контрольного сигнала rd, формируемого в процессе передачи.
При кодировании согласно протоколу SATA исходные 8 бит разбиваются на подгруппы длиной 5 бит и 3 бит. На первом этапе подгруппа 5 бит подвергается кодированию 5bit/6bit, то есть каждые 5 бит заменяются на 6 бит. На втором этапе оставшиеся 3 бита подвергаются кодированию 3bit/4bit. При кодировании каждой группы (сначала 5 бит, а потом оставшихся 3 бит) формируется специальный бинарный контрольный сигнал rd (Running Disparity), который может быть либо отрицательным (rd-), либо положительным (rd+). Кодирование 5bit/6bit для 32 возможных 5-битных комбинаций на входе обеспечивает 46 комбинаций по 6 бит на выходе.
Получают эти 46 комбинаций следующим образом: каждой из 32 возможных 5-битных комбинаций на входе ставятся в соответствие две 6-битные выходные последовательности: прямая и инверсная, за исключением тех 6-битных последовательностей, в которых количество единиц совпадает с количеством нулей — отсюда именно 46 возможных комбинаций на выходе.
При кодировании 3bit/4bit для 8 возможных 3-битных комбинаций на входе существует 14 возможных 4-битных комбинаций на выходе. Здесь также прямая или инверсная выходная последовательность определяется текущим значением контрольного сигнала rd. Если сигнал rd положителен, то используется прямая последовательность, а если отрицателен — то инверсная. При этом текущее значение сигнала rd определяется по предыдущей переданной последовательности из 6 или 4 бит.
Правило
для формирования сигнала rd
достаточно
простое. Сигнал положителен, если
количество единиц больше количества
нулей в группе закодированных бит.
Исключение составляют последовательности
с равным
количество нулей и единиц. Например,
для последовательностей 000111
(подгруппа 6 бит) и 0011 (подгруппа 4 бит)
сигнал считается положительным, а для
последовательностей 111000 и 1100 —
отрицательным. Во всех остальных случаях
сигнал rd
нейтрален
и не меняет своего состояния. Кроме
логического двухэтапного кодирования,
при передаче данных используется метод
циклического избыточного контроля
CRC-32 (Cyclic
Redundancy Check). На
физическом уровне используется код NRZ
(Non Return to Zero).
Другой особенностью интерфейса SATА является организация взаимодействия между контроллером и диском по принципу «точка-точка».
Напомним, что интерфейс ATА предусматривает подключение на один канал до двух устройств (Master и Slave); соответственно полоса пропускания 133 Мбайт/с разделяется между устройствами. В интерфейсе SATА к одному контроллеру можно подключить только один жесткий диск, поэтому каждому устройству стандарта SATА предоставляется вся полоса пропускания 150 Мбайт/с.
Спецификацией SATА предусмотрена поддержка технологии горячей замены дисков, то есть подключения и отключения устройств на работающей шине. Пока такая возможность не слишком актуальна для настольных платформ, но с развитием миниатюрных переносных жестких дисков она может быть востребована.
Развитием спецификации SATА стал интерфейс Serial ATA II, который поддерживают современные версии южных мостов НМСЛ ведущих производителей, например компаний Intel, nVidia, VIA и SiS. Явным отличием спецификации SATA II выглядит увеличение пропускной способности шины до 300 Мбайт/с. Однако спецификация имеет много внешне малозаметных улучшений, существенно влияющих на эффективность накопителей. Например, в спецификацию введены специальные мостыумножители, позволяющие подключать до 15 устройств на один канал SATА. Но главные усовершенствования связаны с оптимизацией очереди команд.
Жесткий диск, в отличие от чисто электронных компонентов компьютера, представляет собой электронно-механическое устройство. Наличие электромеханической части, имеющей гигантское, по «электронным» меркам, время реакции, обусловливает неизбежные задержки в поиске и передаче данных. В спецификации SATA II приняты меры по уменьшению задержек за счет изменения порядка выполнения команд, поддержанные средствами организации очередей команд.
Наиболее известный алгоритм минимизации задержек поиска (перемещения головок) и вращения называется Rotational Position Ordering (упорядочение по вращению). Используя этот алгоритм, накопитель может расположить команды обращения к магнитным носителям так, чтобы сократить время доступа до минимума. Первоначально использовались алгоритмы, минимизирующие расстояние, на которое перемещается головка, сокращая тем самым время поиска. Но при этом общее время доступа могло увеличиваться, поскольку после быстрого перемещения головки на нужную дорожку приходилось ждать почти полного оборота пластины для появления под головкой требуемого сектора. Алгоритм Rotational Position Ordering при выстраивании очереди команд учитывает оба фактора — дистанцию поиска и текущее положение головок на окружности пластин. В результате команды выполняются в таком порядке, чтобы сократить до минимума общее время доступа, включающее обе задержки — поиска и вращения. Именно этот алгоритм был положен в основу технологии Native Command Queuing (NCQ).
Жесткие диски SATA II могут не только выстраивать принятые команды наиболее оптимальным с точки зрения механических перемещений образом, но и динамически добавлять поступившие в процессе обработки команды в нужные позиции очереди. Перестановка ожидающих выполнения команд производится с учетом не только положения головок после выполнения последней команды, но и множества других факторов.
Для определения того, какая команда будет выполняться следующей, используются сложные алгоритмы, учитывающие переключение головок, времена поиска определенных дорожек, режимы работы (например, в режиме с пониженным уровнем шума последовательность может отличаться от обычного режима, поскольку здесь учитывается, что поиск должен создавать минимум шума). Принимаются во внимание такие параметры, как расстояние, на которое перемещаются головки, начальное положение и направление поиска, характеристики ускорения и замедления позиционера, различные времена установления головок на дорожке для чтения и записи, попадания и промахи в кэш-памяти при чтении, наличие кэширования записи и многие другие. Кроме того, применяются алгоритмы, предупреждающие «зависание» отдельных команд в очереди.
Другая составляющая технологии — уменьшение задержек вращения жесткого диска. Эффект достигается двумя методами. Первый — это перегруппировка ожидающих выполнения команд аналогично тому, как это делается для минимизации задержек поиска. Если накопитель выполняет команды в порядке их поступления, то в ситуации, когда сначала поступает команда чтения сектора А, затем В, а затем С, для выполнения всех трех команд потребуется примерно 1,5 оборота дисковых пластин.
Изменив же порядок выполнения команд так, чтобы после А считывался сектор С и только потом В, можно «уложиться» менее чем в один оборот и сократить общее время выполнения запроса более чем на треть.
Второй способ — это так называемый измененный порядок доставки данных (out-of-order data delivery). Это значит, что головка не обязательно должна начинать чтение (запись) с первого LBA-сектора запрошенного блока данных. Она может начать передачу с любого наиболее «удобного» для нее сектора, входящего в запрошенный блок, а недостающее начало блока передать в конце текущего оборота диска. Использование измененного порядка доставки позволяет в наихудшем случае затратить на передачу блока данных не более одного оборота пластины. Без него в наихудшем случае время передачи составит один оборот плюс время передачи всех входящих в блок секторов.
Для реализации изменения порядка следования команд необходима маркировка каждой команды, отличающая ее от других команд в очереди.
В NCQ для этого используется 5-битный тег, поэтому максимальное число команд в очереди не может превышать 32. Базой для реализации NCQ в рамках протокола Serial ATA стали три механизма: сообщения о статусе завершения команды без состязаний (race-free status return), агрегирования прерываний (interrupt aggregation) и прямого доступа к памяти по инициативе устройства (First Party DMA).
Механизм Race-Free Status Return позволяет устройству сообщать о статусе выполнения любой команды в любое время. Никаких специальных «переговоров» с хост-адаптером для посылки статусного сообщения не требуется. Накопитель может сообщать о завершении нескольких команд подряд или даже одновременно.
Механизм Interrupt Aggregation позволяет обрабатывать одно прерывание для нескольких команд. Обычный алгоритм общения накопителя с хост-адаптером предусматривает обработку прерывания каждый раз, когда завершается выполнение очередной команды. Чем больше прерываний, тем больше нагрузка на хост-адаптер и центральный процессор. При использовании NCQ среднее количество прерываний, генерируемых наодну команду, может быть меньше единицы. Если накопитель завершает несколько команд в течение короткого промежутка времени, отдельные прерывания могут объединяться (агрегироваться). Тогда хост-контроллеру достаточно обработать одно прерывание на несколько команд.
Механизм First Party DMA позволяет накопителю инициировать операцию прямого доступа к памяти для передачи данных без участия хост-контроллера и центрального процессора. Накопитель выбирает контекст ПДП, посылая хост-контроллеру так называемую DMA Setup FIS (Frame Information Structure, базовая единица обмена данными в протоколе Serial ATA). Эта FIS сообщает тег команды, для которой следует создать канал ПДП.
На основании значения тега хост-контроллер загружает в контроллер ПДП компьютера указатель на соответствующую этой команде PRD-таблицу (Physical Region Descriptor — структура, используемая для описания областей памяти, с которыми производится обмен данными), после чего передача данных происходит без вмешательства со стороны ЦП.
Именно благодаря этому механизму накопитель может эффективно реорганизовывать команды, поскольку место в памяти для обмена данными он выбирает по собственной инициативе. Получив команду, накопитель должен знать, исполнять ли ему ее немедленно или ставить в очередь. Он также должен знать, какой протокол передачи данных будет использоваться — NCQ, DMA, PIO и т. д. Эту информацию он получает, декодируя код операции команды.
В целом внедрение интерфейса Serial ATA позволило серьезно повысить эффективность подсистемы накопителей в настольных компьютерах и вывести ее на уровень, ранее характерный для профессиональных серверных решений. Например, использование RAID-массивов с дисками SAT А заметно улучшает производительность мультимедийных приложений, игр и других программ, требующих обработки больших объемов информации.
