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