NCQ (Native Command Queuing) and TCQ (Tagged Command Queuing) are features created to improve the hard disk performance by re-ordering the commands sent by the computer to the hard disk drive. In this tutorial we will explain how both NCQ and TCQ work, the difference between them and some performance data.
NCQ was introduced with Serial ATA II, the same standard that introduced the new maximum transfer rate of 300 MB/s for Serial ATA, being targeted to mainstream hard disk drives. TCQ was introduced with SCSI2 and also adopted by ATA-4 standard (a.k.a. ATA/100), however only a very few ATA/100 hard drives adopted it (while it is very common to be found on SCSI hard drives). TCQ is targeted to server- and enterprise-level hard disk drives.
To use NCQ or TCQ, both the hard disk port and the hard disk drive must support the standard. So, if you have a NCQ hard disk drive port (the Serial ATA II ports on motherboards based on newer chipsets, for instance) but install a hard disk drive without this feature, you won’t see any performance improvement.
Command Queuing features improve the performance of the hard disk drive when the PC sends a series of commands to read sectors distant from each other. The hard disk drive takes these commands and reorders them, in order to read the maximum possible data at just one rotation of the disc.
Consider Figure 1. The PC asked the hard disk drive to read A, B, C and D positions of the disc. Without any Command Queuing feature, the hard disk drive will take two and a half spins of the disc to read all requested data (yellow line). With Command Queuing, the hard disk drive will reorder the commands to B, D, A and C, taking only one disc spin to read all requested data (orange line).
NCQ can deal with up to 32 commands at a time, while TCQ can deal with up to 216 commands (TCQ hard disk drives, however, can usually support a queue of “only” 64 commands). TCQ also has two extra features over NCQ: the initiator (the PC, i.e., the SCSI-2 port or the ATA/100 port) can specify commands to be executed in the same order sent to the hard disk drive; and the initiator can send a high-priority command that will be executed before all other commands found in the queue.