科技新知

SATA II、NCQ、作業系統三者的情慾糾結

由於最近在研究一些關於磁碟陣列的資料,也看了很多相關的文章,這裏我們就來探討一下SATA II、NCQ、作業系統這三者之間複雜的感情世界

NCQ 規範

NCQ(Native Command Queuing):原生指令緩衝區技術。

這項原生命令佇列指令集技術是一個標準的規格,透過硬碟韌體、主機板控制器

以及作業系統三者的相互配合,在硬碟讀寫前會先重排列,優化讀寫次序,

這不單令讀寫的時間能更有效率(可提高硬碟效能約30%)

SATA II NCQ 協定中,新增3個功能,分別是:

1    Race-free status return mechanism:

 硬碟在完成任一指令後,可以無須再進行Handshake即可繼續另一個指令,以便讓多個指令快速接序或同時執行。

2    Interrupt aggregation:

硬碟由於以NCQ模式執行多個指令,所以原本每一個指令完成後必須中斷(interrupt) 以便讓系統接續處理的模式,轉成可以在多個指令完成後再一次提出(interrupt) ,故介面控制器(host controller) 對於多個指令只須處理一次中斷即可。

3    First party DMA(FPDMA):

當硬碟完成資料讀取後,無須靠 host controller 的DMA動作取得特定記憶體位置,而是由硬碟本身建立 DMA setup FIS (Frame Information Block)直接對 host controller 送出記憶體存取通知,如此無須驅動程式的運作,可以有效提升存取效率。

作業系統必須支援

當我們了解上述的意義之後,接者我們開始進入主題了

感覺上NCQ所帶來的效果,好像非常的強大,有很多網路上的資料都說可以提升效率30%以上,不過這些數字對使用者而有有多大的效能呢?那NCQ帶來的改變總是切實的吧?其實不然,NCQ眼下也做不了SATA2的救命稻草。作為一項必須要有軟硬體支持的技術,必須要有操作系統支援,硬碟支援,不然NCQ有跟沒有,沒啥區別。

但是是否真的能提升30%的效能呢,我們也不要期望太高,通常這種優化效果提升性能會比較有限,從理論上看它是堪稱完美,但實際操作中問題不少,首先,如果你的資料在硬碟上恰好是順序存儲得當的,那NCQ肯定無效了;其次,系統中執行的命令序列千頭萬緒,能夠進行多少的優化呢,這種情況在多工的環境中尤其容易出現。

換個方式來說,一般硬碟使用的硬碟格式通常為Windows 98核心所使用的FAT32系列,或是Windows NT所使用的NTFS,此種硬碟格式在存放資料時,時常會出現散亂的情形,導致一個檔案分散成許多區段於磁盤上頭,時間一長,由於檔案散亂的程度日趨嚴重,便會導致硬碟讀取效能逐漸下降。一旦發生這樣的問題,解決方案便是使用硬碟重組軟體重組硬碟,將散亂的檔案重新排列為連續的區塊。

有鑑於此,NCQ原本的概念其實是應用在伺服器中的SCSI介面上,不過NCQ可以說是專門提供給SATA介面使用的。啟用NCQ技術的硬碟,在讀取檔案時,會由硬碟最內圈的部分,移動到最外圈將檔案的各區塊讀取出來。而傳統的硬碟讀取方式,會從檔案的開頭依序讀取到結尾,換句話說,如果檔案的開頭在磁盤最外圈,而結尾在磁盤的最內圈時,機械臂便會先移動到最外圈,再移至最內圈讀取,若檔案散亂的程度愈嚴重,則機械臂需要移動的距離就愈長。

要深入了解其原理,我們必須先了解硬碟是如何去讀取資料的先從一些基本的原理來研究
1    程式要執行:必須將程式載入到電腦系統的主記憶體。
2    CPU 只針對記憶體內的程式或資料做運算。
3    輔助記憶體:磁碟為主,讀寫資料動作都是屬於機械性動作,速度與                  CPU或主記憶體的處理速度相較甚鉅。
4    作業系統必須管理磁碟讀寫與磁碟空間配置等問題。
因此資料的讀寫主要是由硬碟為主,所以我們必須了解硬碟本身是如何去運作的,以下是一些常常聽見的專有名詞解釋:

1    搜尋時間(Seek Time)
      磁碟機讀寫頭移動到欲讀寫的磁軌(Track)所花的時間,以ms為單位,一般          平均搜尋時間約6~10ms。一般說來,搜尋時間最久,作業系統必須選擇一

      個適當的搜尋方法來處理磁碟排程(Disk Scheduling)。

2    磁碟轉動的延遲時間(Rotational Delay Time)
      磁碟的磁盤旋轉到所欲讀寫的磁區(Sector)所花的時間。

3    資料傳輸時間(Transfer Time)
      真正讀寫動作,傳送資料所花的時間。

 

既然我們知道了硬碟是透過排程的方式來讀取資料,我們更要深入了解其排程的方式運作原理為何:

1    先到先做(FCFS):先提出讀寫要求的程序先處理,所有程序依照排隊先後次      序來處理→為平均效率最差的一種方法。

2    搜尋時間最短者優先(SSTF):選擇距離目前讀寫頭所在磁軌位置最近的一個      磁軌存取需求來優先處理→可能造成「餓死」(Starvation)現象。

3掃描法(SCAN):為解決「餓死」現象,掃描法是讓讀寫頭來回依序掃描每          一個磁軌。
      

4   電梯法;

     如果經過磁軌剛好有程序要求存取,便予以處理。當讀寫頭掃描到最後一個     磁軌或第一個磁軌時,便調頭以同樣方法繼續反向掃描→電梯法。

5   循環掃描(C-SCAN)為掃描法的改版

     當讀寫頭掃描到最後一個磁軌或第一個磁軌時,並不會繼續反向再做一次掃     描,而是回到出發時另一頭的磁軌重新一次新的掃描。每次掃描的方向都是      一樣。把所有磁軌當成一個環狀結構,最後一個磁軌接著就是第一個磁             軌。

6   觀察法(LOOK)與循環觀察法(C-LOOK)
     讓讀寫頭停留在最後一次要求磁軌上,等待下一個新進的存取要求。

其實NCQ就是改良式的電梯法,充分利用讀寫頭移動的時間增加讀寫的機率來提高效能,至於硬碟本身採取上述何種方式來做排程,說實在的小弟也不太知道,也查不到相關資料可以參考,如果有哪位前輩了解的話也請給小弟一點指教 ^^

結論

因此簡單來說NCQ 是將讀寫指令保留在晶片中  然後設法以最佳的讀取順序來讀取,至於能提供多少效能我看見人見智了,按照此技術的邏輯來看我相信確實可以提高效率,但是不如萬轉硬碟所帶來的感受大八,有鑑於此各位喜歡追求極限效能的朋友,還是購買萬轉硬碟組RAID來的實際八



關於作者

Leo

Leo

喜愛旅遊並沉迷科技應用數十年無法自拔的重度 3C 上癮者!

發表評論