Вкратце о технологии маршрутизации команд Serial ATA II NCQ (Native Command Queuing)

Автор: Lone
Дата: 09.06.2004
Все фото статьи

Введение


Нынешний год принес огромное количество новых технологий, призванных в конечном итоге повысить производительность компьютеров. Помимо традиционной оптимизации процессоров и повышения их тактовых частот (чем зачастую на протяжении многих лет и ограничивалось повышение производительности систем), на этот раз изменения ожидаются практически во всех модулях и компонентах ПК - от появления новых форм-факторов плат семейства BTX до внедрения шинного интерфейса PCI Express, памяти стандарта DDR2 и т.д.

Заметьте, фраза сформулирована мной как "ожидаются изменения". Хотелось бы вместо этого написать "ожидаются улучшения", да глядя на потуги внедрения не самой производительной (и уж тем более не самой дешевой) памяти DDR2 400 или, например, с непонятно за счет чего ожидаемого увеличения производительности графики при механической "пересадке" уже известных чипов на шину PCI Express 16x, пока язык не поворачивается выразиться именно так. Тем не менее, появление некоторых действительно революционных технологий в массовых устройствах ожидается совсем скоро.

Одна из них - Native Command Queuing (NCQ), или технология маршрутизации команд, реализована в виде дополнения к стандарту Serial ATA 1.0 и является неотъемлемой частью нового стандарта Serial ATA II. К сожалению, в настоящее время винчестеры и контроллеры, действительно поддерживающие NCQ, можно пересчитать по пальцам рук. Однако они, особенно, в связке с RAID 0, уже сейчас позволяют убедиться в значительном приросте производительности благодаря использованию NCQ. Что уж говорить о ближайших месяцах, когда на прилавках появятся массовые партии системных плат на чипсетах серий i915/i925 (Grantsdalte/Alderwood), которые, в случае использования в качестве южного моста чипа ICH6R обладают такой поддержкой по умолчанию. Словом, как не крути, сейчас - самое время разобраться с тем, что же на деле представляет из себя NCQ и действительно ли она необходима.

Впервые о технологии NCQ заговорили осенью 2002 года, когда в рамках осеннего IDF 2002 компания Seagate представила систему с винчестером Barracuda 7200.7 и PCI-Serial ATA хост-контроллером SATALink SiI 3512 от Silicon Image, поддерживающими спецификации Native Serial ATA и технологию DMA (Direct Memory Access). Чуть позже, в октябре 2002, на сайте инициативной группы Serial ATA Group появился документ "Serial ATA II: Extensions to Serial ATA 1.0 Specification" (Revision 1.0, 16-October-2002), описывающий финальную версию спецификаций Serial ATA II в виде дополнительных возможностей стандарта Serial ATA 1.0 с сохранением обратной совместимости.

Итак, в чем же суть технологии NCQ? В общих чертах, Native Command Queuing – это расширенный протокол команд Serial ATA, который позволяет нескольким различным приложениям обращаться с запросами ввода-вывода в одно и то же время. Накопители с поддержкой NCQ используют специальный буфер, внутри которого команды, стоящие в очереди, могут динамически перестраиваться в соответствии с положением считывающей головки и текущей загрузкой. Кроме того, NCQ описывает механизм, который позволяет сортировать команды, в то время как дисковый накопитель работает с данными другой команды. Таким образом, теоретически применение NCQ позволяет повысить общую производительность системы, когда приложения активно используют технологию асинхронных запросов ввода-вывода.

При использовании механизма NCQ контроллер анализирует запросы и оптимизирует очередность их выполнения таким образом, чтобы увеличить скорость передачи данных и минимизировать время поиска. Кроме того, контроллеры Native Serial ATA способны самостоятельно организовывать очереди запросов и выполнять их без вмешательства процессора. Механизм работы Serial ATA NCQ в общих чертах можно сравнить с организацией очереди команд интерфейса SCSI, но в отличие от 256-уровневой архитектуры в случае со SCSI поддерживает 32-уровневую глубину маршрутизации команд.

