TopТехнический словарьNCQ (Native Command Queuing) – нативная очередь команд

NCQ (Native Command Queuing) – нативная очередь команд

NCQ является расширением программного обеспечения SATA, состоящее из очереди задач записи/чтения таким способом, чтобы повысить эффективность (число операций I/O на секунду), как дисков HDD, так и SSD.

 

В традиционных жестких дисках (HDD) осуществляется буферизация до 32 команд и и их порядок отбора так, чтобы диск сделал работу с минимальным числом оборотов пластин и движений головки. Это позволяет сократить время, необходимое для проведения операции I/O и замедляет старение электромеханических элементов диска.

 

Рис.1 Выполнение операции чтения/записи дисками: (а) без NCQ, (б) с NCQ

 

Показанный на рис.1 диск выполнит операцию I/O: (а). без поддержки NCQ в порядке от А доF, выполняя при этом 3,5 поворотных круга вращения,(б). с поддержкой NCQ - в порядке C → A → B → D → F → E меньше, чем 2 поворотных кругов вращения.

 

NCQ являются развитием идеи очереди, содержащиеся в технологии TCQ (Tagged Command Queuing) примененной первоначально в дисках SCSI, а затем реализованных в дисках ATA и частично в SATA-I. Отличается от прототипа прежде всего количеством одновременно обработанных операций I/O и тем, что NCQ позволяет выпуск следующей команды через хост во время работы HDD над другой задачей.
Нативная очередь команд была введена с появлением дисков с интерфейсом SATA-II (в последствии реализована в части дисков SATA-I).

 

За функциональность NCQ отвечают три основных протокола:

- Механизм обратной связи о состоянии процесса (Status Return Mechanism) – fэта функция позволяет самостоятельно передавать информацию о завершении любой ( одной или более) запланированных задач I/O. Хост не информирован о начале процесса обработки I/O, а только о его завершении.

- Ограничение числа прерываний до максимум одного из планового задания I/O (Interrupt Aggregation) –хост должен быть проинформирован о завершении каждой выполненной команды I/O. Задачи, связанные с данными, содержащимися физически близко друг от друга на диске сгруппированы и надлежащим образом поставлены в очередь. Это приводит к ситуации, в которой несколько команд I/O заканчиваются в то же время или в течение короткого промежутка времени. Таким образом, можно отправить информацию о завершении, например, всех 32 операций в одном 64-битовом пакете вместо 64 пакетов, как это было бы без NCQ. В SATA-I и в ATA требовалось два прерывания на каждую с выполненных операций I/O (один о начале исходной команды, а другой о ее окончании).

- Механизм непосредственного доступа до операционной памяти (First Party DMA – FPDMA) – NCQ разработан таким образом, чтобы HDD мог выбрать, какие задачи, связанные с передачей данных будут выполняться следующими. Диск посылает Тэг/идентификатор команды I/O для контроллера памяти хоста. Этим делает бронирование места на кэшированные данные непосредственно в операционной памяти. Таким образом, диск способен эффективно изменить порядок выполнения команды, так как он может блокировать место для буфера без участия хозяина программного обеспечения.

 

В интерфейсе SATA-III введено ряд изменений в работе NCQ. Улучшено управление очередью и добавлены команды, связанные с более качественным обслуживание потоковых мультимедиальных контентов, позволяя хосту на передачу информации, которые операции будут и должны быть остановлены, а которых приоритет должен быть увеличен. В результате этого, наблюдается общее улучшение производительности системы, а не только увеличение количества выполняемых диском операций I/O на секунду.
Используется также изохронная передача данных, таким образом позволяя гладкую передачу для применений, требующих высокой пропускной способности (аудио/видео) и параллельно выполняя передачи заданий с более низким приоритетом.

 

NCQ реализованное в интерфейсе SATA-II могло также повлиять негативно на работу некоторых запланированных задач I/O, Что приводит к падению производительности операционной системы. Этот алгоритм не имеет фиксированного времени для выполнения отдельных операций I/O. Также число сдвигов конкретной планируемой задачи I/O на конец очереди, не было организовано. Выполнение одной команды I/O могло быть отложено во времени для более новых вопросов, что приводит к, так называемому, процессу голодания.
Такая ситуация наблюдалась в операционной системе LINUX с дисковой матрицей RAID-5. W trakcie przeprowadzonego testu zadanie o niższym priorytecie zostało wykonane po upływie 57 118 ms (z wyłączonym NCQ po 2 021 ms). В ходе испытания, задача с более низким приоритетом была принята после 57118 мс ( с выключенным NCQ после2,021 мс). В 2008 году Google Inc. провело собственные испытания, которые показали, что при специфических обстоятельствах выполнение некоторых запланированных I/O может опоздать даже до 2 с(независимо от операционной системы).
Вышеуказанные проблемы были решены с появлением интерфейса SATA-III – путем добавления до управления очередью подпрограммы "Deadline Handling", который контролирует время ожидания для операции I/O с самым низким приоритетом.

 

Из-за конструкции дисков SSD (многие микросхемы памяти типа NAND соединенных с одним конроллером без каких-либо механических деталей), задачи NCQ выполняются иначе - через так называемую глубокую очередь. Она основывается на группировке через контроллер запланированных задач I/O и исполнения их одновременно на многих микросхемах памяти NAND.

 

NCQ может обслуживаться только в случае сотрудничества HDD/SSD с контроллером дисков, поддерживающего эту технологию.