摘 要: 分析了FPDMA數(shù)據(jù)傳輸、隊列讀/寫命令的動態(tài)運行機制、支持高速特性的隊列和協(xié)議性能,給出了NCQ的性能優(yōu)勢和存在的問題。
關(guān)鍵詞: 本機命令隊列 運行機制 性能
本機命令隊列NCQ(Native Command Queuing)[1]是SATAⅡ接口中引入的命令協(xié)議,是對SATA 1.0所做的諸多功能擴展中惟一與性能密切相關(guān)的技術(shù)。其原型是1998年發(fā)布的ATA/ATAPI-4的命令隊列(CQ)技術(shù)。在PATA(Parallel ATA)中采用非對等輪詢訪問結(jié)構(gòu),其控制器計算能力弱,無法支撐復(fù)雜的最優(yōu)化命令排序算法,致使基于CQ的應(yīng)用性能改善和協(xié)議增加的開銷相當(dāng)。隨著ASIC、串行技術(shù)、多線程和超線程系統(tǒng)等技術(shù)的發(fā)展,在SATA中引入NCQ用于增強磁盤整體性能的條件已經(jīng)具備。
1 NCQ結(jié)構(gòu)
1.1 工作模型
NCQ處理的對象是隊列命令,核心是隊列機制,包括創(chuàng)建、排隊和在主適配器與盤體控制器的協(xié)調(diào)等,工作模型如圖1[2]所示。模型分為兩個功能相對獨立的部分,它們通過串行總線交換數(shù)據(jù),通過FIS(Frame Information Structure)來交換LBA、地址偏移、命令和狀態(tài)信息。其中,標記Tag是一個重要的元素,在驅(qū)動器緩存中有一個含有Tag的命令隊列,在主機控制器緩存中有與它對應(yīng)的Tag標志位表,值域[0,n],其中n(≤31)是隊列的深度,每一條命令都有惟一的標記值,應(yīng)用于隊列化命令的數(shù)據(jù)操作。
1.2 功能部件
NCQ主要由命令隊列建立部件、數(shù)據(jù)傳輸部件和命令完成狀態(tài)返回部件組成。其中命令隊列建立部件的功能是使磁盤控制器按照命令協(xié)議(如NCQ、DMA、PIO等)的語義(OpCode)確定是把該命令送到隊列排隊(Tag有效)還是立即執(zhí)行(Tag無效);數(shù)據(jù)傳輸部件使用FPDMA(First Parity DMA)傳輸機制完成驅(qū)動器和主機數(shù)據(jù)的傳輸;命令完成狀態(tài)返回部件的功能是當(dāng)數(shù)據(jù)讀寫操作命令發(fā)送或在數(shù)據(jù)傳輸完畢后,將磁盤命令的執(zhí)行狀態(tài)返回給主機。
1.3 命令格式
FPDMA包含RFQ(Read FPDMA Queued)和WFQ(Write FPDMA Queued)兩條命令,命令格式見參考文獻[2]。格式中的扇區(qū)計數(shù)寄存器包含的Tag由主機驅(qū)動程序指定,命令域區(qū)分為RFQ和WFQ(RFQ.Command=60h,WFQ.Command=61h),支持LBA模式和48位地址格式。
1.4 內(nèi)部寄存器結(jié)構(gòu)
把NCQ隊列機制應(yīng)用于系統(tǒng)時采用AHCI[5](Advanced Host Controller Interface)接口技術(shù),適配器建立在PCI-HBA基礎(chǔ)上,AHCI內(nèi)部的寄存器由HBA寄存器和系統(tǒng)內(nèi)存兩部分組成。HBA寄存器從結(jié)構(gòu)上又可分為AHCI-PCI配置空間寄存器和HBA內(nèi)存寄存器。其中前者定義了與PCI接口的標準PCI寄存器,后者用于通用主機控制和端口控制,它們通過AHCI-BAR或PCI配置空間的寄存器BAR聯(lián)系。AHCI系統(tǒng)內(nèi)存通過端口00~31和控制寄存器相連,每個端口控制寄存器同時指向內(nèi)存的Px命令列表基址(PxCLB)和Px FIS基址(PxFB)。其中Px命令列表系統(tǒng)內(nèi)存是為包括命令信息和PRD表的命令表地址的命令列表結(jié)構(gòu)設(shè)計的,Px FIS系統(tǒng)內(nèi)存是面向接收端口的FIS結(jié)構(gòu)設(shè)計的。
2 NCQ運行機制研究
由圖1的工作模型和SATA磁盤模型,可以抽象出如圖2所示的NCQ支持SATA磁盤的原理分析模型。其中的命令排隊邏輯和算法包括命令的讀取、命令分析、排隊策略、算法代碼等;FPDAM引擎任務(wù)處理單元包括從控制器獲得命令、從高速緩存獲得空間或數(shù)據(jù)、與SATA總線進行數(shù)據(jù)交換等;磁盤任務(wù)處理單元包括從控制器獲得命令,執(zhí)行磁盤的旋轉(zhuǎn)、尋道和定位等操作,與高速緩存進行數(shù)據(jù)交換等。其中與NCQ運行直接相關(guān)的部分在圖2中用重背景標出。
2.1 FPDMA運行
PATA在內(nèi)存和硬盤之間采用Ultra DMA數(shù)據(jù)傳輸機制。SATA充分借鑒了PATA的技術(shù)思路,引入了一種新型的數(shù)據(jù)傳輸機制FPDMA,其運行原理如下:
(1)設(shè)置主機非頁面化內(nèi)存中的FPDMA矢量表,這個表有32個入口,每個表入口含命令分散/聚合列表的物理地址(PRD表),它們都與Tag數(shù)字相對應(yīng)。其中隊列化命令的分散/聚集列表是描述數(shù)據(jù)傳輸?shù)闹鳈C內(nèi)存結(jié)構(gòu)。(2)驅(qū)動程序把主機控制器的隊列表基址寄存器設(shè)置為FPDMA矢量表的起始物理地址,主機驅(qū)動器軟件填充隊列化命令的PRD表,并在向設(shè)備發(fā)布一條命令前適當(dāng)設(shè)置FPDMA的矢量入口。(3)當(dāng)主機控制器從設(shè)備收到一DMA設(shè)置FIS后,它將使用Tag域作為對FPDMA 矢量表的索引,并設(shè)置DMA引擎PRD指針到FPDMA 矢量表中的特定值,同時應(yīng)用DMA設(shè)置FIS中的D位來設(shè)置DMA的傳輸方向。(4)進行FPDMA數(shù)據(jù)傳輸,并返回傳輸狀態(tài)信息。
2.2 RFQ/WFQ
讀操作(RFQ)是由主機向磁盤控制器發(fā)出的數(shù)據(jù)請求,主機驅(qū)動軟件一旦發(fā)出讀寄存器FIS,主機控制器的硬件將自主執(zhí)行FPDMA操作,不需要主機驅(qū)動軟件的參與,直到本條命令執(zhí)行完畢(即捕捉到執(zhí)行完畢的中斷請求位SActive)。
寫操作完成隊列化的命令把數(shù)據(jù)寫回驅(qū)動器,命令操作原理與讀操作類似。
2.3 錯誤處理
在SATA協(xié)議棧中,每層都有錯誤發(fā)現(xiàn)、錯誤控制和錯誤報告恢復(fù)功能[4]。NCQ工作于傳輸層,其錯誤處理機制簡單有效。
在主機發(fā)送給設(shè)備的寄存器FIS中,狀態(tài)寄存器BSY位出現(xiàn)了錯誤,設(shè)備將傳輸一個設(shè)置了ERR、BSY和錯誤寄存器為適當(dāng)錯誤代碼的寄存器FIS到主機控制器;然后,設(shè)備等待地址為10h的日志頁讀日志擴展(Read Log Ext)命令(若收到主機發(fā)送的復(fù)位寄存器FIS,將立即停止等待)。當(dāng)收到該命令后,設(shè)備控制器將放棄所有未執(zhí)行的隊列命令、清空隊列,返回詳細的錯誤信息,發(fā)送Set Device Bits FIS清除主機所有的Sactive寄存器位。至此,主機可以重新發(fā)送放棄的命令和新的命令。
3 NCQ工作性能分析
3.1 隊列性能
3.1.1 隊列分析
NCQ的核心是隊列機制,關(guān)鍵是命令的執(zhí)行次序排列和重排。在NCQ中,命令在隊列中的分布是采用旋轉(zhuǎn)位置排序(Rotational Position Ordering,RPO)算法實現(xiàn)的。具體的策略是綜合考慮減少磁盤的尋道和旋轉(zhuǎn)延遲,得到一個全局時間最短、執(zhí)行最優(yōu)的命令執(zhí)行序列。另外,為適應(yīng)磁盤隨機動態(tài)存儲,NCQ支持RPO動態(tài)重排命令序列,弱化命令存取位置的“震蕩”,保證設(shè)備最優(yōu)性能狀態(tài)的魯棒性。常用的減少尋道延遲的策略有SSTF(Shortest Seek Time First)[7]、SCAN[6]~[8]。這些算法都是基于面向企業(yè)高中端的SCSI隊列TCQ(Tagged Command Queue)設(shè)計的。而SATA定位于桌面、移動存儲、低端服務(wù)器和網(wǎng)絡(luò)存儲模型的近線和低端層次,所以隊列性能、精度、時間抖動等要求相對低一些,加上控制器計算性能的大幅提高,算法的運行開銷遠遠小于磁盤尋道和定位的代價。所以,在磁盤本體上,使用SSTF、SCAN和其改進算法對隊列中的命令進行排序和重排序是完全可行的。
需要注意的是:SSTF和SCAN算法的依據(jù)一般是數(shù)據(jù)塊的邏輯塊號;而SATF計算的依據(jù)是物理塊號,但由于操作系統(tǒng)沒有磁盤結(jié)構(gòu)的物理信息,所以該類算法實現(xiàn)起來相對復(fù)雜。改進的策略一是通過邏輯塊號-物理塊號之間的關(guān)系轉(zhuǎn)換,二是使用“最近塊數(shù)優(yōu)先”近似。但它們都削弱了算法性能,增大了時間誤差。
3.1.2 隊列仿真比較
使用UTSA的磁盤頭調(diào)度模擬器(DiskHead)[9]模擬上述主要隊列算法的NCQ性能情況。DiskHead既是一個磁盤負載產(chǎn)生器,也是一個負載調(diào)度器,通過仿真配置腳本程序,可以產(chǎn)生兩個不同的負載源。第一個負載源(L1)包括16個塊訪問,集中于低磁道區(qū)(100~2000磁道);第二個負載源(L2)也包括16個塊訪問,集中于高磁道區(qū)(10 000~14 000磁道)。然后把負載按照周期性和隨機性組合成四種類型的混合負載,輸入模擬器進行仿真。為了顯示隊列的優(yōu)勢,削弱CACHE的影響,盡可能加大了負載的密度和震蕩。
鑒于SCAN算法每次要回歸0道,所以需要把相應(yīng)的尋道時間和訪問時間去除掉。仿真結(jié)果如圖3、圖4所示。
從圖3、圖4看出,是否支持隊列的命令重排對存儲系統(tǒng)的性能影響很大,不同的負載特性對系統(tǒng)的性能影響也不盡相同。另外,排隊算法對隨機負載的性能要優(yōu)于周期負載,請求排隊能大大減少尋道時間,從而提高存儲系統(tǒng)的整體I/O性能。
3.2 協(xié)議性能
NCQ屬于一種“輕型”的接口協(xié)議。與PATA比較,協(xié)議的優(yōu)化性能具體表現(xiàn)在:
(1)引入性能優(yōu)于Ultra DMA和DMA的FPDMA簡單傳輸機制,其初始化設(shè)置由主機驅(qū)動器軟件完成,設(shè)備自動選擇DMA狀態(tài)參數(shù),完成驅(qū)動器和主機數(shù)據(jù)的傳輸。在傳輸數(shù)據(jù)的過程中不需要主機驅(qū)動器軟件的參與。
(2)協(xié)議隊列空間調(diào)整采用類“滑動窗口”策略,設(shè)備與主機之間的握手相對“弱化”。設(shè)備方收到設(shè)備命令請求后,就立即返回復(fù)位BSY信號,從而保持命令發(fā)送窗口的大小,而不是等待請求完成才返回,這樣為系統(tǒng)實現(xiàn)局部并行化提供了條件。這與PATA的設(shè)備請求“封閉”運行完全不一樣,它的設(shè)備請求命令執(zhí)行嚴格的握手程序,只有整個命令請求完成后才返回中斷信號,系統(tǒng)在接收到中斷返回后,才能繼續(xù)下一條設(shè)備命令的執(zhí)行周期。
(3)命令的排序在設(shè)備中完成,只要有新的設(shè)備請求命令被送入設(shè)備隊列,設(shè)備就要啟動一次排序算法進行重排序,保持命令序列執(zhí)行策略的一致性。算法的結(jié)果形成一個命令執(zhí)行索引表,該表包含了隊列命令新的執(zhí)行順序和相關(guān)參數(shù)。
(4)Race-free狀態(tài)返回機制實現(xiàn)了命令完成返回信息的高度管線化。NCQ允許各磁盤隨時返回命令執(zhí)行狀態(tài),特別是使用中斷聚合把數(shù)條命令的中斷聚合在一起,達到數(shù)個命令執(zhí)行狀態(tài)同時返回的效果。
通過對協(xié)議的改進和優(yōu)化,減少了接口事務(wù),降低了協(xié)議運行開銷,提高了NCQ協(xié)議工作的性能。
4 結(jié)束語
NCQ是SATA設(shè)備請求命令的隊列協(xié)議,它應(yīng)用了隊列智能重排序、協(xié)議流化、硬件自動FPDMA設(shè)置等技術(shù),減少了主機和設(shè)備的握手次數(shù)和接口事務(wù)數(shù)量,提高了隊列負載性能,減少了尋道和旋轉(zhuǎn)延遲時間,使協(xié)議操作高效化,大大提高了SATA磁盤系統(tǒng)的性能。Intel的測試數(shù)據(jù)表明:使用基于AHCI的SATA HDD是ATA HDD綜合性能的1.51倍[5]。盡管如此,NCQ還存在排隊命令與非排隊命令不能混合使用,一旦發(fā)生錯誤,硬盤將放棄隊列中的全部命令,專用的接口協(xié)議AHCI發(fā)布滯后等不足之處。
參考文獻
1 Huffman A,Clark J.Serial ATA Native Command QueuingAn Exciting New Performance Feature for Serial ATA.www.serialata.org,2003
2 Intel Corporation.Serial ATA Ⅱ Native Command Queuing Overview www.intel.com,Apr 2003
3 Intel Corporation.Serial ATA:Advanced Host Controller Interface(Revision 1.0).www.intel.com,May 2004
4 Taylor R.Serial ATA:Application Consideration for the Enterprise[S].www.agilysys.com,Apr 2004
5 Huffman A,Garzik J.AHCI-Take advantage of Serial ATA Features.IDF Fall 2003,San Jose,Sep 2003
6 Worthington B L,Ganger G R,Patt Y L.Scheduling for modern disk drives and non-random workload.In:Michael Ley proceedings.Perfarmance Evaluation Review22(1).proc ACM SIGMETRICS conf.Vanderbilt University,Nashviue Tennessee,USA,1994
7 Geist R,Daniel S.A Continuum of Disk Scheduling Algorithms.ACM Trans On Computer System,1987;5(1)
8 Thomasian A,Liu C.Some New Disk Scheduling Policies and Their Performance.In:Marina Del Rey,Proceedings of the International Conference on Measurements and Modeling of Computer Systems(SIGMETRICS 2002),California USA,2002
9 Robbins S.A Disk Head Scheduling Simulator.In:Proc.35th SIGCSE Technical Symposium on Computer Science Education,Norfolk Virgina,2004