Небольшая оговорка (disclaimer) перед тем, как перейти к обсуждению вопроса: несмотря на то, что NCQ является общим расширением Serial ATA II и теоретически может когда-нибудь использоваться не только с жесткими дисками, в настоящее время мы все же по большому счету говорим об использовании этой функции в приложении исключительно к винчестерам. Поэтому, дабы не получалось "масло масляное", позвольте мне время от времени употреблять в тексте не только нейтральные определения вроде "устройство" или "привод", но также "винчестер" или "жесткий диск". По понятным причинам...

Механизм работы NCQ


Итак, рассмотрим механизм работы NCQ в первом приближении. Приведенный ниже слайд отражает главную суть идеи маршрутизации команд: возможность предоставлять жесткому диску доступ сразу к нескольким командам контроллера и перестраивать порядок их выполнения для достижения максимальной производительности.


Упрощенная блок-схема принципа маршрутизации команд (Command Queuing)

Как известно, основная часть времени, затрачиваемая приводом на выполнение команды, уходит на поиск сектора и позиционирование головок для подготовки к обмену необходимыми данными. Именно это "потерянное время" и используется приводом для выбора следующей, наиболее оптимальной в текущей ситуации команды, когда головки находятся в позиции, наиболее рациональной для считывания следующего сектора; именно за счет этого снижаются всевозможные задержки, присущие обычным винчестерам.

Пожалуй, самая прозрачная и понятная аналогия принципа маршрутизации команд просматривается при сравнении механизма NCQ с работой тривиального лифта. Пассажиры лифта "набиваются" в кабину на первом этаже по тому же принципу, что и команды в очередь запросов. Далее следует нажатие пассажирами кнопок, соответствующих интересующим их этажам (расстановка команд в оптимизированную очередь) – и поехали, лифт отвезет всех по самому оптимальному пути, этаж за этажом, и также оптимально соберет жителей с верхних этажей и доставит их вниз (головки винчестера, соответственно, совершат при выполнении очередных команд минимальный набор движений и здорово сэкономят время, затрачиваемое в обычных приводах на неупорядоченное позиционирование). Попробуйте переложить аналогию с лифтом на современные винчестеры без поддержки NCQ: можете себе только представить, сколько лишних километров в день "намотает" такой лифт, "позиционирующий" исключительно по одному жильцу, пока остальные ждут своей очереди...

На представленной выше схеме видно, что каждая поставленная в очередь команда ассоциируется со своим значением тэга (метки), который используется контроллером как в фазе обмена данными, так и в фазе завершения. При передаче данных привод передает хосту тэг соответствующей команды, после чего хост-контроллер определяется с операцией DMA, указывающей на соответствующий сектор хост-памяти для этой команды. Для завершения операции переноса данных привод также посылает ассоциированный с командой тэг. Использование механизма передачи тэгов позволяет контроллеру защитить память от попыток ошибочного доступа со стороны привода, плюс, четко определяться со статусной информацией о посылаемой команде и возможных сопутствующих ошибках.

NCQ с точки зрения PATA и SATA II


Возможно, для кого-то станет откровением, но протокол маршрутизации команд для параллельного интерфейса (Parallel ATA Queuing) был добавлен в спецификации ATA еще в 1997 году. Однако сам факт того, что он не получил за эти годы широкого распространения красноречиво говорит сам за себя: получаемый в результате эффект не оправдывает расходы на его реализацию. Достаточно упомянуть, что лишь одна компания (IBM) занималась поставками таких винчестеров.

Как известно, протокол Parallel ATA Queuing состоит из нескольких команд, включая Read DMA Queued (Ext), Write DMA Queued (Ext) и Service. Основным принципом Parallel ATA Queuing является разбивка процесса на две раздельные фазы: передачи команды и переноса данных. До начала процесса обмена данными в случае Parallel ATA маршрутизации команд, контроллер генерирует команду Service для определения очередности пересылки данных по каждой команде, затем контроллер устанавливает DMA для выбранной команды. Итого, в процессе оповещения контроллера о необходимости генерации команды Service возникает нужда в дополнительном прерывании на каждую операцию чтения/записи, плюс, приводит к неопределенным задержкам работы драйвера контроллера при передаче команды Service в случае неполной аппаратной поддержки протокола оборудованием. Собственно говоря, именно эти задержки и стали причиной неудовлетворительной производительности Parallel ATA Queuing и главным препятствием на пути его распространения.

