可以用的RAID 6:HighPoint RocketRAID 3220评测
http://tech.ddvip.com 2008年11月14日 社区交流 收藏本文
本文详细介绍可以用的RAID 6:HighPoint RocketRAID 3220评测
RAID 6简史
上帝他老人家有言在先:太阳底下没有新鲜事。从2004年起逐渐成为焦点话题的RAID 6,其实早在1993年就已被定义,而StorageTek随后便着手开发支持RAID 6技术的Iceberg系列,其1995年出货的Iceberg 9200磁盘阵列子系统更一度被引为实现RAID 6的元老——要知道1988年RAID概念才真正成形,这个时间似乎还不能算晚……
之后发生的事情大家都很清楚——RAID 6的受欢迎程度远不及RAID 5,到本世纪初甚至已少有人知。原因并不复杂:RAID 6采用双重校验,在一个RAID组中需要“浪费”两台硬盘驱动器的容量来保存校验数据,写入数据的速度亦因此而受到更大的影响。既然所消耗的磁盘空间超过RAID 5,并有明显的性能下降,RAID 6遭到冷遇也就不足为奇了。
直到上世纪90年代末,RAID 5还是SCSI/FC硬盘的领地,它们的可靠性很高,一个RAID组内同时坏掉两台硬盘驱动器的几率不大。另一方面,为了保证性能,有些大型数据仓库 (OLTP类应用)甚至舍RAID 5而RAID 1。在这种情况下,效率和性能都有所不及的RAID 6自然难觅出头的机会。
支持RAID 6的HighPoint RocketRAID 3220 SATA RAID卡
2001年之后,SATA RAID的异军突起给RAID 6带来了“咸鱼翻生”的契机。SATA硬盘驱动器的容量动辄几百GB(现在已达1TB),速度又相对较慢,完全访问一遍至少要几个小时,加之可靠性没有 SCSI/FC硬盘驱动器那么高,坏掉一台硬盘驱动器的RAID组在重建过程中,“幸存者”们再有个三长两短的可能性要大很多。正所谓“祸兮福所倚 ”,RAID 6由此获得了再战江湖的主要推动力。
人们对“双保险”的需求使RAID 6重获关注,但并非每种能够容忍两台硬盘驱动器(同时)离线的技术都属于RAID 6。不过,由于RAID 6的“名头”过于响亮,引得惠普(HP)的RAID 5 ADG和NetApp的RAID-DP等技术都来搭顺风车,客观上也壮大了RAID 6的声势。
ADG是Advanced Data Guarding的简写,即“高级数据保护”,其历史可以追溯到康柏(Compaq)时代。RAID 5 ADG与RAID 5一样将校验数据分散在所有的硬盘驱动器上,只是多了一重校验,并需要增加一块硬盘驱动器来保证同样的有效存储空间,因而从血统上来说,RAID 5 ADG符合RAID 6的传统定义。当初RAID 6的知名度还不高,用“ADG”的称呼对市场宣传比较有利,现在改成“RAID 6 (ADG)”的写法也无可厚非。
RAID-DP是在RAID 4的基础上发展而来,继承了后者的独立校验盘设计,区别在于校验盘增加了一个,形成Double-Parity,明明白白地告诉大家是“双重校验”。从这个意义上来说,RAID-DP不能算RAID 6,然而两者所用的算法却有一定的渊源。
RAID 6的“对角线算法”示意图,第一重校验P是与RAID 5相同的水平校验,第二重校验P'则是斜向校验(绿色斜线方向),可以看到磁盘3(纵向最右一列)其实就是一个独立的校验盘。对角线方向上的三条绿色斜线覆盖的区域都有P和P',形成双重校验
很多种算法都可以实现RAID 6,其中就有一种在横向和斜向两个方向上进行XOR(异或)运算的Dual-XOR算法,横向当然是与RAID 5一样了,区别在于斜向,所以也被称为“对角线算法”。它的校验数据生成过程相对简单,但在两台硬盘驱动器掉线的时候,只能支持逐个数据块的恢复,而且不 同条带之间还要一起参与计算(斜向嘛)。这种做法在分布式校验的环境中很是麻烦,却很适合独立校验的口味,于是成为了RAID-DP的基础。
NetApp的RAID-DP采用独立校验盘,以“P”和“DP”代表,后者体现出了与前述“对角线算法”的共同点
真正被广为接受的还是基于P+Q的RAID 6算法。这个P么,就是RAID 5的那个P(Parity),也即同一条带中全部原始数据(当然不包括Q)的XOR运算结果。至于多出来的Q,则是同一条带中其他数据(包括P)进行伽罗 华域(Galois Field,简称GF,有限域)乘法运算的结果。
广为采用的P+Q RAID 6原理示意图,P和Q虽然是对角线分布的,但运算都发生在水平方向上,即同一条带(Stripe)内,这简化了恢复过程
P+Q算法的优势在于恢复数据相对简单。在一台硬盘驱动器掉线时,丢掉原始数据或P内容的条带,与RAID 5一样利用XOR恢复数据;丢掉Q域的条带,利用GF变换的逆运算恢复数据。而如果有两台硬盘驱动器掉线,就需要同时使用XOR和GF变换来恢复数据了。
然而,无论采用哪种算法,RAID 6都比RAID 5需要更多的计算资源。如果I/O处理器(IOP)没有对此进行专门的优化,性能下降显然是不可避免的。
RocketRAID 3220概览
作为一种算法,P+Q当然可以用软件来实现,从这一点来说,用PowerPC还是Intel的IOP家族,没有什么区别。不过,对于计算Q所需要的GF变换,用硬件来执行多少还是要比软件更快些。
Intel IOP331架构图,左下角的Application Accelerator即应用加速单元
Intel IOP331是芯片业巨人第一款集成RAID6硬件加速引擎的I/O处理器,其应用加速单元(Application Accelerator Unit,AAU)不仅可以处理XOR操作,还能够加速P+Q算法的执行。这款133 MHz PCI-X接口的IOP与x8 PCI-E to 133 MHz PCI-X的IOP333构成了完整的RAID 6加速阵容,两者都具有最高800MHz的频率,支持最高2GB的64位DDR333或1GB的64位DDRⅡ400内存,可以满足不同的目标应用环境 (PCI-X或PCI Express)。
RocketRAID 3220 SATA RAID卡
HighPoint RocketRAID 3220就是一款采用500MHz IOP331的SATA RAID卡,并配有128MB具备ECC保护的DDR333 SDRAM。Marvell 88SX6081控制芯片提供了8个支持3.0Gb/s(向下兼容1.5Gb/s)和NCQ(Native Command Queuing,本机命令排队)的SATA端口,而两个符合SFF-8087规范的Mini SAS 4i连接器大大节约了板上空间,使RocketRAID 3220得以成为一款半长半高(LP)规格的8端口SATA RAID卡。至于总线接口么,自然是64位133MHz PCI-X了。
Marvell 88SX6081 SATA控制器和两个Mini SAS 4i连接器
RoeketRAID 3220支持RAID 0, 1, 10, 5, 50和JBOD,当然还有最为重要的RAID 6。其他支持的功能包括在线扩容 (Online Capacity Expansion,OCE)和在线RAID 迁移(Online RAID Level Migration,ORLM),可以快速和背景初始化以方便RAID立刻投入使用,热交换和热备援(hot spare)硬盘驱动器用于自动RAID重建。硬盘驱动器交错启动(Staggered Spin-up)和活动/失败灯(HDD Activity/Failed LED)设计等Serial ATA Ⅱ定义的功能都无需多说, BIOS启动(硬盘或硬盘组)和SAF-TE管理功能也获得支持。
RocketRAID 3220的包装中除了卡、用户手册、CD光盘之外,还有两根Mini-SAS to SATA线缆
一台服务器可以同时插4片RocketRAID 3220,即最多连接32台硬盘驱动器,容量可高达20TB以上。为了方便测试的进行,送测RocketRAID 3220的北京微辰信息技术有限公司(HighPoint China)一并提供了8台500GB的希捷(Seagate)Barracuda系列SATA硬盘驱动器,总容量为4TB。
RocketRAID 3220的BIOS设置界面,可以看到测试所用的8台硬盘驱动器
快速设置
与其他RAID卡一样,RocketRAID 3220可以在BIOS设置界面中进行简单的配置——开机过程中看到提示后按下Ctrl+H组合键即可进入。
可以看到RocketRAID 3220支持的RAID类型
在RocketRAID 3220的BIOS设置界面中可以创建(Create)、删除(Delete)和初始化(Initialize)RAID,添加/移去热备用磁盘(Add/Remove Spare),以及更改一些常用的参数。
选择配置RAID所需要的硬盘驱动器
配置RAID 6,可以决定RAID组的名字(Array Name)、写策略(Cache Policy)和是否立即初始化
可以更改交错启动时每次启动(spinup)的硬盘驱动器数量
以及重建的优先级(Rebuild Priority)
BIOS设置界面没有提供在线RAID迁移(ORLM)等较为高级的功能,但是借助于察看(View)功能,可以了解过程的进度。
从RAID 6(Source)到RAID 50(Target)的在线迁移
进阶管理(上)
BIOS设置界面提供的功能毕竟有限,要更充分地发挥RocketRAID 3220的作用,必须使用HighPoint RAID管理控制台(Management Console)软件。
用RAID管理控制台配置RAID的过程与BIOS设置界面基本相同,但提供了更多的选择,譬如可以选择前景(Foreground)或背景 (Background)初始化(下图②)。不过,能够使用鼠标的图形界面未必更为好用——选择组建RAID的硬盘驱动器时(下图③),需要先在 Available Disks中点选,接着点击右向绿色箭头添加到Selected Disks中,然后不断重复此步骤(反之亦然),Available Disks中排在最上方的硬盘驱动器并不会自动切换到选中状态,以减少不必要的鼠标移动。相比之下,在BIOS设置界面中,只需要回车键与向下的方向键配 合就可以完成了,速度反而更快。
图形界面配置RAID三部曲,最后一步挑选磁盘的设计有待改进
用8块500GB硬盘驱动器建立RAID 5或RAID 6,可用容量分别为3.5TB和4TB,完成(前景)初始化需要的时间基本相同——都是3小时零2分钟。在初始化过程中,随时都可以通过RAID管理控制 台察看进度。如果是RAID 10或RAID 50这样的组合RAID,还能够看到低层RAID(RAID 1或RAID 5)的信息。
HighPoint RAID管理控制台的主界面,可以看到阵列的状态(点击图片放大)
硬盘驱动器的信息显示也很详尽,加锁的图标代表出现问题(Critical)(点击图片放大)
通过设备管理(Device Management)功能,可以看到RAID卡的主要信息,并能够相对精细的调整重建的优先级。如果选择具体的硬盘驱动器,还能开启或关闭其读缓存 (Read Ahead)、写Cache及NCQ功能。此外,端口(Channel)信息也是可以查看的(点击图片放大)
RAID管理 控制台启动时会检查现有RAID的状态,如果发现其中有硬盘驱动器离线(RAID 5只允许1个,RAID 6不超过2个),而热备盘池(spare pool)里又有可用的硬盘驱动器,弹出的RAID Checking窗口会提醒用户选择用于重建的硬盘驱动器。若是RAID的损坏程度很严重,已不可能重建,弹出窗口则会询问用户是否将其删除。
RAID检查(RAID Checking)窗口的两种典型情况
对于像校验(Verify)和重建(Rebuild)这种不能放在访问高峰期且适合在无人值守时进行的操作,RAID管理控制台提供了定期执行功能。新 任务定时向导(New task schedule wizard)只需两步就可以设定校验或重建的对象、执行时间及频度,简易快捷。
新任务定时向导两步走
不过,RAID管理控制台的加载过程却不够智能——要先读取事件日志(event log)。随着使用时间的推移,事件日志越来越长,加载过程中的等待也就让人难以忍受。尤其是打开管理界面时,如果当时在使用其中的RAID组,则 RAID的性能和读取日志的速度都会受到影响。虽然可以通过按键跳过日志读取过程,但总应该有更好的处理办法才是(譬如在用户需要访问事件日志的时候才读 取,或者只显示上次以来最新的事件)。
RAID管理控制台加载过程中获取事件日志
进阶管理(下)
RAID 6可以应付同时有两台硬盘驱动器离线的状况,因此,在1或2台硬盘驱动器离线(Offline)时,RAID管理控制台中的Status显示为 “Critical”,RAID组的图标多一个红底的黄色惊叹号,但仍能运转,并保证数据不丢失。不过,如果没有及时完成RAID组的重建,导致第3台硬 盘驱动器离线,Status就转为“Disabled”,惊叹号也被“x”代替,RAID组失效,数据丢失。
RAID 6分别有1、2、3台硬盘驱动器离线的情况(点击图片放大)
按说RAID 6应该能在一台硬盘驱动器离线的情况下继续工作,但在测试RocketRAID 3220时我们发现,其RAID 6运行中拔掉一台硬盘驱动器,除了持续发出报警声音的正常反应之外,连测试平台上的Windows操作系统都报告C盘上的分页文件出错(运行 IOmeter时,性能也急剧下降),然后失去响应,甚至直接蓝屏。不过,只要在管理界面中及时理会弹出的对话框,或者报警后才进入管理界面重新扫描一 次,报警声音便会停止。如果先拔掉硬盘驱动器再开机,后果也没有那么严重。
更换一台硬盘驱动器后进行重建的RAID 6,全过程耗时不少于初始化
可能是受到端口数限制的缘故,RocketRAID 3220仅支持到RAID 50,而没有RAID 60。因为在8台硬盘驱动器的情况下,RAID 60的效率与RAID 10相当,但安全性上的优势不再明显,消耗的计算资源和对性能的影响却大得多,相比之下还是RAID 50较为现实。因此,在RAID 6的测试完成之后,我们将其转换为可用容量不变的RAID 50,顺便检验一下在线RAID迁移(ORLM)的实际效果。
通过在线RAID迁移向导将RAID 6迁移到RAID 50,由于有8台硬盘驱动器,每个RAID 5成员的硬盘驱动器数量为4(注意从②到③的变化)。实际上在①之前还有一个让用户选择目标阵列类型和名称的步骤,因与创建RAID时相同而略去
在线容量扩展(OCE)和在线RAID 迁移都是很耗时的过程,而我们迁移的RAID 6还处于更换了两台硬盘驱动器后需要重建的“Critical”状态,因此过了近42个小时才得到最后的RAID 50。如果实际使用中同时在访问RAID,花费的时间肯定会更长。
由更换了两台硬盘驱动器的RAID 6在线迁移到RAID 50的过程。在RAID管理控制台中,OCE总是与ORLM结伴出现
测试平台
HighPoint RocketRAID 3220的测试在强氧科技为存储时代定制的服务器平台上进行。这个服务器平台的核心是基于Intel 5000P芯片组的Supermicro X7DB8主板,目前只安装了一颗3.0GHz双核Intel Xeon 5050处理器,以及2GB DDR2-667 ECC FB-DIMM内存。操作系统采用微软Windows Server 2003 R2简体中文企业版,安装在Ultra320 SCSI接口的Maxtor Atlas 10K Ⅳ硬盘上。
强氧科技定制服务器平台配置
主板 | Supermicro X7DB8(BIOS版本:1.3b) |
CPU | Intel Xeon 5050(双核3.0GHz/FSB 667MHz/4MB) |
内存 | 2GB DDR2-667 ECC FB-DIMM(1GB × 2) |
SCSI | 板载Adaptec AIC-7902W双通道Ultra320 |
网络 | 板载Intel (ESB2/Gilgal) 82563EB双端口千兆以太网控制器 |
显卡 | 板载ATI ES1000 |
主硬盘 | Maxtor Atlas 10K Ⅳ 146GB(10000RPM/Ultra320 SCSI) |
操作系统 | Windows Server 2003 R2简体中文企业版 |
主板驱动 | Intel INF 8.3.0.1013 |
显卡驱动 | 8.24.3.0 |
SCSI驱动 | Adaptec Ultra320 SCSI Drivers v7.0.0.6 |
为了保证测试的平稳进行,强氧科技为这台服务器配备了3个500W的ABLECOM SP502-TC热插拔冗余电源。高大的立式机箱提供了7个3.5英寸和3个5.25英寸驱动器仓位,使其能同时胜任内部存储和外部存储的测试。
强氧科技为存储时代定制的服务器平台
软件配置
兼容性对RAID卡是非常重要的,因此我们在测试时都会选择(当时)最新版本的固件和驱动程序,还有助于避免各式可能的bug带来不良影响。同样地,RAID管理工具和IOmeter测试软件的版本也是最新的。
软件 | 版本 |
RocketRAID 3220固件 | v1.2.18.8 |
Microsoft Windows设备驱动程序 | v1.1 |
RAID管理工具 | v3.14.3 |
IOmeter测试软件 | 2006.07.27 |
可以接受的性能
对RAID 6来说,性能显然是重中之重,因此我们在8台500GB硬盘驱动器的背景下,以RAID 0、RAID 10、RAID 5和RAID 50作为参照,分别用IOmeter测试软件的顺序读、顺序写、随机读、随机写、File Server和Web Server脚本比较了RAID 6的性能差异。
HighPoint RocketRAID 3220 SATA RAID卡顺序读测试
顺序读:在访问的数据块尺寸达到32KB之后,RAID 10因其RAID 1的成分而最先掉队,RAID 6的成绩则 一直紧追RAID 5,并略强于RAID 50。在数据块尺寸超过256KB之后,RAID 0、5、50和6的成绩都出现了奇怪的上下波动,可见RocketRAID 3220处理大尺寸数据块的能力有待改善。从理论上来说,RAID的顺序读和随机读性能应当与磁盘数量成正比,而与RAID类型的关系不大,所以 RocketRAID 3220的RAID 10性能也还有提高的余地。
HighPoint RocketRAID 3220 SATA RAID卡顺序写测试
顺序写:RAID的顺序写性能与数据盘的数量成正比,放到我们的测试环境中,RAID 6的顺序写输出应该能达到RAID 5的85%(七分之六,约为0.857)。在我们的测试中,RAID 6一直略低于RAID 5,但直至访问的数据块尺寸达到1MB,才下降到95%以下,并在10MB时达到最大值——88%,表现超出预期。不过,从256KB开始的RAID 0超高和RAID 10超低的异常曲线,证明这确属RocketRAID 3220的“顽疾”。或许,RAID 5、50和6的顺序写性能还可以更好些。
HighPoint RocketRAID 3220 SATA RAID卡512字节随机读测试
随机读:正如前面所言,随机读性能和RAID类型无关,因此5条曲线有着大体相似的轨迹并不令人感到奇怪,特别是RAID 6和RAID 50几乎保持重合。意外的是,从并发任务数达到16开始,RAID 5反而低于RAID 6及50,而RAID 0也在并发任务数达到64之后加入了进来,这显然不是RAID的普遍规律,而应归于RocketRAID 3220的“个体差异”。
记 得曾有厂商在宣传其RAID 6加速引擎时称,可以让RAID 6的性能达到RAID 5的99%。就顺序读和随机读而言这不难做到,但对随机写是不成立的,因为RAID 6在增加了可靠性的同时,牺牲了部分随机写性能。在随机写操作时,拥有同样多硬盘驱动器的RAID组中,RAID 6所花费的时间是RAID 5的1.5倍。每次RAID 5(7D + 1P)进行一次随机写操作,实际上产生了4个I/O:读老的应用数据,读老的校验数据,写新的应用数据和写新的校验数据(P)。而RAID 6做同样一个随机写操作,实际上需要6个I/O:读老的用户数据,读老的校验数据P,读老的校验数据Q,写新的用户数据,写新的校验数据P,写新的校验数 据Q。这就造成了RAID 5(7D + 1P)和RAID 6(6D + 2P)随机写的33%性能差距,而且不是提高IOP的运算能力可以解决的。
HighPoint RocketRAID 3220 SATA RAID卡512字节随机写测试
随机写:RocketRAID 3220的随机写性能与上述理论符合得很好——从并发任务数达到8开始,就保持在RAID 5性能的67%左右,浮动幅度不超过1%。RAID 50的性能比RAID 5略低,基本上处于同一水准。不过,问题在于RAID 5的随机写性能与RAID 0相比差距实在太大了——只有一半乃至四分之一,甚至都被RAID 10甩掉很远。真不知是应该归罪于IOP331,还是RocketRAID 3220的固件算法。
HighPoint RocketRAID 3220 SATA RAID卡File Server脚本测试
文件服务器:文件服务器也是随机访问的测试项目,其读写成分比例为2:1,测试成绩也综合了这两方面的表现,RAID 6当然是最差,但与RAID 5的差距就没有随机写测试那么大了。不过RAID 50也排在RAID 5前面,显然是得益于随机读的反常优势。
HighPoint RocketRAID 3220 SATA RAID卡Web Server脚本测试
Web服务器:全部是随机读取的操作,只是数据块尺寸成分比较复杂——由9种规格的数据块尺寸构成,其中512B占22%,1~4KB占 46%,8~512KB占32%。正所谓“万变不离其宗”,几条曲线的分布规律与随机读测试非常相似,只是纵坐标上的数值有一定程度的下降。
RAID 6可以用了吗?至少从RocketRAID 3220来说,答案是肯定的。从上面的各项测试来看,除了与随机写入有关的操作,RAID 6都体现出了与RAID 5及RAID 50相当的水准。与RAID 6增强的容错能力相比,某些相对次要的性能上的不足是可以接受的。以RocketRAID 3220为例,与其选择RAID 50,还不如改用磁盘空间利用率相同但能够全面抵御双硬盘驱动器故障的RAID 6。诚然,RAID 6的随机写性能只有RAID 5(和RAID 50)的三分之二,但这对SATA RAID来说影响并不是很大。SATA硬盘驱动器的优势是容量大且价格低,持续传输能力也与高转速(10K及15K RPM)的SCSI/SAS/FC硬盘驱动器相去不远,但在随机访问能力上存在较大的差距,因此SATA RAID适用于视频监控及流媒体应用,而不宜在强调IOPS和高可靠性的交易密集型应用中“以卵击石”。从目标应用对随机访问(特别是随机写)能力要求不 高的角度来看,不要说RAID 6比RAID 5低三分之一,就是RAID 5只有RAID 0的四分之一(仅限于RocketRAID 3220的随机写成绩),也无碍大局。
综合考虑SATA RAID相对较长的重建时间和RAID 6总体表现尚佳的性能,建议用户们不妨让RAID 6给SATA RAID多上一道保险。