Cola de comandos nativa

NCQ permite que la propia unidad determine el orden óptimo en el que recuperar las solicitudes pendientes. Esto puede, como en este caso, permitir que la unidad cumpla con todas las solicitudes en menos rotaciones y, por lo tanto, en menos tiempo.

En informática , Native Command Queuing ( NCQ ) es una extensión del protocolo Serial ATA que permite que las unidades de disco duro optimicen internamente el orden en el que se ejecutan los comandos de lectura y escritura recibidos. Esto puede reducir la cantidad de movimiento innecesario del cabezal de la unidad, lo que da como resultado un mayor rendimiento (y un desgaste ligeramente menor de la unidad) para cargas de trabajo en las que son excepcionales múltiples solicitudes de lectura/escritura simultáneas, que ocurren con mayor frecuencia en aplicaciones de tipo servidor .

Historia

La cola de comandos nativa fue precedida por la versión de Parallel ATA de la cola de comandos etiquetada (TCQ). El intento de ATA de integrar TCQ se vio limitado por el requisito de que los adaptadores de bus host ATA utilizaran protocolos de dispositivos de bus ISA para interactuar con el sistema operativo. La alta sobrecarga de CPU resultante y la insignificante ganancia de rendimiento contribuyeron a la falta de aceptación en el mercado de ATA TCQ.

NCQ se diferencia de TCQ en que, con NCQ, cada comando tiene la misma importancia, pero el adaptador de bus host de NCQ también programa su propio motor DMA de primera parte con parámetros DMA proporcionados por la CPU durante su secuencia de comandos, mientras que TCQ interrumpe a la CPU durante las consultas de comandos y le exige que module el motor DMA de terceros del adaptador de bus host ATA . La implementación de NCQ es preferible porque la unidad tiene un conocimiento más preciso de sus características de rendimiento y puede dar cuenta de su posición rotacional. Tanto NCQ como TCQ tienen una longitud máxima de cola de 32 comandos pendientes. [1] [2] Debido a que el TCQ ATA rara vez se usa, ATA paralela (y el modo IDE de algunos chipsets) normalmente solo admiten un comando pendiente por puerto.

Para que NCQ esté habilitado, debe ser compatible y estar habilitado en el adaptador de bus host SATA y en el disco duro mismo. Se debe cargar el controlador adecuado en el sistema operativo para habilitar NCQ en el adaptador de bus host. [3]

Muchos chipsets más nuevos admiten la Interfaz avanzada de controlador de host (AHCI), que permite a los sistemas operativos controlarlos universalmente y habilitar NCQ. DragonFly BSD ha admitido AHCI con NCQ desde la versión 2.3 en 2009. [4] [5] Los núcleos de Linux admiten AHCI de forma nativa desde la versión 2.6.19, y FreeBSD admite AHCI por completo desde la versión 8.0. Windows Vista y Windows 7 también admiten AHCI de forma nativa, pero su compatibilidad con AHCI (a través del servicio msahci) debe habilitarse manualmente mediante la edición del registro si la compatibilidad con el controlador no estaba presente durante su instalación inicial. AHCI de Windows 7 no solo habilita NCQ sino también compatibilidad con TRIM en unidades SSD (con su firmware de soporte). Los sistemas operativos más antiguos, como Windows XP, requieren la instalación de un controlador específico del proveedor (similar a la instalación de un controlador RAID o SCSI ) incluso si AHCI está presente en el adaptador de bus host, lo que hace que la configuración inicial sea más tediosa y las conversiones de instalaciones existentes relativamente difíciles, ya que la mayoría de los controladores no pueden operar sus puertos en modo mixto AHCI–SATA/IDE/heredado.

Unidades de disco duro

Actuación

Una prueba de 2004 con la unidad NCQ de primera generación (Seagate 7200.7 NCQ) descubrió que, si bien NCQ aumentó el rendimiento de IOMeter, el rendimiento de las aplicaciones de escritorio disminuyó. [6] Una revisión de 2010 encontró mejoras del orden del 9 % (en promedio) con NCQ habilitado en una serie de pruebas multitarea de Windows. [7]

NCQ puede interferir negativamente con el programador de E/S del sistema operativo , disminuyendo el rendimiento; [8] esto se ha observado en la práctica en Linux con RAID-5 . [9] No hay ningún mecanismo en NCQ para que el host especifique ningún tipo de plazos para una E/S, como cuántas veces se puede ignorar una solicitud en favor de otras. En teoría, una solicitud en cola puede ser retrasada por la unidad una cantidad arbitraria de tiempo mientras atiende otras solicitudes (posiblemente nuevas) bajo presión de E/S. [8] Dado que los algoritmos utilizados dentro del firmware de las unidades para ordenar el envío de NCQ generalmente no se conocen públicamente, esto introduce otro nivel de incertidumbre para el rendimiento del hardware/firmware. Las pruebas en Google alrededor de 2008 han demostrado que NCQ puede retrasar una E/S hasta 1 o 2 segundos. Una solución alternativa propuesta es que el sistema operativo deje de recibir artificialmente a la cola NCQ antes para satisfacer las aplicaciones de baja latencia de manera oportuna. [10]

En el firmware de algunas unidades, como el WD Raptor de 2007, la lectura anticipada está deshabilitada cuando NCQ está habilitado, lo que da como resultado un rendimiento secuencial más lento. [11]