В случае с протоколом Serial ATA II Native Command Queuing все обстоит совершенно по-другому. Начать с того, что введение поддержки NCQ не требует никаких изменений в базовом протоколе Serial ATA. При работе с NCQ используется структура FIS (Frame Information Structure) и примитивы, являющиеся стандартными для спецификаций Serial ATA 1.0.

При маршрутизации используются две новые команды: Read FPDMA Queued и Write FPDMA Queued, а в целом, для использования команд Serial ATA II NCQ со стандартными портами Serial ATA необходимо соблюсти лишь три простых требования:

Для обеспечения операций First Party DMA и оперативного завершения работы с каждой командой хост-контроллер системы в обязательном порядке должен поддерживать установки DMA Setup FIS и Set Device Bits FIS.
Драйверы системы должны обладать поддержкой команд Read FPDMA Queued и Write FPDMA Queued.
Разумеется, винчестер должен поддерживать протокол Serial ATA II NCQ.

На практике это выглядит так: драйвер автоматически определяет наличие поддержки Serial ATA II Native Command Queuing и обеспечивает приводу работу с командами FPDMA Queued. При этом появляется возможность беспрепятственного размещения в одной дисковой подсистеме жестких дисков с поддержкой NCQ и без, просто у приводов с поддержкой Serial ATA II NCQ имеются соответствующие флаги в таблице Identify Device.

Помимо того, что такие устройства поддерживают все команды протокола ATA/6, к ним добавляется возможность единовременной 32-уровневой маршрутизации команд, а рост производительности обеспечивается за счет применения race-free механизма возвращения статуса, агрегации (объединения) прерываний, а также благодаря использованию First Party DMA. Более глубокая маршрутизация для дальнейшего увеличения производительности возможна при использовании специальных хост- или RAID-контроллеров.

Теперь – подробности.

Подробный анализ работы механизма SATA II NCQ


Для организации работы Serial ATA II NCQ в установках регистров Set Device Bits FIS и DMA Setup FIS выделены специальные поля, определяющие специфические значения для поставленных в очередь, но еще не выполненных команд. При этом, Set Device Bits FIS используется для возвращения статуса и организации прерываний, а DMA Setup FIS применяется для активации механизма First Party DMA.

Установки Set Device Bits FIS пересылаются устройством на контроллер для обновления статусной информации, при этом, пересылка производится без учета состояния бита BSY в регистре Status хост-контроллера. Для поддержки Serial ATA II NCQ, как показано на схеме ниже, структуризация пакетов (FIS) видоизменена (по сравнению с базовыми требованиями SATA 1.0): теперь для поддержки расширений протокола в установках добавлены биты SActive, каждый из которых соответствует номеру тэга каждой из поставленных в очередь команд.

Завершение выполнения команды производится очень просто: накопитель генерирует Set Device Bits FIS с установленным в значение 1 битом соответствующего команде тэга в регистре SActive для каждой выполненной команды, при этом, посылкой Set Device Bits FIS жесткий диск может рапортовать о завершении выполнения сразу нескольких команд. Помимо этого, после передачи Set Device Bits FIS накопитель также устанавливает прерывание для хост-контроллера, благодаря чему драйвер контроллера имеет возможность завершить работу с этими командами (командой).


Структурная схема установок Device Bits FIS

Кстати упомянуть, условие о поддержке новыми винчестерами полной 32-уровневой глубины маршрутизации команд обязательным не является. Более чем уверен, что на первых порах внедрения этого механизма мы увидим не один винчестер с меньшей глубиной постановки команд в очередь (а у тестеров найдется лишний повод "попинать" тот или иной "шедевр").

