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.
We made some basic benchmarking using a NCQ-capable Serial ATA hard disk drive (Seagate ST3160023AS, 160 GB) with PC using the following configuration: 3.2 GHz Pentium 4, 1 GB RAM, GeForce 6800 VGA and Intel motherboard. We ran two programs, PCMark04 and IOMeter, with NCQ disabled and then enabled.
The results achieved with PCMark04 were the following: HDD Usage increased from 5,978 MB/s to 6,112 MB/s, an increase of only 2.24%. Windows XP loading time performance (XP startup) improved 9.76%, jumping from 8,947 MB/s to 9,821 MB/s.
The hard disk performance with IOMeter with NCQ disabled was 119 (a proprietary unit), jumping to 142 when we enabled NCQ, a 19.32% performance improvement. Not bad at all.
The performance difference between IOMeter and PCMark04 is easily explained. NCQ feature only improves the hard disk drive performance when it receives a series of out-of-order commands. It was very likeable that PCMark04 hard disk performance benchmarking used a series of sequential – i.e., in-order – commands, while IOMeter used a random workload, hence the better results on this program. Notice how Windows XP loading time – which loads files stored in several different positions of the hard drive – measured by PCMark04 improved considerably.