Las unidades de estado sólido SATA se benefician significativamente de la capacidad de poner en cola varios comandos para cargas de trabajo paralelas. En el caso de las unidades SSD NVMe basadas en PCIe , la profundidad de la cola se incrementó incluso para admitir un máximo de 65 535 colas con hasta 65 535 comandos cada una.

Seguridad (FUA)

Una característica menos conocida de NCQ es que, a diferencia de su predecesor ATA TCQ, permite al host especificar si desea recibir una notificación cuando los datos llegan a los platos del disco o cuando llegan al búfer del disco (caché integrado). Suponiendo una correcta implementación del hardware, esta característica permite garantizar la consistencia de los datos cuando se utiliza el caché integrado del disco junto con llamadas del sistema como fsync . [12] El indicador de escritura asociado, que también se tomó prestado de SCSI, se llama Force Unit Access (FUA). [13] [14] [15]

Unidades de estado sólido

NCQ también se utiliza en unidades de estado sólido más nuevas , en las que la unidad encuentra latencia en el host, en lugar de lo contrario. Por ejemplo, la unidad de estado sólido X25-E Extreme de Intel utiliza NCQ para garantizar que la unidad tenga comandos para procesar mientras el sistema host está ocupado procesando tareas de la CPU. [16]

NCQ también permite que el controlador SSD complete comandos de manera simultánea (o parcialmente simultánea, por ejemplo, utilizando canalizaciones) cuando la organización interna del dispositivo permite dicho procesamiento.

El estándar NVM Express (NVMe) también admite colas de comandos, en una forma optimizada para SSD. [17] NVMe permite múltiples colas para un solo controlador y dispositivo, lo que permite al mismo tiempo profundidades mucho mayores para cada cola, lo que coincide más estrechamente con el funcionamiento del hardware SSD subyacente. [18]

Véase también

Referencias

  1. ^ Documento técnico en formato PDF sobre NCQ de Intel y Seagate
  2. ^ Volumen 1 del borrador final del estándar ATA-7
  3. ^ "Descripción general de la cola de comandos nativa SATA II", Informe técnico de Intel, abril de 2003.
  4. ^ Matthew Dillon (4 de junio de 2009). ""Re: DragonFly-2.3.1.165.g25822 master sys/dev/disk/ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h"".
  5. ^ Matthew Dillon (2009). "ahci(4) — Interfaz avanzada de controlador de host para Serial ATA". Referencia cruzada BSD . DragonFly BSD .
    • "ahci - Interfaz avanzada de controlador de host para Serial ATA". Páginas del manual en línea de DragonFly.
  6. ^ "Disco duro Barracuda 7200.7 NCQ de Seagate - The Tech Report - Página 13". The Tech Report. 17 de diciembre de 2004. Consultado el 11 de enero de 2014 .
  7. ^ "Multitarea con cola de comandos nativa - The Tech Report - Página 5". The Tech Report. 3 de agosto de 2005. Consultado el 11 de enero de 2014 .
  8. ^ ab Yu, YJ; Shin, DI; Eom, H.; Yeom, HY (2010). "NCQ vs. Programador de E/S". Transacciones ACM en almacenamiento . 6 : 1–37. doi :10.1145/1714454.1714456. S2CID  14414608.[1]
  9. ^ "disco duro - Rendimiento deficiente del RAID 5 del software Linux con NCQ". Error del servidor . Consultado el 11 de enero de 2014 .
  10. ^ Gwendal Grignou, Emulación NCQ, diapositivas del resumen de la charla FLS'08 (p. 109)
  11. ^ "Mark Lord: Re: ¿Velocidad de transferencia de disco duro más baja con NCQ habilitado?". LKML. 2007-04-03 . Consultado el 2014-01-11 .
  12. ^ Marshall Kirk McKusick . "Discos desde la perspectiva de un sistema de archivos - ACM Queue". Queue.acm.org . Consultado el 11 de enero de 2014 .
  13. ^ Gregory Smith (2010). PostgreSQL 9.0: Alto rendimiento . Packt Publishing Ltd., pág. 78. ISBN 978-1-84951-031-8.
  14. ^ http://www.seagate.com/docs/pdf/whitepaper/D2c_tech_paper_intc-stx_sata_ncq.pdf [ URL básica PDF ]
  15. ^ Jonathan Corbet (18 de agosto de 2010). "El fin de las barreras de bloqueo". LWN.net . Consultado el 27 de junio de 2015 .
  16. ^ Gasior, Geoff (23 de noviembre de 2008). "Unidad de estado sólido X25-E Extreme de Intel: ahora con memoria flash de celda de un solo nivel". Tech Report .
  17. ^ Dave Landsman (9 de agosto de 2013). "AHCI y NVMe como interfaces para dispositivos SATA Express: descripción general" (PDF) . SATA-IO . Consultado el 2 de octubre de 2013 .
  18. ^ "Descripción general de NVM Express". nvmexpress.org . Consultado el 26 de noviembre de 2014 .
  • Serial ATA y los 7 pecados capitales de Parallel ATA en Lost Circuits (para TCQ)
  • Análisis de la publicidad frente a la realidad en Tom's Hardware
Retrieved from "https://en.wikipedia.org/w/index.php?title=Native_Command_Queuing&oldid=1191480056"