Введение
Tagged Командная очередь (TCQ) — это технология, встроенная в некоторые жесткие диски ATA и SCSI. Она позволяет операционной системе отправлять на жесткий диск несколько одновременных запросов на чтение и запись. ATA TCQ не идентичен по функциональности более эффективной технологии Native Command Queuing (NCQ), используемой в дисках SATA. SCSI TCQ не имеет тех же ограничений, что и ATA TCQ. Без TCQ операционная система могла отправлять только один запрос за раз. Для повышения производительности ОС приходилось самостоятельно определять порядок обработки запросов, основываясь на своем, возможно, неверном представлении о текущей активности жесткого диска (это также известно как планирование операций ввода-вывода). С TCQ диск сам решает, в каком порядке выполнять запросы, тем самым освобождая операционную систему от этой задачи. Таким образом, TCQ может повысить общую производительность жесткого диска при правильной реализации.
Обзор
Для повышения эффективности секторы должны обслуживаться в порядке близости к текущему положению головки, а не в порядке поступления запросов. Очередь постоянно получает новые запросы, выполняет и удаляет существующие, а также переупорядочивает их в соответствии с текущими ожидающими запросами на чтение/запись и изменяющимся положением головки. Точный алгоритм переупорядочивания может зависеть от контроллера и самого накопителя, но хост-компьютер просто отправляет запросы по мере необходимости, оставляя обработку деталей контроллеру. Этот механизм очереди иногда называют "алгоритмом поиска лифтом", поскольку он хорошо иллюстрируется работой современного лифта в здании, обслуживающего несколько вызовов и обрабатывающего их для минимизации пути. Например, если нажать кнопки для 5-го, 2-го и 4-го этажей в таком порядке, а лифт начинает движение с 1-го этажа, старый лифт поедет по этажам в порядке поступления запросов. Современный лифт обработает запросы, чтобы остановиться на этажах в логическом порядке: 2-й, 4-й и 5-й, без лишних перемещений. Дисковые накопители без очереди обслуживают запросы в порядке их поступления, как старый лифт; накопители с очередью обслуживают запросы в наиболее эффективном порядке. Это может незначительно улучшить производительность в системе, используемой одним пользователем, но может значительно повысить производительность в системе с множеством пользователей, выполняющих разнообразные запросы к поверхности диска.
SCSI TCQ
SCSI TCQ была первой популярной версией TCQ и до сих пор широко используется. Она позволяет помещать задачи в очередь, используя один из трех различных режимов: Этот режим используется нечасто, поскольку при неправильном использовании он может привести к нехватке ресурсов. В упорядоченном режиме задача должна выполняться после завершения всех более ранних задач и перед началом выполнения всех более поздних задач (за исключением новых задач, добавленных в начало очереди). Однако различные протоколы, реализующие SCSI, могут не поддерживать использование всех 64 бит. Например, устаревший параллельный SCSI поддерживает 8 бит теговых битов, iSCSI – до 32 бит теговых битов, а Fibre Channel – до 16 бит теговых битов с зарезервированным тегом. Такая гибкость позволяет разработчикам протоколов находить компромисс между возможностями очереди и стоимостью. Большие сети, такие как сети iSCSI, выигрывают от большего количества теговых битов для работы с большим количеством дисков в сети и большими задержками, возникающими в таких сетях, в то время как сети меньшего масштаба, такие как параллельные цепочки SCSI, не имеют достаточного количества дисков или задержек, чтобы требовать много теговых битов, и могут сэкономить средства, используя систему с поддержкой меньшего количества битов.
ATA TCQ
ATA TCQ был разработан в попытке обеспечить дискам ATA те же преимущества, что и SCSI. Он доступен как в параллельном, так и в последовательном ATA. Эта попытка оказалась не очень удачной, поскольку шина ATA изначально была основана на шине ISA с уменьшенным количеством контактов. Требование программной совместимости вынуждало адаптеры шины хоста ATA функционировать как устройства шины ISA без использования DMA первого уровня. Когда диск был готов к передаче данных, он должен был прерывать процессор, ждать, пока процессор запросит у диска, какая команда готова к выполнению, отвечать командой, готовую к выполнению, ждать, пока процессор запрограммирует DMA-двигатель стороннего производителя в адаптере шины хоста на основе результата этой команды, ждать завершения выполнения команды DMA-двигателем стороннего производителя, а затем снова прерывать процессор, чтобы уведомить его об окончании задачи, чтобы процессор мог уведомить поток, запросивший задачу, о ее завершении. Поскольку обработка прерываний требует времени процессора, загрузка процессора быстро возрастала при включении ATA TCQ. Кроме того, из-за непредсказуемости времени обслуживания прерываний, диск иногда был готов к передаче данных, но не мог этого сделать, поскольку должен был ждать ответа процессора на прерывание, чтобы процессор знал, что ему необходимо запрограммировать DMA-двигатель стороннего производителя. Поэтому этот стандарт редко внедрялся, поскольку он вызывал высокую загрузку процессора без существенного улучшения производительности, оправдывающего это. Этот стандарт допускает до 32 одновременно выполняемых команд на устройство.
SATA NCQ
SATA NCQ – это современный стандарт, который значительно снижает количество необходимых прерываний ЦП по сравнению с ATA TCQ. Как и ATA TCQ, он поддерживает до 32 ожидающих выполнения команд на устройство, но был разработан с учетом возможности адаптеров шины SATA, не эмулирующих параллельное поведение ATA, для поддержки DMA первого уровня. Вместо прерывания ЦП перед выполнением задачи, чтобы заставить его программировать механизм DMA адаптера шины, жесткий диск сообщает адаптеру шины, какую команду необходимо выполнить, что приводит к программированию встроенного механизма DMA первого уровня адаптера шины с параметрами, включенными в команду, выбранную жестким диском при ее первоначальной выдаче, после чего механизм DMA перемещает данные, необходимые для выполнения команды. Для дальнейшего снижения нагрузки на прерывания, диск может задерживать отправку прерывания с сообщениями о завершении задачи, пока не накопит их достаточное количество для одновременной отправки, позволяя операционной системе одновременно уведомлять множество потоков о завершении их задач. Если после отправки такого прерывания завершается другая задача, адаптер шины может объединить сообщения о завершении, если первый набор сообщений еще не был отправлен в ЦП. Это позволяет конструкции прошивки жесткого диска балансировать между производительностью диска и загрузкой ЦП, определяя, когда задерживать, а когда отправлять сообщения о завершении.