Как это отразится на порядке размещения тэгов в таблице? Здесь срабатывает механизм идентификации привода: как было выше сказано, драйвер определяет количество возможных для маршрутизации команд посредством установок в Identify Device, там за этот параметр отвечает запись в 75 байте. При этом, если привод поддерживает менее 32 команд, идентифицируются только тэги со значащими записями числом не более поддерживаемых команд. К примеру, если винчестер поддерживает 16-уровневую глубину маршрутизации, используются исключительно тэги 0 - 15.

Для обеспечения работы механизма First Party DMA накопителем на контроллер пересылается управляющий пакет DMA Setup FIS, для этого также используется набор специальных тэгов (флагов). Вот как выглядят эти тэги:

TAG – поле TAG идентифицирует команду, в соответствии с которой производится обмен соответствующими ей данными. Контроллер использует эту информацию для установки значений механизма DMA. Биты, остающиеся неиспользованными в полях DMA Buffer Identifier Low/High, принимают значение zero (ноль).
A – то есть, бит Auto-Activate; отвечает за дополнительную оптимизацию протокола. Когда бит Auto-Activate принимает значение 1, у DMA Activate FIS отпадает надобность в немедленном следовании за указаниями DMA Setup FIS для поставленной в очередь команды записи.
D – Бит D (надо полагать, сокращение от "Direction") указывает направление переноса данных, что позволяет хост-адаптеру четко идентифицировать и однозначно различать между собой команды считывания и записи.
DMA Transfer Count – поле DMA Transfer Count определяет количество байтов в каждом пакете передаваемых данных.

После приема данных FIS хост-контроллер определяет для модуля DMA расположение команды с соответствующим тэгом в таблице дескрипторов (Scatter/Gather List), как показано на схеме ниже. Стоит также упомянуть, что при этом, благодаря прямой аппаратной организации управления процессом обработки данных FIS, использование промежуточных прерываний не требуется.


Структура DMA Setup FIS

Теперь рассмотрим механизм работы регистра SActive и принцип его использования. SActive, являющийся одним из элементов массива регистров управления, определения статуса и ошибок, описанных в спецификациях Serial ATA, используется для отслеживания статуса завершения поставленных в очередь команд. На схеме ниже приведена структура 32-битного регистра.


Структура регистра SActive

Основная задача регистра SActive – предоставлять по запросу драйвера контроллера данные о том, что выполнение определенной команды уже закончено. Первоначальные установки значений битов регистра SActive производятся драйвером хост-контроллера, который, перед отправкой винчестеру поставленной в очередь команды, устанавливает бит, соответствующий тэгу этой команды.

Для того, чтобы гарантировано исключить возникновение ненормальных критических ситуаций с наложением времени, отведенного на выполнение каждой команды, применяется следующий механизм работы с регистром SActive. После завершения выполнения команды в соответствии с установками Set Device Bits FIS в регистре SActive происходит очистка битов, соответствующих тэгу этой команды. Привод производит установки битов SActive в соответствии c Set Device Bits FIS. В момент получения Set Device Bits FIS от привода контроллер производит очистку битов SActive, соответствующих установленным в Set Device Bits FIS.

Сообщение о присвоении команде статуса выполненной производится приводом, посредством пересылки контроллеру установок Set Device Bits FIS, что в результате приводит к генерации прерывания и позволяет драйверу контроллера закончить работу с этой командой. Именно в этот момент контроллер опрашивает регистр SActive для утверждения выполненного статуса команды.

Для того, чтобы принцип работы регистра SActive стал более понятен, приведем несколько примеров того, как поля битов соотносятся со статусом поставленной в очередь команды:

Установка бита с адресом 0 в значение 1 сообщает, что обработка команды с тэгом 0 еще не завершена
Установка бита с адресом 16 в значение 1 сообщает, что обработка команды с тэгом 16 еще не завершена
Установка бита с адресом 16 в значение 0 сообщает, что обработка команды с тэгом 16 уже закончена (при условии, что перед этим бит был предварительно установлен в значение 1)

