TCQ
Tagged Command Queuing (TCQ) («установка очерёдности маркированных команд») — технология, применяемая в некоторых ATA и SCSI жестких дисках. Данная технология позволяет операционной системе посылать множество запросов жесткому диску на запись и чтение. По своему действию ATA TCQ отличается от более эффективной технологии NCQ, используемой в SATA-дисках[1]. Но SCSI TCQ не страдает от тех же самых ограничений как ATA TCQ.
До изобретения TCQ операционная система была способна посылать лишь один запрос за раз. Для повышения производительности данная технология должна упорядочивать запросы, исходя из собственных соображений о действиях жесткого диска. С применением TCQ диск может принимать собственные решения по поводу того, как именно упорядочивать запросы (что в свою очередь должно избавить операционную систему от этой нагрузки). В итоге, TCQ может повышать общую производительность жесткого диска при корректной реализации технологии.
Обзор
Для повышения эффективности секторы должны обрабатываться в порядке близости расположения к текущему положению головки, то есть в первую очередь обрабатываются запросы из наиболее близких секторов, а в последнюю — из дальних. Очередь постоянно пополняется новыми запросами, а выполненные запросы удаляются, причём переопределение очереди происходит в соответствии с уже запланированными запросами чтения/записи и изменениями положения головки. Точный алгоритм упорядочивания может зависеть от контроллера и самого диска, а сам компьютер при этом только лишь посылает запросы при необходимости, оставляя детали выполнения на усмотрение контроллера.
Такой механизм очереди иногда упоминается как «лифтовый поиск», благодаря сходству с тем, как современные лифты движутся в зданиях, реагируя на множество вызовов и обрабатывая их для минимизации перемещений, что довольно наглядно иллюстрирует данную идею.
Если кнопки для этажей 5, 2 и 4 будут нажаты в указанном порядке, а лифт поднимается с первого этажа, то старый лифт будет перемещаться по этажам в том порядке, в каком пришли запросы. Современный же лифт обработает и упорядочит запросы, чтобы останавливаться на этажах в логическом порядке 2, 4 и 5 без лишних перемещений. Диски без применения очередей выполняют запросы в порядке их получения, как старые лифты из примера выше. Диски с поддержкой очередей выполняют запросы в наиболее эффективном порядке. Это позволяет несколько улучшить производительность в системах с одним пользователем, но наибольший эффект от применения этой технологии достигается в системах, с которыми одновременно работает несколько пользователей, посылающих запросы, суммарно адресуемые всей поверхности диска.
Сравнение SCSI TCQ, ATA TCQ и SATA NCQ
SCSI TCQ
SCSI TCQ — первая наиболее популярная версия TCQ, причём продолжающая оставаться популярной и сегодня. Она позволяет упорядочивать задачи в очередь, используя один из трех различных способов[2]:
- в начало очереди
- упорядоченно
- просто
В режиме в начало очереди, который применяется исключительно в SCSI TCQ, задача помещается в начало очереди, опережая все прочие задачи, включая ранее запланированные задачи предыдущего начала очереди[2].[1][3]. Этот режим не слишком используется, так как может вызвать нехватку данных при каких-либо отклонениях.
В упорядоченном режиме задача должна выполняться сразу после всех предыдущих задач и перед всеми более новыми, исключая только более новые задачи начала очереди[2].
Простой режим позволяет выполнять задачи в любом порядке, не нарушающем правил и ограничений задач, связанных с двумя предыдущими режимами[2]. После выполнения команды в задаче устройством отсылается адаптеру главной шины (host bus adapter) уведомление о завершении команды[2]. Так или иначе, SCSI TCQ приводит к использованию больших накладных расходов при использовании прерываний в зависимости от шины, связывающей с корневым адаптером шины SCSI. Для PCI, PCI-X, PCI Express и других шин, допускающих это, использование DMA позволяет этого избежать за счет снижения нагрузки. Устаревшая шина ISA требует наличия SCSI-адаптера для генерации прерываний для доступа к процессору, чтобы сторонние DMA-контроллеры могли выполнить передачу, а затем требуется еще одно прерывание для уведомления процессора о том, что задача в очереди выполнена[1], вызывая тем самым довольно большую нагрузку на центральный процессор.
Длина тега в SCSI TCQ
Протокол SCSI-3 отводит 64 бита на использование в качестве поля для метки (тега), позволяя умещать до 264 задач в одном наборе для передачи, указывая, что некоторые из команд должны быть завершены перед передачей последующих команд[2]. Однако, различные протоколы, реализованные в рамках SCSI-прокола, могут не позволить использование всех 64 битов. Например, устаревший параллельный вариант SCSI допускает использование лишь 8 бит для меток (тегов), iSCSI позволяет использовать до 32 бит, а Fibre Channel предусматривает использование до 16 бит для тегов с зарезервированым тегом 0xFFFF. Подобная гибкость позволяет проектировщику протокола находить компромисс между способностью обрабатывать очереди и «ценой». Сети, способные достигать крупных размеров, как например, iSCSI-сети, преимущества от большего числа битов для меток хорошо сочетается с большим числом дисков в сети и большими задержками, вызванных подобными размерами сетей, в то время как более мелкие сети, как например, параллельные цепочки SCSI, не обладают достаточным количеством дисков или задержками чтобы нуждаться в большом количестве битов для меток и позволяют экономить за счёт использования систем с поддержкой меньшего числа битов (они, как правило проще в реализации, а значит и дешевле, либо это устаревшие системы).
ATA TCQ
ATA TCQ был разработан в попытке привнести преимущества SCSI в жесткие диски стандарта ATA. Технология существует как для обычного (параллельного) так и для Serial ATA.
Эта затея не увенчалась успехом, так как ATA-шина представляла собой вариант ISA-шины с уменьшенным количеством штырьков. Требование программной совместимости сделали ATA-адаптеры весьма схожими с устройствами для ISA-шины без поддержки Bus mastering. Когда привод готов к передаче данных, он должен послать сигнал прерывания в ЦП, подождать пока процессор «спросит» диск, какую именно команду он готов выполнить, ответить, что он готов её выполнить, подождать, пока процессор запрограммирует адаптер шины для контроля через опосредованный DMA исходя из результатов предыдущей команды, подождать, пока контроллер опосредованного DMA выполнит команду, а затем должен вновь отослать сигнал прерывания процессору, дабы уведомить его, когда DMA-контроллер завершит выполнение задачи, чтобы процессор мог уведомить поток о том, что запрошенная задача была выполнена.[1]. Так как ответы на сигналы прерывания приводят к слишком высоким накладным расходам, коэффициент использования процессора при включенном ATA TCQ быстро растет[1]. Кроме того, так как время обработки сигнала прерывания заранее предсказать невозможно, то бывают ситуации, когда диск готов передавать данные, но передать их не может из-за того, что ему необходимо дождаться ответа процессора на сигнал прерывания, так как именно он отвечает за настройку опосредованного DMA[1].
Поэтому данный стандарт крайне редко реализуется из-за высокой нагрузки на ЦП, причём без ощутимого улучшения производительности, ради чего все это имело бы смысл[1]. Данный стандарт предусматривает до 32 необработанных команд на одно устройство[3].
SATA NCQ
SATA NCQ — новый стандарт, не требующий сигналов прерываний ЦП. Как и ATA TCQ, он предусматривает до 32 необработанных команд на устройство[1], но он был спроектирован с расчетом на возможности адаптеров SATA без эмуляции работы параллельного ATA при поддержке прямого DMA[1]. Вместо сигналов прерывания используется следующая схема: перед тем, как задание принуждает ЦП программировать DMA-адаптер, жесткий диск сообщает адаптеру, какую именно команду он хочет выполнить, в результате чего адаптер программирует свой встроенный DMA-контроллер в соответствии с параметрами, указанными в команде, выбранной жестким диском ранее, затем DMA-контроллер передает данные, необходимые для выполнения команды[1]. Для последующего снижения накладных расходов прерываний диск может задерживать сигналы прерываний с сигналами завершения задачи, пока их не наберется некоторое количество для их совместной отсылки, тем самым позволяя ЦП уведомлять множество потоков за раз о том, что их задачи выполнены[1]. Если завершается еще одна задача после подобной отсылки сигнала прерывания, то адаптер может скорректировать сообщения о завершении в случае, если они не были отправлены процессору[1]. Это позволяет микропрограмме жесткого диска искать компромисс между производительностью диска и нагрузкой на ЦП за счет определения момента, когда нужно воздержаться, а когда отсылать сообщения о завершении[1].
См. также
Примечания
- ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 Dees, Brian. Native command queuing - advanced performance in desktop storage (англ.) // IEEE Potentials : journal. — 2005. — November/December (vol. 24, no. 4). — P. 4—7. — doi:10.1109/MP.2005.1549750.
- ↑ 1 2 3 4 5 6 SCSI Architecture Model — 3 (SAM-3) (PDF). Дата обращения: 24 февраля 2007. Архивировано 9 апреля 2012 года.
- ↑ 1 2 1532D: AT Attachment with Packet Interface - 7 Volume 1 (PDF). 1532D: AT Attachment with Packet Interface - 7. Дата обращения: 2 января 2007. Архивировано 9 апреля 2012 года.
Ссылки
- Can Command Queuing Turbo Charge SATA? (недоступная ссылка)