原生指令排序

原生命令佇列(英语: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

參看