Теперь перейдем к определению функциональной нагрузки специфических команд, используемых исключительно при работе с Serial ATA II NCQ.

Команда Read FPDMA Queued используется для организации считывания данных из соответствующей области хост-памяти. Команда поддерживает исключительно режим LBA и использует 48-битный формат данных. Стоит также отметить, что регистр Sector Count, как указано в таблице ниже, содержит номер тэга, присвоенный ему драйвером привода.

Формат команды Read FPDMA Queued выглядит следующим образом:


Формат команды Write FPDMA Queued:



Практическая пошаговая работа механизма Serial ATA II NCQ


До начала работы с SATA II NCQ устройствами драйвер контроллера должен выполнить несколько обязательных шагов для подготовки к маршрутизации команд и идентификации винчестера как устройства с поддержкой NCQ. Первым делом хост инициирует команду Identify Device, и в случае поддержки устройством протокола SATA II NCQ определяется с глубиной очередности команд, поддерживаемой приводом.

Далее драйвер контроллера прописывает в регистрах Queuing Table Base Address физический адрес начала массива FPDMA Vector Table в хост-памяти, плюс, распределяет пространство памяти с помощью FPDMA Vector Table и соответствующей таблицы PRD под максимально поддерживаемое приводом количество маршрутизируемых команд (до 32).

Далее, командой Set Features драйвер хоста сообщает приводу о том, что контроллер поддерживает возможность автоматической активации модуля First Party DMA для поставленных в очередь команд записи.

Как уже было сказано выше, принцип полностью автоматизированного аппаратного обеспечения работы с хост-памятью обеспечивается за счет программирования контроллером модуля First Party DMA, с помощью пересылки установок DMA Setup FIS (см. таблицу ниже). Использование механизма First Party DMA позволяет приводу оперативно управлять процессом подготовки к переносу данных, так как именно привод лучше всех "знает" текущее позиционирование головок и имеет возможность выбора следующей, наиболее оптимальной в этой ситуации команды для сокращения потерь времени на поиск и переходы между дорожками.


Принцип работы модуля First Party DMA

Массив данных FPDMA (FPDMA Vector Table) устанавливается контроллером в резидентной (non-paged) памяти и обладает 32 записями (по числу поставленных в очередь команд), каждая из которых соответствует номеру присвоенного команде тэга. Каждая запись массива содержит физический адрес соответствующего сегмента в таблице дескрипторов Scatter/Gather List (PRD Table) для каждой команды с соответствующим ассоциированным с ней тэгом. В свою очередь, таблица Scatter/Gather List описывает участки хост-памяти, из которых/в которые производится перенос данных при выполнении соответствующей очередной команды.

Последовательность работы тут следующая: драйвер хоста прописывает в регистре Queuing Table Base Address контроллера физический адрес начала массива FPDMA Vector Table, при этом драйвер хоста еще до передачи команды приводу должен позаботиться о регистрации команды в таблице PRD, а также определиться с выбором адресного пространства для этой команды с регистрацией записи в FPDMA Vector Table. Затем, по получению от винчестера данных DMA Setup FIS, контроллер использует запись в поле TAG в качестве индекса массива FPDMA Vector Table. Далее контроллер устанавливает указатель PRD модуля DMA на значение, определенное в FPDMA Vector Table, а также, используя значение бита D в установках DMA Setup FIS, определяет направление переноса данных (считывание/запись).

Заключительным этапом обработки команды в случае использования протокола Serial ATA II NCQ, как уже было описано выше, является процедура завершения с помощью данных регистра SActive, при этом, значения битов SActive устанавливаются хостом, а очищаются накопителем, с использованием данных Set Device Bits FIS.

Теперь просуммируем все вышесказанное о процессе взаимодействия контроллера и привода, проиллюстрировав информацию краткой табличкой. Вот так выглядит процедура взаимодействия контроллера и привода при обработке команды чтения - Read FPDMA Queued.


