原生命令队列

原生命令伫列(英语:Native Command Queuing,简称:NCQ),原先是改善伺服器硬碟存取控制技术,应用在SCSISATA 1.0/2.0/3.0介面硬碟读写加速技术,其介面开启磁碟阵列RAID亦能加速。透过硬碟韧体、硬碟控制器以及作业系统三者的互相配合,改善硬碟内部磁区的读取顺序,可以提高硬碟效能,亦能够轻微减轻硬碟损耗的速率。NCQ对用于伺服器上的硬碟的效率提升尤为明显。

本图阐述一颗硬碟在没有NCQ及有NCQ的存取顺序分别。两颗硬碟所要求的内容顺序均为1、2、3、4,但NCQ硬碟可以透过改变读写次序而增加效率。

原理

一般硬碟使用的硬碟格式通常为Windows 98核心所使用的FAT32系列,或是Windows NT所使用的NTFS,此种硬碟格式在存取资料时,时常会出现散乱的情况,导致一个文件被不规则的分散成许多的区块存放于磁盘上面,时间一久,文件散乱的程度会日趋严重,由于传统的硬碟读取方式,会从文件的开头依序读取到结尾,若文件散乱的程度愈严重,则读取头需要来回移动的距离就越长,导致硬碟读写效能逐渐下降。一旦发生这样的问题,解决方案便是使用磁碟重组软体来进行硬碟重组,将散乱的文件重新排列为连续的区块,但由于执行磁碟重组可能会需要搬动大量的磁碟区块,如果太常执行磁碟重组,除了会提高系统负载,亦将会缩短磁碟机的使用寿命,NCQ即为了解决此种情况而诞生。NCQ的概念原本是应用在伺服器上常见的SCSI介面上,在SCSI的规格中即包含此项技术,只是不叫做NCQ,将此项技术经过些许修改后称为NCQ,并将其应用在SATA介面上,后来的SAS介面也支持此项技术。启用NCQ技术的硬碟,在读取文件时,会依照文件在硬碟上的分布,将存取的顺序作最有效率的排序,以减少机械臂移动的距离,进而达到省时以及延长硬碟寿命的效果。

优势

于SATA II NCQ协定中,新增3个功能,分别是:

  • 无竞争状态返回机制(Race-free status return mechanism):
    硬碟在完成任一指令后,可以无须再进行Handshake即可继续另一个指令,以便让多个指令快速接序或同时执行。
  • 中断聚合(Interrupt aggregation):
    硬碟由于以NCQ模式执行多个指令,所以原本每一个指令完成后必须中断(interrupt)以便让系统接续处理的模式,转成可以在多个指令完成后再一次提出(interrupt),故介面控制器(host controller)对于多个指令只须处理一次中断即可。
  • First party (第一方)DMA(FPDMA):
    硬碟完成资料读取后,无须靠host controller的DMA动作取得特定记忆体位置,而是由硬碟本身建立DMA安装FIS(Frame Information Structure;框架信息结构)直接对主控送出记忆体存取通知,如此无须驱动程式的运作,可以有效提升存取效率。

条件

开启NCQ,除硬碟本身必须支持NCQ外,作业系统(OS)与介面控制器(controller)的支持也是不可或缺的条件。举例说,在Microsoft Windows平台上,从Windows Vista开始才支持NCQ,而Windows XP若要使用NCQ,则要额外安装支持软件。

支持晶片

(旧资料) 以下是支持NCQ的硬碟控制器,曾经被广泛使用,然而一些现在已经被淘汰:

  • JMicron
    • JMB360
    • JMB361
    • JMB362
    • JMB363
    • JMB365
    • JMB366
  • Silicon Image
    • SiI 3124
    • SiI 3132
    • SiI 3531
  • nVIDIA
    • nForce 4 Ultra, nForce 4 SLI
    • nForce 410
    • nForce 430
    • nForce 550
    • nForce 570 Ultra, nForce 570 SLI
    • nForce 590 SLI
    • nForce 650i Ultra, nForce 650i SLI
    • nForce 680i SLI
    • nForce 780i SLI
  • Intel [1]页面存档备份,存于互联网档案馆
    • ESB2
    • ICH6M, ICH6R
    • ICH7DH, ICH7M, ICH7MDH, ICH7R
    • ICH8DH, ICH8DO, ICH8M, ICH8M-E, ICH8R
    • ICH9DO, ICH9M, ICH9M-E, ICH9R
    • ICH10D, ICH10DO, ICH10R
    • 5 Series
    • 6 Series
    • 7 Series
    • 3400 Series
  • VIA
    • VT 8237S
    • VT 8251
  • ATI
    • SB 600
    • SB 700
    • SB 750
  • ALiULi
    • M1573
    • M1575
    • M1567
    • M1697
  • SiS
    • SiS966/SiS966L
    • SiS968
  • Marvell
    • 88SE9130

参看