RAID控制器中磁盤(pán)接口控制器流水線(xiàn)設計與實(shí)現
隨著(zhù)網(wǎng)絡(luò )發(fā)展和計算機的普及應用,人們對存儲系統的性能要求越來(lái)越高,尤其是關(guān)鍵事務(wù)的應用。廉價(jià)冗余磁盤(pán)陣列(RAID)采用分條和冗余的方法提高了存儲系統的容量、速度和可靠性,已成為高性能數據存儲的首選結構。磁盤(pán)陣列控制器是磁盤(pán)陣列的核心,多數緩存預取策略、緩存置換策略、磁盤(pán)聚合寫(xiě)策略、數據冗余計算、數據備份與重建均由磁盤(pán)陣列控制器完成。磁盤(pán)接口控制器主要負責磁盤(pán)組的管理及讀寫(xiě)磁盤(pán)操作的具體實(shí)現。
流水線(xiàn)技術(shù)是計算機技術(shù)中同時(shí)具備空間并行性和時(shí)間并行性的技術(shù),它把一個(gè)順序處理的過(guò)程分解成若干個(gè)子處理過(guò)程,每個(gè)子處理過(guò)程能在專(zhuān)用的獨立模塊上有效地并行工作。本文通過(guò)對磁盤(pán)接口控制器的流水線(xiàn)設計,提高了磁盤(pán)接口的吞吐率。較高的磁盤(pán)接口控制器吞吐率可以降低平均訪(fǎng)問(wèn)時(shí)間,使復雜有效的預取和置換算法方便地應用于磁盤(pán)陣列,提高緩存的命中率,從而提高磁盤(pán)陣列的整體性能。
1 現有磁盤(pán)接口控制器設計
磁盤(pán)接口設計方式主要有2種:(1)使用通用處理器充當磁盤(pán)接口控制器,通過(guò)在處理器上運行相應的軟件完成來(lái)自控制器上其他處理器的磁盤(pán)操作請求。這種方式最大的優(yōu)點(diǎn)就是實(shí)現簡(jiǎn)單,但缺點(diǎn)也很明顯。每一個(gè)新的磁盤(pán)操作請求必須在前一磁盤(pán)操作請求完成之后才能啟動(dòng),并且需要占用大量處理器時(shí)間的異或操作也由該處理器承擔,這使得每一次磁盤(pán)操作的時(shí)間太長(cháng),進(jìn)而使得磁盤(pán)接口控制器的平均磁盤(pán)訪(fǎng)問(wèn)時(shí)間過(guò)長(cháng),吞吐率較低,尤其是降級模式讀操作和磁盤(pán)寫(xiě)操作。(2)把需要長(cháng)時(shí)間占用通用處理器的異或操作獨立出來(lái),由異或專(zhuān)用ASIC完成此功能,其他操作仍由通用處理器運行相應的軟件完成?,F在的中低端磁盤(pán)陣列常采用這種方式。使用專(zhuān)用的ASIC分擔所有的異或操作,雖然可以部分減少需要異或操作的磁盤(pán)訪(fǎng)問(wèn)時(shí)間,如降級模式讀操作和磁盤(pán)寫(xiě)操作,但新的磁盤(pán)操作也必須在前一磁盤(pán)操作完成之后才會(huì )啟動(dòng),磁盤(pán)操作過(guò)程也是按順序執行的,整體的吞吐率仍不是很高。所以這種方式不適合于高端磁盤(pán)陣列的需要。
2 并行流水線(xiàn)設計模型
與其他磁盤(pán)接口不同,磁盤(pán)陣列中的磁盤(pán)接口除了簡(jiǎn)單地完成磁盤(pán)的讀寫(xiě)外,還需要完成數據塊的邏輯地址到實(shí)際磁盤(pán)物理地址的映射和保證數據塊在磁盤(pán)陣列中可靠地存儲。根據所有磁盤(pán)操作請求完成的特點(diǎn),磁盤(pán)接口操作被劃分為4個(gè)子任務(wù),每一個(gè)子任務(wù)由一個(gè)獨立的模塊來(lái)實(shí)現。在具體實(shí)現時(shí),這些模塊可以在同一芯片內,也可以在不同芯片中。這4個(gè)模塊分別是:共享緩存操作模塊、異或計算操作模塊、地址映射模塊和磁盤(pán)操作模塊。共享緩存操作模塊根據給定的共享緩存數據塊地址讀寫(xiě)數據塊;異或計算操作模塊是在降級模式讀磁盤(pán)操作和正常模式下磁盤(pán)寫(xiě)操作時(shí),完成異或計算;地址映射模塊主要實(shí)現磁盤(pán)數據塊的放置策略,將主機訪(fǎng)問(wèn)磁盤(pán)陣列的地址,如邏輯塊地址LBA、邏輯單元號LUN,轉換為實(shí)際的磁盤(pán)號、柱面號、磁道號、扇區號等;磁盤(pán)操作模塊主要是根據地址映射模塊操作后的結果完成磁盤(pán)的讀寫(xiě),包括相應的協(xié)議轉換。圖1是同一芯片實(shí)現各模塊的磁盤(pán)接口控制器的結構框圖。
實(shí)際上每個(gè)磁盤(pán)操作執行的這四個(gè)模塊的次序和次數是不定的。讀磁盤(pán)操作的數據流方向與寫(xiě)磁盤(pán)操作的數據流方向是相反的,執行這四個(gè)模塊的順序也是相反的。讀寫(xiě)磁盤(pán)操作的各模塊執行順序如圖2所示。一個(gè)磁盤(pán)操作請求只要在其執行的第一個(gè)模塊空閑時(shí)便可啟動(dòng),多個(gè)磁盤(pán)操作請求可以重疊的方式被磁盤(pán)接口控制器處理。理想情況下,磁盤(pán)接口控制器可以同時(shí)處理4個(gè)磁盤(pán)操作請求。
3 關(guān)鍵問(wèn)題分析
磁盤(pán)接口的并行流水線(xiàn)設計模型在具體實(shí)現時(shí)有2個(gè)問(wèn)題需要解決:(1)如何控制磁盤(pán)操作請求在模塊間執行順序和執行次數。因為在具體執行時(shí)有3種情況:4個(gè)模塊每個(gè)模塊執行1次、執行部分模塊多次和只執行3個(gè)模塊。(2)需要操作的數據塊如何在模塊間進(jìn)行傳遞。
3.1 任務(wù)通信
要控制一個(gè)磁盤(pán)操作請求如何在模塊間進(jìn)行處理,一種有效的方式就是讓每個(gè)模塊都知道這個(gè)磁盤(pán)操作請求的具體需求。為此,一個(gè)用來(lái)描述磁盤(pán)操作請求的特殊的數據結構被引入,其結構如圖3。每一個(gè)磁盤(pán)操作請求都有一個(gè)磁盤(pán)操作數據塊結構,磁盤(pán)接口控制器預處理部件每收到一個(gè)來(lái)自控制器上的其他處理器的磁盤(pán)操作請求便產(chǎn)生相應的操作數據塊結構,并根據其操作類(lèi)型放入相應的模塊任務(wù)池中。
每一個(gè)模塊都有一個(gè)任務(wù)池來(lái)存放操作數據塊結構。模塊總是從自己的任務(wù)池中取操作數據塊結構,然后根據數據塊結構中的說(shuō)明進(jìn)行相應的處理,處理完成后再根據數據塊結構中的說(shuō)明正確地放入到下一個(gè)模塊的任務(wù)池中。如某個(gè)模塊處理后磁盤(pán)操作請求已完成,則該模塊不再向其他模塊傳遞該數據塊結構,直接將其刪除。這種方式簡(jiǎn)單有效,易于編碼實(shí)現。
3.2 緩沖管理
在RAID5中,計算奇偶校驗塊需要同分條中的4個(gè)數據塊,因此異或計算模塊需要一個(gè)較大的緩沖來(lái)存放數據塊。其他模塊也至少需要一個(gè)數據塊大小的緩沖存放當前操作的數據塊。一個(gè)雙隊列的生產(chǎn)者-消費者模型(如圖4)被用來(lái)實(shí)現高效緩沖管理。
這2個(gè)隊列的長(cháng)度不是固定的,是根據每個(gè)操作方向上的請求數量動(dòng)態(tài)調整。在圖4中,若讀磁盤(pán)操作請求較多則增加緩沖隊列1的長(cháng)度;若寫(xiě)磁盤(pán)操作請求較多則增加緩沖隊列2的長(cháng)度。2個(gè)隊列的總大小總是小于或等于整個(gè)緩沖的大小。每一個(gè)隊列都是循環(huán)隊列,生產(chǎn)者總是把新的數據塊放到隊列的尾部;只要該隊列不為空,消費者總是從隊列的頭部取走數據塊。
4 磁盤(pán)接口控制器系統設計與實(shí)現
4.1 應用環(huán)境
本控制器應用在RAID控制器的系統總線(xiàn)與連接硬盤(pán)的SAS總線(xiàn)之間,主要根據RAID控制器中的主處理器命令進(jìn)行可靠快速的磁盤(pán)數據塊的讀寫(xiě)。
圖5描述了本控制器典型應用環(huán)境。深色部分為本控制器,淺色部分是外部環(huán)境。
從應用環(huán)境中可以看出,磁盤(pán)接口控制器是連接RAID控制器與硬盤(pán)組的橋梁。磁盤(pán)接口控制器通過(guò)SAS總線(xiàn)連接多個(gè)硬盤(pán),通過(guò)系統總線(xiàn)(如PCI總線(xiàn))連接到RAID控制器整個(gè)系統中。
4.2 總體結構與各功能模塊
磁盤(pán)接口控制器包括5個(gè)大的功能模塊:磁盤(pán)命令預處理模塊、共享緩存操作模塊、地址映射模塊、異或計算模塊、磁盤(pán)操作模塊。由于采用的是FPGA測試和驗證,對成熟的模塊,如PCI模塊、SATA模塊、DMA模塊直接使用FPGA中的資源。四級流水的磁盤(pán)接口控制器總體結構如圖6。
4.2.1 命令預處理模塊
命令預處理模塊主要根據RAID控制器中主處理器的命令決定該命令的操作流程,不同的讀寫(xiě)方式在不同的工作模式下其數據流程不一樣。命令預處理模塊主要包括命令緩沖區和PLC微處理器。命令緩沖區主要接收RAID控制器中主處理器發(fā)過(guò)來(lái)的命令,命令包括:2種工作模式命令(正常模式和降級模式)、2種分條讀寫(xiě)方式(完整分條和部分分條)、磁盤(pán)寫(xiě)命令(首個(gè)邏輯塊地址LBA,邏輯塊數)、磁盤(pán)讀命令(首個(gè)邏輯塊地址LBA,邏輯塊數)。PLC微處理器是一個(gè)8 bit RISC微處理器,也是整個(gè)控制器的核心,負責解析磁盤(pán)操作命令和控制命令的整個(gè)執行過(guò)程,包括其他4個(gè)功能模塊的任務(wù)分派和協(xié)調。
4.2.2 共享緩存操作模塊
RAID控制器包含有大容量的SDRAM作為磁盤(pán)陣列的緩存,所有異或操作的數據塊都存放在緩存中。共享緩存操作模塊主要完成緩存數據塊的讀寫(xiě),包括PCI總線(xiàn)和讀寫(xiě)控制邏輯。PCI總線(xiàn)使用FPGA芯片自身所帶的邏輯,讀寫(xiě)控制邏輯主要根據命令預處理模塊發(fā)過(guò)來(lái)的命令產(chǎn)生相應的讀寫(xiě)時(shí)序并解決總線(xiàn)沖突。
4.2.3 地址映射模塊
由于RAID控制器中主處理器操作的都是邏輯地址,地址映射模塊完成的是邏輯地址到物理盤(pán)號、柱面號、扇區號的映射。地址映射模塊包括邏輯地址寄存器和物理地址寄存器,并包括一個(gè)地址變換機構。地址變換機構是一個(gè)快速哈希變換機構,輸入的邏輯地址通過(guò)快速哈希變換和相應的查表獲得實(shí)際的物理地址。
4.2.4 異或操作模塊
異或操作模塊是RAID保證數據可靠性的基礎,主要完成異或計算。這個(gè)模塊比較簡(jiǎn)單,包括2個(gè)數據輸入寄存器和一個(gè)輸出寄存器,所有寄存器的位數是256 bit,一次異或操作可完成2個(gè)16 B數據的操作。一個(gè)分條的異或操作通過(guò)多次執行異或計算邏輯來(lái)實(shí)現。
4.2.5 磁盤(pán)操作模塊
磁盤(pán)操作模塊主要完成實(shí)際磁盤(pán)的數據讀寫(xiě),該模塊通過(guò)SATA總線(xiàn)連接多個(gè)磁盤(pán)。該模塊主要包括SATA主控制器和磁盤(pán)操作單元,SATA主控制器使用FPGA芯片本身自帶的邏輯,磁盤(pán)操作單元是要實(shí)現的邏輯,主要接收和執行PLC微處理器發(fā)過(guò)來(lái)的讀寫(xiě)命令,將數據從磁盤(pán)讀到共享緩沖區或把共享緩沖區的數據寫(xiě)到對應的磁盤(pán)上。
4.3 RTL設計與實(shí)現
根據前述的系統結構和各功能模塊,對本控制器進(jìn)行了RTL設計和實(shí)現。這里以復位控制、輸入控制為例說(shuō)明其實(shí)現過(guò)程。
復位控制是IC設計中一個(gè)基本而重要的問(wèn)題。綜合同步復位和異步復位的優(yōu)缺點(diǎn),對復位控制電路的設計采用“異步復位,同步撤離”的策略,使用2個(gè)觸發(fā)器級聯(lián),消除亞穩態(tài)的影響。同時(shí),為了濾除異步復位中毛刺的影響,在復位端口用一個(gè)二輸入與非門(mén)和一個(gè)緩沖器設計了一級濾除毛刺的電路,這樣就可以得到一個(gè)干凈的復位信號。
在本控制器的5個(gè)子模塊中都存在數據的輸入和輸出。不同的模塊只需要配置不同大小的FIFO。輸入控制的設計主要以一個(gè)異步FIFO作為彈性緩沖器,該FIFO的大小是可配置的。另外還有一部分邏輯用來(lái)生成輸出數據有效指示信號,這個(gè)指示信號采集到的FIFO讀信號有效時(shí)即為有效。
5 FPGA測試與實(shí)驗結果
經(jīng)過(guò)RTL設計、仿真及相應的EDA驗證,實(shí)現了流水線(xiàn)的磁盤(pán)接口控制器并對該控制器進(jìn)行了FPGA測試。測試過(guò)程中,使用的測試平臺板為Xilinx ML505測試平臺,主芯片為Virtex-5 FPGA,在不加SATA多路器的情況下可同時(shí)連接4個(gè)SATA硬盤(pán)。
為了進(jìn)行性能分析和比較,除了流水線(xiàn)的磁盤(pán)接口控制器外,同樣基于Virtex-5 FPGA并使用MIPS CPU核的磁盤(pán)接口控制器也被實(shí)現?;贛IPS CPU核的磁盤(pán)接口控制器在Virtex-5 FPGA上可以很方便地實(shí)現,因為Virtex-5 FPGA本身自帶MIPS CPU核和SATA控制器。只需要實(shí)現專(zhuān)用異或邏輯及在MIPS CPU核實(shí)現地址映射和讀寫(xiě)控制即可。
測試過(guò)程中使用的磁盤(pán)為高速SATA磁盤(pán),對應的磁盤(pán)參數見(jiàn)表1。這里只對磁盤(pán)接口控制器進(jìn)行測試,對磁盤(pán)陣列控制器中主處理器產(chǎn)生的磁盤(pán)操作命令通過(guò)模擬產(chǎn)生。命令到達的方式服從泊松分布,工作為正常工作模式,讀寫(xiě)方式為隨機產(chǎn)生。在讀磁盤(pán)請求數與寫(xiě)磁盤(pán)請求數相等的情況下,其實(shí)驗結果如圖7所示。由圖可知,在任何磁盤(pán)請求到達率情況下,基于流水線(xiàn)的磁盤(pán)接口控制器的吞吐率都比基于MIPS的吞吐率高。在其他讀寫(xiě)請求比率的條件下,也可以得到類(lèi)似的結果。
磁盤(pán)陣列控制器是磁盤(pán)陣列的核心,直接決定了整個(gè)磁盤(pán)陣列的性能。本文通過(guò)研究現有磁盤(pán)接口設計和磁盤(pán)接口完成的功能,提出了一種磁盤(pán)接口的并行流水線(xiàn)設計模型,并對該模型實(shí)現過(guò)程中的模塊間的通信問(wèn)題和模塊間的緩沖管理問(wèn)題進(jìn)行了相應的分析和設計。實(shí)驗結果表明,在各種情況下,磁盤(pán)接口的吞吐率都有提高,在高寫(xiě)請求率和重負載兩種情況下尤為顯著(zhù)。較高的磁盤(pán)接口控制器的吞吐率可以降低平均訪(fǎng)問(wèn)時(shí)間,使復雜有效的預取和置換算法方便地應用于磁盤(pán)陣列,提高緩存的命中率,從而提高磁盤(pán)陣列的整體性能。
評論