Такие дела. Остается лишь упомянуть, что после передачи команды драйвер хоста не участвует в процессе передачи данных до завершения обработки команды.

Теперь рассмотрим конкретный пример, когда команды чтения выполняются в оптимизированной очередности, отличной от порядка их поступления. Для примера возьмем первую команду с тэгом Tag=0 и шестую команду с тэгом Tag=5. Допустим, более оптимальным оказывается вариант, когда команды меняются местами и следуют друг за другом. В такой ситуации события развиваются следующим образом.


Передача команды Read FPDMA Queued с тэгом Tag=0

Контроллер отправляет команду Read FPDMA Queued с тэгом Tag=0, при этом нулевой бит регистра SActive хоста устанавливается в значение 1.
Команда чтения с помощью установок регистра FIS передается приводу, при этом в регистре Status контроллера принимается значение BSY=1, что подразумевает запрет на обработку новых команд. Далее, после приема команды, устройство производит очистку бита BSY.

При передаче контроллером команды Read FPDMA Queued с тэгом Tag=5 пятый бит регистра SActive хоста устанавливается в значение 1, команда передается устройству посредством установок в регистре FIS. Регистр Status контроллер принимает значение BSY=1, что подразумевает запрет на обработку новых команд. Далее, после приема команды, устройство производит очистку бита BSY путем передачи хосту установок регистра FIS. Наконец, устройство пересылает DMA Setup FIS с тэгом Tag=5.


Чтение команды Read FPDMA Queued с тэгом Tag=5

Далее процесс переходит в фазу передачи данных, соответствующих команде с тэгом Tag=5: указатель PRD, соответствующий тэгу Tag=5, загружается в контроллер DMA, винчестер посылает данные Data FIS, соответствующие тэгу Tag=5, контроллер DMA направляет входящие данные в область памяти, выделенную для команды с тэгом Tag=5. Привод пересылает установки Set Device Bits FIS с установленным битом I (interrupt, прерывания), а также с пятым битом регистра SActive, установленным в значение 1 и означающим завершение выполнения команды с тэгом Tag=5. Все, с исполнением этой команды покончено, пятый бит регистра SActive хоста очищается, генерируется прерывание.


Передача данных и завершение выполнения команды Read FPDMA Queued
с тэгом Tag=5

Итого, пока что невыполненной осталась передача данных команды с тэгом Tag=0. Работа возобновляется с места, на котором остановился прерванный процесс: привод отсылает хосту DMA Setup FIS с тэгом Tag=0, указатель PRD, соответствующий тэгу Tag=0, загружается в контроллер DMA, винчестер посылает данные Data FIS, соответствующие тэгу Tag=0, контроллер DMA направляет входящие данные в соответствующую область памяти; далее привод пересылает установки Set Device Bits FIS с установленным битом I (interrupt, прерывания), а также с нулевым битом регистра SActive, установленным в значение 1 и означающим завершение выполнения команды с тэгом Tag=0, исполнение команды заканчивается очисткой нулевого бита регистра SActive и генерацией прерывания.


Передача данных и завершение выполнения команды Read FPDMA Queued
с тэгом Tag=0

Как уже было сказано выше, для повышения эффективности режима NCQ может применяться механизм агрегации прерываний. В случае, если очистка бита в регистре SActive, соответствующего предыдущей команде не произведена, контроллер произведет процедуру завершения выполнения сразу для двух команд.

Последний вопрос, который следует осветить для понимания механизма NCQ – это ситуации с возникновением ошибок. В случае, когда обнаружена ошибка, но хост установил значение бита BSY в регистре Status, устройство посылает контроллеру данные регистра FIS с битом ERR, установленным в значение 1 и соответствующими установками регистра Error, а бит BSY при этом обнуляется. В ситуации, когда ошибка возникла до установки значения BSY регистра Status, привод также передает хосту установки Set Device Bits FIS с битом ERR, имеющим значение 1 и данные регистра Error с соответствующими установками. Далее устройство ожидает получения команды Read Log Ext с записью 10h, после чего винчестер прерывает процесс работы с очередью необработанных команд и выполняет очистку регистров, а затем возвращает подробную информацию об ошибке, включая значение тэга команды, на выполнении которой произошел сбой. Привод также очищает все биты регистра SActive посредством пересылки хосту установок Set Device Bits FIS со всеми битами SActive, установленными в значение 1. После этого контроллер может начинать повторную обработку всей очереди прерванных команд. Впрочем, устройство также может прекратить ожидание получения команды Read Log Ext - в случае, если получена команда перезагрузки.

