技术分析:深入剖析RAID HBA与架构
一般的RAID HBA 有下面形态的硬件架构:
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 产品...
FPGA or CPLD 可编程逻辑们阵列,这就比较有弹性了。
比如说一些SSD RAID、DRAM RAID,都是用FPGA实现,但是如果量大是有点不合算。
像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)才能使用,可能根据Option ROM载入的内容而有所差异。下面是一张AMCC/3ware早期的9690SA-8i RAID Controller,这是一款Hardware RAID,由PowerPC处理器、ASIC XOR Accelerator和Emulex IOC组成经典的StorSwitch分离式架构。在3ware还没被LSI买下以前,长年以来都是应用这种架构,3ware对于早期开发SATA产品中,面对SCSI产品这个架构有相当的优势性,不过现在颇老矣...
最左边那块是存放韧体(Firmware)代码的flash,由于StorSwitch架构没有太多的详细资料,所以我的猜测是这样的:那颗 PowerPC的处理器——PPC405CR提供266MHz的时钟频率,这颗处理器一般的用途可能是一些平常I/O处理,例如中断执行、flow control、另外还包括了对于RAID code的执行,AMCC握有PowerPC的授权后,不用白不用。中间那颗是AMCC特制的ASIC XOR加速器——G133 RAID engine,提供大量的DMA通道(32条,StorSwitch架构的特色之一)给更多的Storage使用,附加XOR和RAID 6所使用的GF硬件加速设计,PPC405CR加上G133 RAID engine应该就是一个完整的IOP(I/O 处理器)架构。根据AMCC/3ware之前相关产品资料来看,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后期产品来看,并没有太多的改善,不管是9550系列或着9650系列,software部分我倒是认为作的不差。下面是一张LSI的SAS 9211-8i的HBA,提供了IT/IR双模式,在单个硬盘连接情况下,可以直接被识别使用:
这块HBA使用了LSISAS2008芯片,是Hardware RAID架构,内置了一颗PowerPC——PPC440 at 533MHz的处理器,LSISAS2008的特点是支持了6Gb/s介面的SAS 2.0规格,目前被广泛应用在HBA、ROMB方案下。这颗芯片提供了基础RAID功能,可以从官方文件来看是用来取代LSISAS1068/E的,仅拥有入门级(entry-level)的性能,他跟同门师兄——LSISAS2108相比,可以说是差了一大截,他没有任何XOR硬件加速设计,没有内存控制器来连接外部内存作为Cache Memory,光缺少这两种特征,足以让RAID性能受到严重的打击。从Intel的一份文件显示,芯片里面整合了一块2MB的context RAM可以用来做为buffer;支持MSI-X特性、IRQ x15,对于SMP/CMP系统来说,在大量I/O的情况下会有所帮助。
在HBA方案中,提供IT(Initiator and Target)模式作为原生SAS模式支持(thx 注这是很特别状况)。
另一种IR(Integrated RAID)模式提供了基础RAID功能实现(RAID 0、RAID 1、RAID 10和RAID 1E),在LSI专有的Fusion-MPT架构,应用了子处理器(pRoCessor)来执行对I/ O的相关操作或着有关RAID的运算。另外ROMB设计方案中,提供一种RAID key的小块物理PCB插件,如下图所示:
透过这个插件而外提供RAID 5模式,不过前面说过,由于没有了XOR硬件加速设计和内存控制器,因此RAID 5性能可以说是不堪入目。在使用RAID key的情况下,BIOS模式会切成IMR(Integrated MegaRAID)模式,这个模式就是MegaRAID产品系列所采用的,提供更多的特性,这与LSI SAS MegaRAID 9240系列是相同的。当切换成IMR模式后,就必须强制建立阵列才能使用,而且使用的IRQ数量只有4组,block size可以选择,但最高只能到64k,支持SSD Guard技术。下面是一张LSI MegaRAID SAS 9240-8i的RAID HBA,归属于MegaRAID产品线,所以可以提供对RAID 5模式的支持:
#page_title#e#
一般RAID就设计上来说分成两种形式:Software RAID和Hardware RAID,我想这玩过或着熟悉相关RAID知识的人大致上都清楚,在说明这两种设计差异之前,并不包含一些特殊的设计,例如某家RAID厂商早期某款产品使用某种程度的XOR硬件加速设计(CPLD/FPGA)来提高性能。
Hardware RAID比较好讲,基本的架构就是IOP+IOC的组合,IOC可以说是SAS/SATA HBA部分,IOP通常只是拿来加速运算用的。先来讲讲Software RAID,根据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功能完全取决于操作系统而定,此模式提供最低成本的考量,但是缺点不少,最大的缺点在于他 I/O性能不佳,而且受到Software层级上的限制,意味着它容易被操作系统绑死,下图是一张纯软件模式的基础示意图:
纯软件模式在一般情况下,是不会去应用的,尤其最近这几年来,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功能部份可以独立于操作系统,资料安全上也高于纯软件模式,通过系统启动BIOS初始化阶段,可以预先检测到RAID模式的状况,并且提供独立的GUI设定RAID类型,当然在某些RAID模式下,IO性能依然会受到限制,例如典型的RAID 5模式。下面是一张基本的示意图:
这张描述的是以HBA with a RAID BIOS的模型,RAID Software与HBA部分包起来,RAID Software指的是将有关RAID代码部分写在NVRAM里,作为系统启动初始化的时候,获得RAID的相关功能,也包括专属的组态设定 (dedicated GUI and software to build and maintain the RAID)。
这张是我取自Dell网站加以修改的基本HBA with a RAID BIOS结构:
另外这张表示图则是ICHxR实现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的分离设计代表最经典的就是Intel IOP333,也就是说IOC部分通过额外的RAID HBA芯片来连接,以下是IOP333的方块图:
上述有一个AAU(Application Accelerator Unit),这个硬件加速设计可以增强RAID6的运算性能,但是IOP333面临到的最大瓶颈问题在于IOP与IOC之间的连接带宽,基本上是通过 PCI-X连过去的,最大提供1GB/s的理论有效带宽,这反而成了I/O性能上的问题,原因很简单!就SAS 1.0规范来说好了,一条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,导致连接多个驱动器后,性能上的问题会越来越严重。以下是经典的 Dell PERC 5:
IOC部分则是使用LSI1068(没盖散热片的那颗),提供SAS/SATA HBA功能,在另一款的LSI 8344ELP也是这样的设计,主要差别在于Connector连接规格不同与Cache Memory的可扩展性,如下图所示:
下面这张是早期Adaptec优秀的IOP333产品-4805SAS:
IOC部分是采用与Vitesse合作的AIC-9410W晶片,提供wide port x2(4 narrow links/per port)。
这张是相反的4800SAS,采用的IOP为IOP331:
IOP331面向的Host Bus为PCI-X,结果跟4805SAS是一样的。
另外3ware经典的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,价格到现在还不便宜,因此可以列为最不划算的RAID产品之一XD。#p#page_title#e#
Intel从IOP33x之后,大幅改进推出IOP34x的优秀产品,这是一个RoC架构的产物,基本上IOP与IOC完全被整合,所以不必考虑之间的带宽问题,以下是IOP348的方块图:
IOP34x是双处理器结构,并且整合IOC部分,提供wide port x2(4 narrow links/per port),Cache Memory支持DDR2-533规格。 RoC架构是这几年的发展趋势,虽然它不是创新的架构,不过这几年来的RAID硬件发展可以说是它们的天下。下面是Areca的优秀RAID产品-ARC-1680ix-24:
可以看到这款可以支持到2 wide ports以上,因此这绝对是通过SAS Expander方式(右边的那颗芯片)去扩展更多的wide port来连接大量的硬盘。
RoC架构的一个经典产品是LSI的1078系列,下面可以看到一张来自Dell对PERC 6采用LSI1078的基本结构图,事实上它是用来跟IOP333产品-PERC 5去做比较:
PERC 6是前一两年当红的产品,因为它比LSI同期产品还要便宜不少,加了BBU也没多加少钱,要注意! LSI的BBU实在贵到翻掉=_="",一块就拥有跟LSI 8888ELP(LSI1078)差不多的性能,缺点是兼容性上的问题要注意。
Dell PERC 6,Connector规格标准为非主流的SFF-8484标准,256MB DDR2-667 Cache Memory,后期的固件支持SSD Guard(印象中是要刷LSI的firmware...)。下图则是前几年LSI Internal/External RAID最高端的产品-MegaRAID 8888ELP:
Connector规格标准为现在主流的Internal SFF-8087 x2和External SFF-8088 x2,透过SAS Expander(扩展器)连接可以达到240个驱动器,Cache Memory可扩展,最高可以达到1GB,在当时无论如何都是非常强悍的RAID产品。而关于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。下面是一张性能极为优秀的LSI MegaRAID 9260-8i:
当然价格也是相当难看,而且BBU这部分实在贵得离谱,一颗BBU07要将近9k(新台币?)=.="",性能是很好没错,不过整体价格实在是OOXX的。
目前拿Intel和LSI的例子来举,仅是说明RoC成为这几年来发展的主流,当然并不单单是只有这两家,另外还包括了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的带宽(并不一定如此,得看硬件设计!),不过现阶段看到的通过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等等...,都是朝向这个方向发展,这不仅仅是性能上的提升,高度整合对于成本上的控制也有所助益,整个PCB的规模也有助于精简。此外,SSD的逐渐发展,也将成为各家RAID厂商的优化议题,尤其以LSI来说,提供的LSI优化方案较为齐全,Advanced Software Options包含了两项对于SSD的最佳实例,当然这些都是要购买License的,至于其他,被PMC-Sierria买下来的Adaptec先前也提供一种MaxIQ技术,只是这种技术花费成本相当昂贵。而Marvell在较低阶的88SE9128未来也将会提供类似MaxIQ的低成本混合加速技术 -HyperHDD,事实上这颗芯片有整合一颗ARM-based的处理器用来分担CPU上的I/O操作,成为一个子I/O系统,所以姑且判定为一种 IOC-based的Hardware RAID架构吧,很可惜的是他只支持2 SATA ports,也因此不太占用到很大的host-bus频宽,所以只支持PCIe Gen2 lane x1,提供500MB的理论传输速率。
Marvell 88SE9128芯片结构图
大致上关于SAS/SATA HBA和RAID HBA,所想到的就这些(以后还想到什么再去补..)。接下来就是一些RAID硬件资讯的收集,往后作为备忘查询之用途XD!