Tagged o Native Command Queuing
Il command queuing può essere letteralmente descritto come una linea di comandi da eseguire, che vengono costantemente analizzati e riordinati in modo da ottenere una sequenza di esecuzione ottimizzata. Quasi ogni accesso a una determinata area del disco richiede un movimento delle testine di lettura/scrittura. Se questi movimenti possono essere ridotti, per esempio riorganizzando i comandi in modo da limitare i movimenti della testina, si potrebbe risparmiare un sacco di tempo. In questa operazione si devono però tenere particolarmente d'occhio due variabili: i Tempi Di Ricerca e la Latenza Di Rotazione. La prima rappresenta il tempo necessario affinché i bracci di lettura e scrittura vadano in posizione. La seconda, invece, rappresenta il tempo che viene solitamente impiegato dalle testine per coprire il settore corrispondente sul disco.
Se analizziamo bene le varie tecnologie di command queuing, possiamo notare qualche differenza. Sinora, il Native Command Queuing (NCQ) è stato applicato solo alla tecnologia SATA, mentre il Tagged Command Queuing (TCQ) è ben conosciuto dalla tecnologia SCSI addirittura sin dagli inizi degli anni novanta. TCQ è stato anche integrato nello standard ATA 4 per l'UltraATA, ma a causa degli scarsi vantaggi introdotti da questa tecnologia, non è mai stata realmente utilizzata; il TCQ consisteva nel riorganizzare i comandi in base ai loro indirizzi LBA (Logical Block Addressing), successivamente i comandi venivano eseguiti l'uno dopo l'altro.
Nel caso del TCQ per SCSI, molti comandi vengono marcati con un cosiddetto "TAG", che viene successivamente interpretato in un certo modo:
- Ordered
I comandi con questo TAG vengono eseguiti nello stesso ordine in cui arrivano. - Head of queue
Questo comando viene eseguito subito dopo quello attualmente in esecuzione. - Simple
In questo caso l'hard disk controlla la sequenza di tutti i comandi in coda, utile in quanto l'hard disk stesso conosce le proprie caratteristiche al meglio (cilindri, testine, settori).
Il Native Command Queuing(NCQ) funziona proprio come la modalità "simple" del TCQ, ma non offre le altre due opzioni.
Il command queuing mette in fila tutti i comandi ricevuti, la lunghezza di tale fila prende il nome di Queue Depth (profondità della coda). Le dimensioni massime di una coda per NCQ sono pari a 32 comandi per esecutore. In teoria, con TCQ è possibile gestire fino a 216 tag, ma questi livelli non sono mai stati raggiunti. Nelle applicazioni reali, le code possono contenere 64 comandi.
Ultima, ma non meno importante, troviamo un'altra caratteristica presente nel NCQ e mancante nel TCQ. Stiamo parlando del "Out of Order Data" che permette ad un drive di distribuire solo parti di un pacchetto dati richiesto, riducendo ulteriormente i tempi di ricerca