Перспективы


Несмотря на то, что окончательные спецификации Serial ATA II NCQ были приняты еще в прошлом году, а "чистовые" спецификации ACPI 1.0 были опубликованы Intel в апреле 2004, инкубационный период внедрения поддержки технологии маршрутизации команд затянулся до нынешнего лета. Ни для кого не является секретом тот факт, что "локомотив" инициативной группы по продвижению Serial ATA II NCQ компания Intel представит свои первые массовые продукты для настольных ПК с поддержкой маршрутизации команд - наборы логики Grantsdale/Alderwood, лишь в конце июня. Думаю, что уже в июле-августе можно ожидать первый наплыв системных плат и накопителей с поддержкой NCQ, тогда то и начнут появляться в массовом порядке результаты измерения эффективности применения этой технологии.

Что касается текущей ситуации, то среди контроллеров, поддерживающих полные спецификации SATA II Native Command Queuing, сейчас можно назвать целый список изделий под серверную шину PCI-X. Среди них – чип Intel 31244 (GD31244, 256-контактный корпус TE-PBGA габаритами 17 x 17 мм, 128 КБ встроенного флэша под firmware), предназначенный, прежде всего, для секторов встроенных и внешних накопителей, NAS, а также выпуска PCI-X адаптеров и RAID систем. Контроллер поддерживает четыре порта SATA с независимым DMA каналом для каждого, совместим с шинными спецификациями PCI-X 1.0a, что позволяет выполнять на его основе контроллеры с поддержкой 64-битных 133/100/66 МГц шин PCI-X с пиковой пропускной производительностью до 1064 МБ/с.

В случаях, когда требуется наиболее высокая производительность, например, в RAID системах или при передаче потокового видео, контроллер может быть сконфигурирован для одновременного обмена данными по всем четырем SATA портам в режиме Direct Port Access (DPA). Для построения RAID систем чип может использоваться с I/O процессором Intel IOP321.

Еще один схожий вариант с поддержкой Serial ATA II NCQ – 4-портовый контроллер AT78C5051 от компании Atmel, поддерживающий 64-шину 133 МГц PCI-X и скорости обмена с Serial ATA устройствами до 3.0 Гб/с. Чип поставляется в различных видах корпусировки, в зависимости от пожеланий заказчика.

Нельзя обойти вниманием семейство контроллерных чипов 88SX6041/88SX6081 от компании Marvell, представляющих собой, соответственно, 4- и 8-портовые решения с поддержкой 133 МГц шины PCI-X и спецификаций Serial ATA II с соответствующей скоростью обмена данными до 3 Гб/с. Чипы 88SX6041/88SX6081 разработаны для применения в системах хранения данных класса предприятия, серверах и рабочих станциях с серьезными дисковыми подсистемами, встраиваемых системах. Для достижения оптимальной гибкости и производительности чипы 88SX6041/88SX6081 поддерживают как спецификации Serial ATA II NCQ, так и Serial ATA I/ATA-6 Tag Command Queuing.

Еще один контроллер - SiI 3124 от Silicon Image, выполнен на базе своего достаточно успешного предшественника SiI 3114. Контроллер поддерживает до четырех портов Serial ATA, при этом, версия SiI 3124-1 предназначена для работы с первым поколением дисков SATA (до 1.5 Гб/с на порт), в то время как SiI 3124-2 более универсален и совместим в новым поколением SATA II дисков (до 3 Гб/с).

