技術分析:深入剖析RAID HBA與架構
一般的RAID HBA 有下面形態(tài)的硬件架構:
IOP +IOC
1.ASIC IOP +IOC
2.FPGA ,CPLD 的IOP +ASIC IOC
RoC (RAID on Chip)
1.ASIC 的RoC
2.FPGA的RoC
ASIC (Application-specific Ic) 這種要Tape out的(好像1000萬起跳吧忘了價格..) ,要有量才合算。
LSI 這種Fabless(無半導體工廠) SoC Designer 廠商當然都是ASIC 產(chǎn)品...
FPGA or CPLD 可編程邏輯們陣列,這就比較有彈性了。
比如說一些SSD RAID、DRAM RAID,都是用FPGA實現(xiàn),但是如果量大是有點不合算。
像H牌這類,部份XOR 就是用FPGA or CPLD,PH
至于FPGA 做SAS PHY 仿真就不多了。
從RAID Controller的觀點來看,它是基于單純的SAS/SATA HBA上提供了RAID功能(RAID 0, RAID 1, RAID 5, RAID 6,甚至是混合陣列等等..),有些RAID Controller在單個硬盤驅動器情況下可以直接被識別,有些則是必須要建立陣列(Array)才能使用,可能根據(jù)Option ROM載入的內(nèi)容而有所差異。下面是一張AMCC/3ware早期的9690SA-8i RAID Controller,這是一款Hardware RAID,由PowerPC處理器、ASIC XOR Accelerator和Emulex IOC組成經(jīng)典的StorSwitch分離式架構。在3ware還沒被LSI買下以前,長年以來都是應用這種架構,3ware對于早期開發(fā)SATA產(chǎn)品中,面對SCSI產(chǎn)品這個架構有相當?shù)膬?yōu)勢性,不過現(xiàn)在頗老矣...
最左邊那塊是存放韌體(Firmware)代碼的flash,由于StorSwitch架構沒有太多的詳細資料,所以我的猜測是這樣的:那顆 PowerPC的處理器——PPC405CR提供266MHz的時鐘頻率,這顆處理器一般的用途可能是一些平常I/O處理,例如中斷執(zhí)行、flow control、另外還包括了對于RAID code的執(zhí)行,AMCC握有PowerPC的授權后,不用白不用。中間那顆是AMCC特制的ASIC XOR加速器——G133 RAID engine,提供大量的DMA通道(32條,StorSwitch架構的特色之一)給更多的Storage使用,附加XOR和RAID 6所使用的GF硬件加速設計,PPC405CR加上G133 RAID engine應該就是一個完整的IOP(I/O 處理器)架構。根據(jù)AMCC/3ware之前相關產(chǎn)品資料來看,Cache Memory部分應該是從AMCC ASIC XOR加速器連接,IOC則是使用Emulex的IOC 500S,提供兩個wide-port(各包含4條SAS通道)的連接。
就我以前拿4顆Seagate的15k.6 146GB組成RAID 5后進行測試,最佳的情況都無法突破1GB/s的順序讀寫傳輸速度,故此我是認為bottleneck應該是卡在host-bus(主機總線)的帶寬問題,也許有可能的情況就是AMCC ASIC XOR加速器連接IOC 500S是用PCI-X bus。當然,這些僅僅是我的一些猜測,其實縱觀3ware后期產(chǎn)品來看,并沒有太多的改善,不管是9550系列或著9650系列,software部分我倒是認為作的不差。下面是一張LSI的SAS 9211-8i的HBA,提供了IT/IR雙模式,在單個硬盤連接情況下,可以直接被識別使用:
這塊HBA使用了LSISAS2008芯片,是Hardware RAID架構,內(nèi)置了一顆PowerPC——PPC440 at 533MHz的處理器,LSISAS2008的特點是支持了6Gb/s介面的SAS 2.0規(guī)格,目前被廣泛應用在HBA、ROMB方案下。這顆芯片提供了基礎RAID功能,可以從官方文件來看是用來取代LSISAS1068/E的,僅擁有入門級(entry-level)的性能,他跟同門師兄——LSISAS2108相比,可以說是差了一大截,他沒有任何XOR硬件加速設計,沒有內(nèi)存控制器來連接外部內(nèi)存作為Cache Memory,光缺少這兩種特征,足以讓RAID性能受到嚴重的打擊。從Intel的一份文件顯示,芯片里面整合了一塊2MB的context RAM可以用來做為buffer;支持MSI-X特性、IRQ x15,對于SMP/CMP系統(tǒng)來說,在大量I/O的情況下會有所幫助。
在HBA方案中,提供IT(Initiator and Target)模式作為原生SAS模式支持(thx 注這是很特別狀況)。
另一種IR(Integrated RAID)模式提供了基礎RAID功能實現(xiàn)(RAID 0、RAID 1、RAID 10和RAID 1E),在LSI專有的Fusion-MPT架構,應用了子處理器(pRoCessor)來執(zhí)行對I/ O的相關操作或著有關RAID的運算。另外ROMB設計方案中,提供一種RAID key的小塊物理PCB插件,如下圖所示:
透過這個插件而外提供RAID 5模式,不過前面說過,由于沒有了XOR硬件加速設計和內(nèi)存控制器,因此RAID 5性能可以說是不堪入目。在使用RAID key的情況下,BIOS模式會切成IMR(Integrated MegaRAID)模式,這個模式就是MegaRAID產(chǎn)品系列所采用的,提供更多的特性,這與LSI SAS MegaRAID 9240系列是相同的。當切換成IMR模式后,就必須強制建立陣列才能使用,而且使用的IRQ數(shù)量只有4組,block size可以選擇,但最高只能到64k,支持SSD Guard技術。下面是一張LSI MegaRAID SAS 9240-8i的RAID HBA,歸屬于MegaRAID產(chǎn)品線,所以可以提供對RAID 5模式的支持:
#page_title#e#
一般RAID就設計上來說分成兩種形式:Software RAID和Hardware RAID,我想這玩過或著熟悉相關RAID知識的人大致上都清楚,在說明這兩種設計差異之前,并不包含一些特殊的設計,例如某家RAID廠商早期某款產(chǎn)品使用某種程度的XOR硬件加速設計(CPLD/FPGA)來提高性能。
Hardware RAID比較好講,基本的架構就是IOP+IOC的組合,IOC可以說是SAS/SATA HBA部分,IOP通常只是拿來加速運算用的。先來講講Software RAID,根據(jù)Adaptec早期提供的一份基礎文獻(Hardware RAID vs. Software RAID: Which Implementation is Best for my Application?),對于了解Software RAID和Hardware RAID差異是值得參考的,就Software RAID的特征,Software RAID拆成兩個部分:純軟件模式 – Operating System Software RAID和Hybrid Model – Hardware-Assisted(硬件輔助) Software RAID。在純軟件模式下,這個模式是非常容易了解的,RAID功能完全取決于操作系統(tǒng)而定,此模式提供最低成本的考量,但是缺點不少,最大的缺點在于他 I/O性能不佳,而且受到Software層級上的限制,意味著它容易被操作系統(tǒng)綁死,下圖是一張純軟件模式的基礎示意圖:
純軟件模式在一般情況下,是不會去應用的,尤其最近這幾年來,Hybrid Model – Hardware-Assisted Software RAID反而是最常被用到的,基本上就是SAS/SATA HBA with a RAID BIOS或著是RAID BIOS integrated onto the motherboard,例如Intel的ICHxR就是一個Hardware-Assisted Software RAID,透過額外的硬件加入RAID的支持(將RAID Option ROM寫在BIOS里),RAID功能部份可以獨立于操作系統(tǒng),資料安全上也高于純軟件模式,通過系統(tǒng)啟動BIOS初始化階段,可以預先檢測到RAID模式的狀況,并且提供獨立的GUI設定RAID類型,當然在某些RAID模式下,IO性能依然會受到限制,例如典型的RAID 5模式。下面是一張基本的示意圖:
這張描述的是以HBA with a RAID BIOS的模型,RAID Software與HBA部分包起來,RAID Software指的是將有關RAID代碼部分寫在NVRAM里,作為系統(tǒng)啟動初始化的時候,獲得RAID的相關功能,也包括專屬的組態(tài)設定 (dedicated GUI and software to build and maintain the RAID)。
這張是我取自Dell網(wǎng)站加以修改的基本HBA with a RAID BIOS結構:
另外這張表示圖則是ICHxR實現(xiàn)RAID功能,將RAID Option ROM寫到主機板上的System BIOS里,以提供RAID Configuration Utility建立RAID:
Software RAID的相反就是Hardware RAID,如之前所提,典型就是IOP+IOC(A Discrete RAID Controller Card)的組合,IOP作為某些模式(例如RAID 5)的運算加速時,可以提供某種程度上的效益(得視該硬體處理性能而定),并且IOP會包含一些額外的硬件加速設計,當然Hardware RAID花費的組建成本都高于Software RAID,以下是來自Dell的IOP+IOC示意圖:
#p#page_title#e#
這種結構大多都會包含對Cache Memory的支持,借以提供Read/Write Cache算法來增強I/O性能,透過BBU來提供某種程度上的資料安全性。幾年前IOP+IOC的分離設計代表最經(jīng)典的就是Intel IOP333,也就是說IOC部分通過額外的RAID HBA芯片來連接,以下是IOP333的方塊圖:
上述有一個AAU(Application Accelerator Unit),這個硬件加速設計可以增強RAID6的運算性能,但是IOP333面臨到的最大瓶頸問題在于IOP與IOC之間的連接帶寬,基本上是通過 PCI-X連過去的,最大提供1GB/s的理論有效帶寬,這反而成了I/O性能上的問題,原因很簡單!就SAS 1.0規(guī)范來說好了,一條narrow link連接到驅動器所支持的理論帶寬為3Gbps,而wide port包含4 narrow links,3Gbps x4=12Gbps=1.5GB/s x80%=1.2GB/s,在1.2GB/s的帶寬下早就打爆PCI-X了,當然實際情況不是這樣,一個wide port還不太容易沖爆,但是wide port x2的結果就不是如此了,PCI-X帶寬不夠使用也是遲早的事。如下圖來自Dell PERC 5文件所示:
可以看到使用IOP333與IOC接接,IOC是使用LSI1068控制芯片,LSI1068面對的Host Bus支持為PCI-X,IOP333與LSI1068之間的帶寬只有1GB/s,導致連接多個驅動器后,性能上的問題會越來越嚴重。以下是經(jīng)典的 Dell PERC 5:
IOC部分則是使用LSI1068(沒蓋散熱片的那顆),提供SAS/SATA HBA功能,在另一款的LSI 8344ELP也是這樣的設計,主要差別在于Connector連接規(guī)格不同與Cache Memory的可擴展性,如下圖所示:
下面這張是早期Adaptec優(yōu)秀的IOP333產(chǎn)品-4805SAS:
IOC部分是采用與Vitesse合作的AIC-9410W晶片,提供wide port x2(4 narrow links/per port)。
這張是相反的4800SAS,采用的IOP為IOP331:
IOP331面向的Host Bus為PCI-X,結果跟4805SAS是一樣的。
另外3ware經(jīng)典的StorSwitch結構也是IOP+IOC的分離設計,而且Firmware代碼的操作交由獨立的PPC來處理,下面是一張3ware的9650SE-2LP:
最左邊包含了PPC+固件部分,中間則是一顆IOP,最右邊是Marvell的IOC,來提供對驅動器的連接,這張好幾年前有玩過,實在不怎么樣的玩意兒,Host Bus部分為PCIe Gen1 x1,帶寬很小,提供Cache Memory支持,但是BBU功能被拿掉,且Connector是discrete的,也就是2個SATA ports,價格到現(xiàn)在還不便宜,因此可以列為最不劃算的RAID產(chǎn)品之一XD。#p#page_title#e#
Intel從IOP33x之后,大幅改進推出IOP34x的優(yōu)秀產(chǎn)品,這是一個RoC架構的產(chǎn)物,基本上IOP與IOC完全被整合,所以不必考慮之間的帶寬問題,以下是IOP348的方塊圖:
IOP34x是雙處理器結構,并且整合IOC部分,提供wide port x2(4 narrow links/per port),Cache Memory支持DDR2-533規(guī)格。 RoC架構是這幾年的發(fā)展趨勢,雖然它不是創(chuàng)新的架構,不過這幾年來的RAID硬件發(fā)展可以說是它們的天下。下面是Areca的優(yōu)秀RAID產(chǎn)品-ARC-1680ix-24:
可以看到這款可以支持到2 wide ports以上,因此這絕對是通過SAS Expander方式(右邊的那顆芯片)去擴展更多的wide port來連接大量的硬盤。
RoC架構的一個經(jīng)典產(chǎn)品是LSI的1078系列,下面可以看到一張來自Dell對PERC 6采用LSI1078的基本結構圖,事實上它是用來跟IOP333產(chǎn)品-PERC 5去做比較:
PERC 6是前一兩年當紅的產(chǎn)品,因為它比LSI同期產(chǎn)品還要便宜不少,加了BBU也沒多加少錢,要注意! LSI的BBU實在貴到翻掉=_="",一塊就擁有跟LSI 8888ELP(LSI1078)差不多的性能,缺點是兼容性上的問題要注意。
Dell PERC 6,Connector規(guī)格標準為非主流的SFF-8484標準,256MB DDR2-667 Cache Memory,后期的固件支持SSD Guard(印象中是要刷LSI的firmware...)。下圖則是前幾年LSI Internal/External RAID最高端的產(chǎn)品-MegaRAID 8888ELP:
Connector規(guī)格標準為現(xiàn)在主流的Internal SFF-8087 x2和External SFF-8088 x2,透過SAS Expander(擴展器)連接可以達到240個驅動器,Cache Memory可擴展,最高可以達到1GB,在當時無論如何都是非常強悍的RAID產(chǎn)品。而關于LSI1078的方塊圖如下:
基本上加入一顆PPC440(@500MHz)的IOP,還包含了XOR Engine的硬件加速設計。LSI1078目前的最大缺顯在于Host Bus的帶寬瓶頸,因為PCIe Gen1 x8最大僅能支持到2GB/s的理論有效帶寬,明顯略有不足,在后來的LSI2108就改善了這個問題,透過PCIe Gen2 x8提供了4GB/s的Host Bus理論有效帶寬,可以說是大幅緩和!如下基本示意圖所示:
LSI2108不僅僅是提高了PCIe帶寬的需求,并且提升了PPC440的性能(@800MHz),Cache Memory的支持提供到DDR2-800。下面是一張性能極為優(yōu)秀的LSI MegaRAID 9260-8i:
當然價格也是相當難看,而且BBU這部分實在貴得離譜,一顆BBU07要將近9k(新臺幣?)=.="",性能是很好沒錯,不過整體價格實在是OOXX的。
目前拿Intel和LSI的例子來舉,僅是說明RoC成為這幾年來發(fā)展的主流,當然并不單單是只有這兩家,另外還包括了Marvell的88RC9580 和PMC-Sierria的PM8011。 #p#page_title#e#
另外Intel目前已舍棄ARM架構的Xscale IOP設計,轉向以Nahalem架構為主的x86架構(Xeon C5500/C3500[Jasper Forest]),走的方向也比較與眾不同,HBA部分透過SBB總線架構用來與Backplane(with SAS Expander),SBB連接至Backplane提供相當高的I/O傳輸帶寬,對于一個mini-SAS Port的連結達到24Gbps的帶寬(并不一定如此,得看硬件設計!),不過現(xiàn)階段看到的通過x86 CPU僅能加速RAID 5/6運算性能,沒有包含對SATA/SAS連接器上的支持,依然還是得通過外接SAS/SATA HBA來提供(例如使用LSISAS2008作為IOC上的支持),而且x86架構的情況下,整個配套的軟體方案就顯得更重要了,就個人詢問得知目前比較完善在Linux部分,Windows部分還是有待加強,這是我所得知的部分。以下是自繪的SBB架構的一部分:
可以看到,透過Intel C5500/C3500[Jasper Forest]提供了一種XOR/P+Q硬線加速設計,用來提升對RAID 5/RAID6的性能,由于并沒有IOC的部分,必須另外接一塊做連接,例如這邊可以連接LSISAS2008作為與SAS Expander的溝通,最后利用SAS Expander透過Backplane與驅動器建立連接(通過AMC)。
如果把Intel排除的話,那這幾年的Hardware RAID設計可以說是殊途同歸,清一色都是RoC架構,不管是LSI/3ware、Marvell、Areca(采用Marvell RoC)、Promise(采用PMC-Sierria RoC)或著PMC-Sierria/Adaptec等等...,都是朝向這個方向發(fā)展,這不僅僅是性能上的提升,高度整合對于成本上的控制也有所助益,整個PCB的規(guī)模也有助于精簡。此外,SSD的逐漸發(fā)展,也將成為各家RAID廠商的優(yōu)化議題,尤其以LSI來說,提供的LSI優(yōu)化方案較為齊全,Advanced Software Options包含了兩項對于SSD的最佳實例,當然這些都是要購買License的,至于其他,被PMC-Sierria買下來的Adaptec先前也提供一種MaxIQ技術,只是這種技術花費成本相當昂貴。而Marvell在較低階的88SE9128未來也將會提供類似MaxIQ的低成本混合加速技術 -HyperHDD,事實上這顆芯片有整合一顆ARM-based的處理器用來分擔CPU上的I/O操作,成為一個子I/O系統(tǒng),所以姑且判定為一種 IOC-based的Hardware RAID架構吧,很可惜的是他只支持2 SATA ports,也因此不太占用到很大的host-bus頻寬,所以只支持PCIe Gen2 lane x1,提供500MB的理論傳輸速率。
Marvell 88SE9128芯片結構圖
大致上關于SAS/SATA HBA和RAID HBA,所想到的就這些(以后還想到什么再去補..)。接下來就是一些RAID硬件資訊的收集,往后作為備忘查詢之用途XD!