Из наиболее известных на данный момент винчестеров, поддерживающих NCQ, можно назвать серию Barracuda 7200.7 SATA от компании Seagate Technology, продажи которых начинаются в июне 2004. Модели Barracuda 7200.7 SATA обладают 8 МБ буфером и плотностью записи 100 ГБ на 3,5-дюймовую пластину, при этом применение современных записывающих головок и магнитных пластин позволило довести емкость самого крупного накопителя серии до 200 ГБ при наличии всего двух пластин.

Другим интересным решением с поддержкой NCQ можно назвать представленную в январе 2004 года серию 2,5-дюймовых Serial ATA винчестеров MHT20xxBH от Fujitsu емкостью от 40 до 80 ГБ. Накопители выполнены на базе одночипового контроллера Marvell 88i6535, совмещающего в себе ядро 88C6591, обвязку Serial ATA PHY второго поколения и микропроцессорное ядро ARM966E-S. Особенность контроллера от Marvell заключается в том, его применение позволяет отказаться от использования в жестких дисках всевозможных мостов для поддержки SATA II, включая Native Command Queuing (NCQ), плюс, теоретически поддерживать скорость обмена данными до 3 ГБ/с.

Полагаю, что ближе к анонсу нового поколения настольной платформы Intel мы станем свидетелями многочисленных анонсов новых винчестеров и контроллеров с поддержкой NCQ, благо, трудно сейчас припомнить хоть одного серьезного игрока этого сектора, который бы не высказывался о подготовке к этому. Надеюсь, что вышеизложенное краткое описание технологии маршрутизации команд позволит читателю встретить новинки с лучшим пониманием сути перемен.

Терминология


DMA (Direct Memory Access) - термин означает процесс передачи данных между устройством и хост-памятью без вмешательства хост-процессора.

DPA (Direct Port Access) – процесс, при котором доступ к каждому порту Serial ATA осуществляется независимом режиме, что позволяет организовать одновременную передачу данных по всем портам.

FIS (Frame Information Structure, регистр FIS) – структура пакетов передаваемых данных (без учета разделителей SOF, CRC и EOF).

FPDMA (First Party DMA) – принцип организации системы накопитель – хост-память, позволяющий хост-контроллеру выбирать подходящую область в хост-памяти для чтения/записи поставленных в очередь команд. Используя данные регистра DMA Setup FIS, привод передает тэг очередной команды, что позволяет определить, какие данные будут считаны/записаны следующими. При получении данных DMA Setup FIS хост-контроллер активизирует модуль DMA с соответствующей таблицей PRD для поставленных в очередь команд с указанным тэгом.

Frame (фрейм) – блок информации (данных), обмен которой производится между хост-контроллером и приводом. Фрейм состоит из примитива SOF (Start of frame), информационного модуля FIS (Frame Information Structure), просчитанного по содержанию FIS блока CRC и, наконец, примитива EOF (End of Frame).

HBA (Host Bus Adapter) - устройство, позволяющее подключать приводы к хост-системе через слоты расширения. Как правило, под Host Bus Adapter подразумевают периферийные контроллеры, или хост-контроллеры.

PRD (Physical Region Descriptor) – структура данных, соответствующая спецификациям стандарта SFF 8038i и используемая модулем DMA для описания областей памяти, в которых производится считывание/запись данных; своеобразный инициирующий список сортировки поступающих/отправляемых данных (Scatter/Gather List).

Scatter/Gather List – таблица дескрипторов, каждый из которых определяет расположение и длину одного сегмента из общего списка запросов на чтение/запись. Таблица (лист) используется DMA для переноса данных, записанных в несмежные (не расположенные рядом) области памяти.

Литература по теме


Intel 31244 PCI-X to Serial ATA Controller Developer's Manual
Serial ATA 1.0a Specification
Serial ATA II: Extensions to Serial ATA 1.0 Specification
Serial ATA background white papers and technical briefs
ATA/ATAPI 6 Specification
Intel и Seagate Serial ATA Native Command Queuing: An Exciting New Performance Feature for Serial ATA
Serial ATA II Native Command Queuing Protocol Overview