Differential RAID:针对SSD可靠性重新思考

英文原文:Differential RAID: Rethinking RAID for SSD Reliability

 

Differential RAID:针对SSD可靠性重新思考

Mahesh Balskrishnan, Asim Kadav, Vijayan Prabhakaran, Dahlia Malkhi硅谷微软研究院,山景城,美国加州

维斯康星大学,麦迪逊,美国威斯康星州[email protected], [email protected], [email protected], [email protected]

 

摘要    

和硬盘相比,固态硬盘显示出相当不同的故障特征。具体来说,SSD的误码率(BER)随着受到更多的写入而攀升。因此,由SSD组成的RAID阵列受到相关故障的影响。通过在阵列中平衡写入,RAID可能会在相似的时间里用坏所有设备。当阵列中的一个设备寿命结束,其余设备的高BER可能导致数据丢失。我们提出了Diff-RAID,一种基于校验的冗余解决方案,它在SSD阵列中创建年龄差异。Diff-RAID在阵列中不均匀地分配校验块,利用他们的更新速率更高,以不同的速率老化设备。旧设备被新设备更换时,为保持这种年龄差异,由Diff-RAID重新排列分布在每个驱动器的校验块。通过在模拟器中使用来自12个闪存芯片的实际BER数据,我们评估了Diff-RAID的可靠性,并显示出它比RAID-5更可靠,某些情况下多达几个数量级。我们还在一个由80 GB英特尔X25-M固态硬盘组成的5设备阵列上,使用软件实现评估Diff-RAID的性能,表明它提供了吞吐量和可靠性之间的折衷。

 

类别和主题描述符

D.4.2 [操作系统]:存储管理;D.4.4 [操作系统]:可靠性;D.4.8 [操作系统]:性能

 

总括 设计,性能,可靠性

 

关键词 RAID,SSD,Flash

 

1. 介绍

最近几年出现的固态器件(SSD)在许多场景中成为了硬盘驱动器的可行替代品。商品固态硬盘可以提供数以千计的随机读取和写入每秒,在高性能计算数据中心消除可能的I / O瓶颈的同时降低功耗。虽然早期的SSD极其昂贵,但在最近的几年,Multi-Level Cell(MLC)技术的出现显著降低了SSD的成本。

但是,MLC设备严重受低耐力极限限制。在连续写入之间,SSD中的单个Flash页面需要昂贵的擦除操作。每次擦除都会使设备的可靠性降低,增高访问误码率(BER)。所以,SSD制造商不仅规定了最大误码率(通常情况下)与硬盘一样大约10-14),还规定了一个保证这个最大误码率的擦除数限制。对于MLC设备,这个擦除限制通常被指定为每个块5000到10000个周期。随着闪存位密度的不断提高,擦除数限制预计也会减少。

设备级冗余目前是针对存储故障的第一道防线。现有的冗余选项- 如任何RAID级别 - 都可以不加修改地使用以防止SSD故障,并掩盖老化固态硬盘的高误码率。不幸的是现有的RAID解决方案未能为存储在SSD里的数据提供足够的保护。通过在设备之间平衡写入,它们会导致多个SSD的磨损速度大致相同。直观地说,这样的解决方案最终试图保护数据,通过将其冗余地存储在其他同样旧的SSD上。在本文后面,我们量化了这种方法的无效性。

我们提出Differential RAID(Diff-RAID),一个新的基于校验的技术,类似于RAID-5,明确为可靠的SSD存储而设计。Diff-RAID尝试创建一个跨设备的年龄差,以在任何时间点限制阵列中高BER的SSD的数量。换句话说,Diff-RAID平衡阵列中较旧设备的高BER与新设备的低BER。

为创建和维护这个年龄差异,Diff-RAID修改了RAID-5中的两个现有机制。首先,Diff-RAID在设备间不均匀分配校验块; 因为校验块比数据块更经常更新,由于随机访问模式,拥有更多校验块的设备接受更多的写入,并因此老化更快。Diff-RAID支持任意的校验分配,提供一个吞吐量和可靠性之间的细粒度折衷曲线。其次,Diff-RAID在驱动器替换时重新调整校验块的分布,以确保阵列中最老的设备始终包含最多的校验块,并以最高的速度老化。这个确保了,当新设备替换阵列中的坏设备时,通过不均衡校验块分配造成的年龄差异得以保持。

 

 

 

Diff-RAID屏蔽老化固态硬盘上的高误码率的能力带来多重优势。首先,它提供了比RAID-5或RAID-4更高的可靠性,同时保留了这些方案低空间开销的特点。其次,它打开了使用商品固态硬盘超过擦除限制的大门,通过将数据冗余存储在更新的设备上,以保护存储在过年龄限的SSD上的数据。第三,这可能会减少设备对昂贵的硬件纠错码(ECC)的需求; 随着MLC密度继续增加,这种ECC的成本预计会令人望而却步。这些好处的代价是吞吐量有所下降及在设备更换时的复杂性。

我们使用软件评估Diff-RAID的性能,它在英特尔X25-M SSD组成的5设备阵列上运行,综合使用了合成数据和真实服务器的记录。我们还通过向模拟器导入真实的闪存错误率来评估Diff-RAID的可靠性。结果显示,对于特定的故障模式,Diff-RAID比传统的RAID-5提供高达四个数量级的可靠性。

本文的其余部分组织如下:第2部分介绍了相关SSD故障的问题详情。第3节描述了Diff-RAID。第4部分评估Diff-RAID可靠性和性能。第5节总结相关工作,第6部分描述了Diff-RAID的未来目标,第7节下结论。

 

2. 问题描述

2.1 闪存简介

基于NAND的闪存的可以读或编程(写)的最小单位,是一个页面(通常是4 KB大小)。空白页中的所有位都设置为1,然后写入数据到页面涉及设置其中的一些位为0。页面中的各个位不能重置为1; 重写页面到不同的位模式需要一个中间擦除操作,将所有位复位回1。这些擦除是在大块上执行的(例如,128 KB)跨越多个页面。块在被擦除的时候会老化,表现出越来越大的BER,一旦超过擦写限将难以控制的高。

由于对写入操作的这些基本约束,早期基于闪存的设备执行就地页面修改时遭受非常差的随机写入延迟;写入随机选择的4 KB页面需要整个128 KB的擦除块被擦除和重写。此外,更新一些页面比别的更频繁的非平衡负载可能导致不均匀地损耗设备。

为了避免这些问题,现代SSD实施了一个基于日志的块存储,提供一个逻辑地址空间,它与闪存芯片上的物理地址空间分离。SSD维护一个逻辑位置和物理位置之间的映射,以擦写块为粒度。写一个随机的4 KB页面涉及读取周围擦除块,并写入一个空的,之前擦除的块,在关键路径中没有昂贵的擦除操作。另外,逻辑到物理块的映射是由磨损均衡算法驱动的,以便在设备上均匀磨损。固态硬盘通常包含比宣传的更多的闪存,以维持日志记录更新,即使整个逻辑地址空间已经被占据;例如,一个80 GB的SSD可能包含额外的10 GB的闪存。

根据闪存的类型,SSD有两种类型使用:单层单元(SLC)和多层单元(MLC)。一个单元是闪存的基本物理单位,存储电压值以表示位值。SLC闪存在每个单元中存储一个位,MLC存储多个比特。 SLC提供十倍于MLC的擦除极限(100,000次与10,000次),但目前价格贵3-4倍。当前行业趋势更趋向于每个单元更多位数的MLC技术。

闪存错误模式:由于没有运动部件,固态硬盘的MTTF(平均无故障时间)要比硬盘高得多。因此,SSD的主要故障模式与底层闪存的位错有关。位错误可能由于写入(程序干扰),读取(读取干扰)和随时间变化而产生(保持错误)[6,10]。所有这些故障模式随着设备的老化发生频率更高1。实际上,SSD使用硬件ECC来降低错误率; pre-ECC值被称为原误码率(RBER),post-ECC值被称为不可纠正误码率(UBER)。

图1显示了随着每块擦除的次数增多,闪存上升的RBER和UBER。我们假设4位ECC每512字节扇区(目前MLC闪存的行业标准[10]);这意味着足够的ECC用于纠正每扇区4个或更少位错。图中的RBER数据对应到[6]中的D-MLC32-1闪存芯片,其额定值为10,000循环;我们使用在[10]中所描述的方法来计算UBER。

 

2.2 使用SSD的RAID的问题

采用硬盘驱动器的设备级冗余已成功使用数十年。SSD采用的标准的基于块的接口,允许现有的冗余和分条解决方案(如RAID级别)无需修改地工作。我们检查特定RAID(RAID-5)的可靠性,虽然我们的观察适用于任何RAID级别的不同设定。我们先来介绍一下RAID-5的操作,然后概述了使用它的问题。

在N设备的RAID-5阵列中,数据块被分条跨越N-1个设备,并且为每个设备计算校验块并存储在第N个设备上。每个条带校验设备的角色轮流充当;因而,阵列中N个设备每个存储相等比例的校验块。只要条带中的N个数据块中有一个写入,条带中相应的校验块必须要更新;因此,对于随机访问工作负载,校验块比数据块接收到更多的写流量。通过轮换校验设备,RAID-5的目标是消除阵列中的任何校验瓶颈,在阵列中均匀散布写负载。

本文的关键洞察是这种写负载平衡可能会导致SSD阵列发生相关故障。由于RAID-5阵列中的所有设备都接收到相似的写入工作量,他们以相似的速度消耗擦除周期。结果,阵列可能处于多个设备的状态已经达到了擦除极限,并且表现出很高的水平UBER,使相关故障很可能发生。

特别是,我们担忧阵列遇到驱动器故障时,由于剩余驱动器的位错误随后不能重建失去的驱动器。由于驱动器出现故障后阵列没有冗余,阵列中任何存在的位错误将不可纠正。在关键数据结构中的单个位错 - 例如作为文件系统超级块 - 可能导致大量数据丢失。对于多TB的硬盘驱动器阵列,数据量庞大使得可能产生位错误[12],这种故障模式越来越受到关注。据我们所知,我们第一个指出了其对于任意大小的SSD阵列的重要性(在本文的早期版本[8])。

 

 

 

图2显示了对于RAID-5阵列(5个设备,每个80 GB),随着数据写入,数据丢失概率的改变;有关模拟设置的更多详细信息,请参见第4节查看模拟环境设置的细节。在图中的每个点,我们绘制了如果其中一个设备故障的话,将会发生的数据丢失的概率。当达到10,000的擦除极限时,此设备都被新设备替换。一开始,所有的设备都是全新的且具有低UBER,因此数据丢失的可能性非常低。随着阵列接收更多的写入,设备以固定速度老化;曲线上的峰值对应于一个点,此时所有设备同时达到擦除限制且被替换,然后将阵列替换为一组全新的设备。

重要的是,这种现象并不是局限于RAID-5。例如,它也发生在固定校验块配置(RAID-4)中,因为所有的数据设备以相同速率老化。它在镜像配置(RAID-1,RAID-10)中发生的程度较小,因为两个镜像都以相同的速率老化。拥有两个校验设备(RAID-6)可防止当一台设备故障时数据丢失;但是,如果丢失两个设备数据丢失可能发生。本质上,任何使用SSD的RAID方案带来更低的可靠性,相比系统管理员愿意相信的。

 

3. Differential RAID

Diff-RAID是一种基于校验的RAID解决方案,非常类似于RAID-5。我们认为基于校验的方案对于SSD十分适合;它们非常高的随机读取速度消除了对于随机写的传统的同步读取瓶颈。在配置为RAID-5的Intel X25-M的5设备阵列上,我们能够实现向阵列的每秒14,000次随机写入;在硬盘上进行类似的实验会被限制在每秒几百次写入,由于对关键磁道的随机寻找。

因此,我们的重点是提高这个基于校验的方案的可靠性。我们从基本的RAID-5开始设计并且改进两个关键方面。一是校验块不均分布允许Diff-RAID以不同速率老化SSD,以在阵列中创建年龄差异。其次,驱动器更换时校验块转移允许Diff-RAID维持此年龄差别,当旧设备从阵列中撤出并由新的SSD取代时。

 

3.1 不均匀校验块分布

Diff-RAID控制着不同设备的老化速率,通过在它们之间不均匀分配校验块来实现。随机写入导致校验块比数据块承受更多写入量;每次随机写入一个数据块,相应的校验块也必须被更新。因此,具有更多校验块的SSD会获得更高数量的写入次数且老化相应更快。

在下面的讨论中,我们按每个块所使用的平均循环数来衡量一个设备的年龄,假设一个完美的均衡调节算法在块中将其均等化。例如,如果一个设备内每个块用完了大约7500个周期,我们说这个设备已经用完了7500个周期的寿命。

我们用百分比的n元组来表示校验块分配;例如(40; 15; 15; 15; 15)代表5设备阵列,第一个设备拥有40%的校验块,其他设备每个存储15%。一个极端的不均衡校验分配的例子是RAID-4,用(100; 0; 0; 0; 0)代表5个设备,其中第一个设备保存所有校验块。另一个极端是RAID-5,用(20; 20; 20; 20; 20)代表5个设备,其中校验块均匀地跨所有设备分配。

对于只包含随机写入的工作负载,给定任意的校验块分配,容易计算设备的相对老化率。对于一个n设备阵列,如果aij表示第i个设备相比第j个设备的老化速率,pi和pj是分配给相应的设备的校验块比例,则:

 

在5设备RAID-4的例子中,校验设备相比其他设备的老化比率是4;换句话说,校验设备的老化速度是其他设备的4倍。由于RAID-4是极端的不均衡分配的例子,它代表了在一个阵列中老化速率差异的上界;所有其他校验分配将导致更少的差异,RAID-5在另一个没有差异的极端。

 

3.2 校验块移位的驱动器更换

长期来看,不均衡的校验块分布不足以保持年龄差异。为了理解这一点,考虑配备5个设备的RAID-4阵列。在随机写的工作负载下,阵列中的数据设备将近似于消耗2,500个擦除周期,当校验设备达到10,000个周期并被替换。如果我们允许新的替换设备是旧设备的逐字副本 - 就像常规的RAID所做的那样 - 它将保持所有的校验块继续比数据设备快四倍老化。第三次这样的校验设备的替换后,数据设备都消耗了7500个周期,导致了一个老化且不可靠的阵列。当所有设备都达到10,000个周期时,第四次校验设备的替换将会发生。

 

 

 

直观地说,在每次更换校验驱动器之后,新更换的驱动器的老化速度比旧的数据设备更快,因此赶上了他们。结果是,由不均衡校验分配造成的年龄差异在驱动器更换时不能保持。为了确保年龄差异保持,我们希望设备的老化率与其年龄成正比:设备越老,老化越快。如果是这样的话,任何年龄的差异将在驱动器更换时保持。

消耗老旧设备更快的另一个原因是,旧SSD的存在使阵列更不可靠,而且因此我们希望快速用完它的擦除周期并尽快移除它。相反,年轻的固态硬盘使得阵列更可靠,因此我们希望它们保持年轻尽可能地长。如果两个固态硬盘在同一个年龄,我们希望一个比另一个老化地更快,以创造一个年龄差异。

因此,在每次设备更换时,我们改变阵列中的设备的逻辑位置,按年龄对它们排序,然后再将校验块分配给他们。在RAID-4的简单例子中,每当校验设备被替换,剩下的最老的数据设备变成了新的校验设备(任意打破关系),而新的替换设备成为数据设备。

图3说明了这个4设备阵列的方案,校验块分配为(70; 10; 10; 10);由等式1,这种分配导致第一个设备老化速度是其他三个设备的两倍。结果,当驱动器1达到10,000个擦除周期时,另外三个SSD在5000个周期。当驱动器0被替换时,驱动器1被分配了70%校验块,其他SSD(包括新的SSD)分别被分配10%。

Diff-RAID提供了可靠性与吞吐量之间的折衷:校验分布越偏向一个单一的设备,年龄差异越大,因此可靠性越高。差异的校验分配导致吞吐量低,可靠性高,而均衡校验分配导致高吞吐量和低可靠性。对应到RAID-4的Diff-RAID校验分配提供最少的吞吐量,但最高的可靠性,因单一校验设备成为一个瓶颈。而对应于RAID-5的则提供了最高的吞吐量,最低的可靠性。由于Diff-RAID支持任意的校验分配,管理员可以选择权衡曲线上的一个点,以符合应用的要求。

 

3.3 年龄分布收敛性分析

有趣的是,如果我们继续在多次设备替换时以给定的比例改变校验分配,在更换时间观察到的设备年龄最终收敛到稳定的分布。图4绘出了在更换时设备的年龄分布情况,对于一个校验分配为(80; 5; 5; 5; 5)的5设备阵列。经过多次更换,设备更换时的年龄趋于一致,所以最老的剩余设备总是在5,750擦除周期,同时其他设备分别在4,312.5,2,875和为1,437.5个周期。图5显示了一些不同的校验块分配的年龄稳定分布;在x轴上是单个设备上的校验的百分比,其余的均匀分布在其他设备上。重要的是,随着时间的推移替换的数量不会取决于校验分配:Diff-RAID和传统的RAID-5用了完全一样的替换次数。

 

 

 

我们可以证明任何校验分配最终都会收敛到一个平稳的分布。让我们通过一个向量(t1,t2,…tk)来表示磁盘老化的不同速率。回忆公式1,它允许我们在给定任意校验分配的情况下计算这个向量,假定具有完全随机的工作量。这个向量被归一化和排序,所以t1 = 1,且对于所有j,tj >= tj + 1。这意味着在设备1老化100单位的这段时期,设备2老化t2*100单位,设备3为t3*100单位等。在实践中,老化向量是工作量和校验分配的函数。在我们的分析中,我们假设一个随机的工作量,老化向量只反映了校验分配;然而,分析适用于任意从真实工作量和校验分配导出的老化向量。

假设设备的预期寿命是A 个老化单元。现在,考虑一个被装入系统的新设备,当设备1烧坏时。让我们把这个新设备的号码设为k + 1。设备2替换了设备1的角色,当设备k + 1进入时;在这时,它已经老化了A* t2,且它继续以速率t1老化;在A*t3年龄设备3替换设备2,并继续以t2的速率老化,等等。A2是设备2在这段时期所经历的老化单元的数量,直到它也失效。在此期间,设备k + 1老化A2*TK。然后,设备3成为第一设备,并经过A3老化单元后失效,在此期间装置k + 1老化A3*Tk-1。等等。最后的老化时间是Ak,直到设备k + 1需要替换阵列中的第一个设备,它的老化增量是Ak*t2。

总之,当设备k + 1替换阵列中的第一个设备时,它的年龄是A2* tk + A3* tk-1+ ... + Ak* t2。我们获得设备k + 1的剩余失效时间Ak + 1,从这个值开始得出Ak + 1 = A -(A2*tk + A3* tk-1+ ... + Ak* t2)。更普遍的,对于任一d,Ak + d是剩余失效时间,在它达到年龄A1 + d* tk + A2 + d* tk-1+ ... +Ak-1+ d* t2后。

我们要设计老化向量,使得Ak + d是一固定的正值,以便在新设备替换第一个时,它有一个合理的期望剩余寿命。在实践中,我们可能只需要考虑几次设备替换,因为很难想象在经历了一系列的设备更换后仍使用相同的SSD组成的RAID,在升级整个技术之前。

不过,我们可以设计一个替代策略,对于任意次的替换后Ak+d保持不变。对于一个替换设备,用B表示其剩余期望寿命。在设备1老化A单元的期间,设备2应该以r1,2 =(A-B)/A的速率老化。设备3应该以r1,3的速率老化A时期后达到年龄A-B;在时期B速率为r2,3,也就是说,A-B= A* r1,3+ B* r2,3。等等。

执行k次设备更换后,出现一个稳定的状态分配使B永远固定,简单地使t2 + t3 +... + tk =(A-B)/ B。我们得到Ak + d =A -(A1 + d*tk +A2 + d* tk-1+ ... +Ak-1+ d* t2)=A – B *(A – B) / B = B,而且此不变量继续保持。相反,如果老化向量是固定的,那么要更换的第二个阵列设备的剩余寿命收敛于B,满足上面的等式。简而言之,要看到这一点,请注意如果更换设备的剩余寿命超过B为c,那么在更换时设备k + 1的剩余寿命是A -(B + c)((A-B)/ B)= B - c *(A-B)/ B = B。而相反,如果它是B - c,它变成B + c *(A-B)/ B = B。因此,更换设备的寿命逐渐收敛到B。

例如,我们如果有三个设备,老龄化率稳定在(1; 1/2; 1/2)。在第一次更换期间,我们应该以速率1/4老化设备3。设备2变成阵列中的第一个后,我们继续一直以速度(1; 1/2; 1/2)老化。当第一个设备达到完整生命周期,设备替换发生;第二设备达到1/2和第三个1/4。第二个设备将成为阵列中第一个,遭受1/2的损耗;第三个设备移动到第二,1/4损耗,一个新的设备部署在第三阵列位置。然后,在另一个1/2生命期中,阵列中的第一个设备失效;第二设备老化1/4 + 1/2* 1/2并移动以替换第一个;第三个设备老化1/2* 1/2 = 1/4并代替第二。在数量上,连续的替代系列是(1; 1/2; 1/4); (1/2 + 1/2; 1/4 + 1/2* 1/2; 1/2* 1/2)等等。

 

3.4 部署问题

自收敛性:Diff-RAID的收敛性在设计具有稳定的可靠性和性能的阵列时非常有用。给定一个可预测的工作量,对于任意校验分配,可以计算其稳定分布;如果阵列开始运行时,其包含的设备已满足这种老化分布,那么每次阵列中最老的设备达到擦写极限时都会满足那种分布。结果是,阵列的最坏的不可靠性情况很容易预测。

一种可系统管理员制作新的Diff-RAID阵列的可能方法是,通过损耗使用的第一批设备的闪存周期(或相反,在设备达到擦写限前就丢弃)。在乍一看,这似乎是一个昂贵的建议,因为闪存的成本很高。但是,自收敛过程代表涉及固定数量的闪存的一次性花费:在(80; 5; 5; 5; 5)阵列的例子中,它涉及耗费稍微超过14K个擦除周期,或者大概一个半闪存。

例如,考虑具有一个5设备的有5年的使用寿命的Diff-RAID阵列,每年需要更换一个SSD。假设一个SSD花费300美元,存储的总成本在五年内将达到3000美元(不把SSD成本降低考虑在内)。在此例中浪费的闪存大约为450美元,或额外的15%。由于这是一次性成本,我们相信这是一个现实的解决方案。

当然,不首先把它设为一个固定的分布就运行Diff-RAID是完全可以的。正如我们将在我们的评估中展示的那样,由此产生的阵列将不会像预测的那样可靠,但它仍然比传统的RAID-5平均可靠多个数量级。

驱动器替换的实施:我们希望管理员通过简单地移除来替换损坏的设备,并用新设备替换它们,并触发RAID重建。除了重建,校验块必须在设备之间重新分配。一个实行再分配的简单方式是保持相同校验映射,而只是简单地向左移动设备的逻辑位置;如果被替换的设备在位置0,新设备现在占据位置3(在4设备阵列中),所有其他设备向左移动一个位置。这种方式在极大地简化了RAID控制器的逻辑的同时,它需要移动阵列中的所有校验块。

更快的选择是保留设备的逻辑顺序,但改变校验块映射函数为一个新的函数,满足校验块分配比例且使校验块移动最小化。例如,如果在四个设备阵列中和校验块分配为(70; 10; 10; 10),设备0被设备4取代,我们需要从设备4到设备1移动60%的校验块;它总共需要70%已经有10%了。校验块的这种移动将会在设备4上保留10%,并且在设备2和设备3上不发生变化,它们已经分配了10%。结果是,只有60%的校验块需要移动。这个是Diff-RAID的默认驱动器更换实施方案。

另一种选择是延迟校验再分配,并在执行对阵列的实际写操作期间增量执行。每当发生随机写入,我们只是写入新的校验块到新的位置,移动在那个位置的数据块到旧的校验位置。但是,这个选择以未指定的时间减慢了对阵列的写入速度。重要的是,没有重新分配选项在校验块重分布时用掉太多闪存周期;重写所有的校验块总共用了一个擦除周期,且将阵列中的所有设备加起来。

工作负载顺序性:传统的为硬盘设计的RAID-5控制器尽最大努力提取来自工作负载的全分条写入:即跨越整个分条的写入,可以在没有先读旧数据和校验块时执行。他们这样做是为了使用例如控制器中的写缓存优化,以合并多个随机写入为单个全条带写入。但是,现有的RAID-5的实现在这方面只获得有限的成功;现有的企业应用程序如数据库服务器是有名的非顺序的,导致RAID-5逐渐不受欢迎。

一般来说,对于SSD阵列,读写操作是非常快速的,无需为了性能进行全条带写入;我们的评估将证实这一看法。特别是对于Diff-RAID,全条带写入实际上是不利于可靠性的;每个设备在一个全条带写中被写入,减少了设备承受的写工作量的差异性。全条带写入确实具有保存闪存周期的优点,通过执行较少的校验写入;然而,在数据缓存在控制器时,提取它们所需的写入高速缓存的级别将创建一个不可靠的窗口,也增加了控制器的复杂性。结果是,我们不执行任何诸如写缓存以利用全条带写入的优化,。

4.评估

在本节中,我们评估Diff-RAID的可靠性和性能,并将它们与传统的RAID-5阵列进行比较。为了测量可靠性,我们模拟器上实施了各种RAID的配置,并使用来自真实设备的位错误率评估。为了衡量性能,我们实现了一个运行5个Intel X25-M SSD [7]阵列上的软件Diff-RAID;性能测量数据通过运行合成的基准数据和真实的从企业服务器采集的工作负载获得。

差异RAID阵列配置:在下面评估中,我们使用一个5-SSD阵列,每个SSD是80 GB大小。阵列中的所有SSD都是相同的,使用相同的控制器逻辑和闪存芯片。 SSD的MLC芯片的额定擦除极限为10,000个周期。对于可靠性模拟,我们假设阵列中的固态硬盘在它们达到这个限制时被替换。

给定一个SSD阵列,各种可能的Diff-RAID配置取决于分配多少校验块到每个设备。为了缩小方案空间,我们专注于可能分配的一个子集,即集中一个特定比例的校验块到第一个设备,并平均分配剩余的校验块到阵列中的其他设备。具体来说,我们的评估遵循9种不同的配置:(100; 0; 0; 0; 0)(即RAID-4),(90; 2.5; 2.5; 2.5; 2.5),...和(20; 20; 20; 20; 20)(即RAID-5)。

位差错率:为测量一个特定Diff-RAID的配置的可靠性,首先要了解一下MLC闪存芯片的位差错率。我们使用12个不同闪存芯片的原始误码率曲线,它们从两个公开研究中获得。 Grupp等人的第一项研究[6]提供给我们10个不同的RBER曲线。我们从Mielke等人第二项研究[10]获得两条曲线。(具体而言,我们使用在那篇论文命名方式中的钻石和三角形闪存芯片)。

我们假设闪存中的数据受到ECC保护。我们对每个512字节扇区建模4位ECC保护,这是目前MLC闪存的行业标准。我们使用来自第二项研究的UBER方程(Mielke等人[10]的第1页)的RBER值来计算12个闪存芯片的UBER。表1列出了来自两个以前的研究的RBER值和我们计算的对于各种闪存芯片的UBER值,当芯片用完了5000个和10,000个擦除周期时。除了其中一个闪存芯片额定10,000次循环; IM-1的额定为5000次。对于我们的可靠性模拟,我们将SSD阵列建模为由这些闪存类型之一组成,其UBER值随后用于计算RAID可靠性估计,如下面所解释的。

 

 

 

数据丢失概率(DLP):UBER只给出一个不可纠正的错误的概率。我们使用UBER计算单个SSD中数据丢失的概率然后用它来为整个Diff-RAID阵列计算相同的值。具体而言,假定单个SSD故障(或者所有的擦除周期都被使用之后被移除),我们计算发生一个或多个不可纠正错误的概率,在RAID重建事件期间;我们用'数据丢失概率'(DLP)表示它。例如,10-6的DLP意味着100万个RAID重建事件中有1个会失败并导致一些数据丢失。

我们将阵列的DLP分为两种情况:“oldest”指的是Diff-RAID阵列中最旧的设备故障;“any”是指阵列中一个随机选择的设备故障。在典型的情况下,“oldest”是SSD阵列的常见情况,经常发生在当一个设备达到擦除极限并被一个更新的设备时。请注意,在一个RAID-5阵列中,因为所有的固态硬盘以相同的速度老化,没有固态硬盘比其他任何一个都老,因此“oldest”和“any”的情况一样。

 

4.1  Diff-RAID可靠性评估

我们通过用各种闪存芯片的UBER数据运行模拟器,测量Diff-RAID配置的可靠性。在大多数评估中,我们使用合成的随机写入工作负载;我们也评估在真实企业的工作负载下的可靠性,使用跟踪回放。在以下所有测量,我们通过DLP量化可靠性;DLP越低,可靠性就越好。

模拟器通过向随机块发出模拟写入操作来运转,块在阵列提供的地址空间中;每个这些阵列写入导致两个设备写入,一个向保存数据块的设备,另一个向保存校验块的设备。模拟器然后跟踪每个设备所经历的擦除的相应增加(假设一个简单的SSD固件模型转换一次写入为一次擦除)。在模拟中任意给定的点,首先假定一个设备故障,然后使用闪存UBER计算数据损坏的可能性,即DLP。如果选择“oldest”故障模式,故障设备是阵列中最老的一个。如果选择“any”模式,则返回DLP值是多个DLP值之间的平均值,通过每一个阵列中特定驱动器的故障计算。

 

4.1.1  Diff-RAID的可靠性

图6显示了Diff-RAID阵列在写入时的DLP是如何改变的;在这个过程中,使用寿命结束时固态硬盘将被取代,新的SSD被添加到阵列中。最终,DLP收敛到一个稳定的状态,数值低且有界。对于这个实验,我们模拟具有校验分配的(90; 2.5; 2.5; 2.5; 2.5)的5-SSD Diff-RAID阵列,并使用D-MLC32-1闪存(选择这个闪存,因为它具有最高的UBER)。我们假定当每个SSD达到10,000个周期的擦除极限时,都会被替换。

 

 

 

经过10-15次更换,可靠性曲线达到一个稳定的状态;这是年龄分布收敛的直接结果。一旦年龄分布收敛,数据损失概率就介于10-7和10-5之间。如前面提到,可以在稳定状态启动阵列,通过使用擦写周期已被使用适当数量的SSD(或者早些替换它们,将其视为已用光擦写限的设备)。对于本节中的其余实验,我们重点关注Diff-RAID在其稳定状态下的DLP,忽略最初的波动。

 

4.1.2  Diff-RAID配置的可靠性

Diff-RAID的可靠性取决于其特定的配置。图7显示了不同Diff-RAID校验块分布的DLP。 DLP根据这样的模型计算,阵列中的SSD使用闪存类型D-MLC32-1及最老的设备在5-SSD阵列上故障。最左边的栏对应在单个设备上放100%的校验的分配(即,类似于RAID-4)。最右边的栏对应于将20%的校验性分配给每个设备(即,类似于RAID-5)。中间点集中一些校验在一个单一的设备上,并将其余部分分配给其他设备。正如预期的那样,当我们在一台设备上集中更多的校验块时阵列的可靠性上升。

 

 

 

4.1.3 不同闪存类型的可靠性

接下来,我们要了解整体阵列的可靠性变化,依据所使用的闪存芯片的类型。在另外,我们也想评估当任何设备(不只是最老的设备)故障时系统的可靠性。

图8比较了传统RAID-5和特定Diff-RAID校验分配(80; 5; 5; 5; 5)的DLP,对于不同类型的闪存芯片。对于涉及到的故障阵列中最老的设备,对于涉及到阵列中最老设备故障时,12个闪存类型中有7个,Diff-RAID比RAID-5要稳定多个数量级。对于涉及任意设备的故障,Diff-RAID的可靠性是RAID-5的两倍,对于12种闪存类型中的9种。

 

 

 

4.1.4 不同ECC级别的可靠性

由于Diff-RAID提供比传统RAID-5更好的可靠性,在具有相同数量的ECC位时,Diff-RAID也可能在使用较少的ECC位时提供与RAID-5类似的可靠性。这样的保证可以减轻在硬件中对昂贵的ECC保护的需求。

图9比较了Diff-RAID和传统的RAID-5在闪存D-MLC32-1上使用不同级别ECC时的可靠性。Diff-RAID使用(80; 5; 5; 5; 5)的校验分配,我们考虑最旧的SSD的故障。 在x轴,ECC级别“t”表示在512字节扇区中校正t位错误的能力。这个图说明的重要一点是Diff-RAID可以用来降低硬件ECC要求;在这个例子中,闪存上带3位EEC的Diff-RAID相当于同一闪存上带5位ECC的传统RAID-5。

 

 

 

4.1.5 超出擦除极限时的可靠性

图10比较了在闪存型号D-MLC32-1上,当使用超过10,000个周期擦写极限的闪存时,Diff-RAID和RAID-5的可靠性。同样,Diff-RAID使用的分配是(80; 5; 5; 5; 5),故障模式是“oldest”,我们假设4位的ECC。对于图中的每个栏,阵列中的设备在当他们达到扩展的擦除极限,由x轴上的值表示,时被替换。raid-5数据丢失概率在超过10,000个周期时立即达到1.0,而Diff-RAID的数据丢失概率缓慢爬升并在20,000次周期时达到1.0。很明显Diff-RAID允许在达到擦除极限之后使用闪存;如果阵列中的每个设备使用13,000个周期,则涉及最旧设备的1000个故障事件中少于一个会导致一些数据丢失。

 

 

 

 

4.1.6 实际负载的可靠性

到目前为止,我们在一个合成的随机写工作量下评估Diff-RAID。为了在不同的工作量下评估Diff-RAID的可靠性,我们使用了一些从以前的研究中取得的企业数据记录[11]。对于真实的工作负载,条带大小(单个条带块的大小)是至关重要的,在确定访问模式的差异(即,某设备被写入更频繁)和全条带写入的频率。我们绘制了合成工作量的可靠性为一条直线;在纯粹的随机写作下RAID条带大小不重要,因为不管条带大小多少,全条带写入的比例为零,。

在图11中,每组栏对应于一个特定的数据轨迹;在一组栏中,颜色最轻的栏对应于最小的条纹大小(4 KB),每个更暗的栏将条带大小增加2倍。最黑的栏对应到1 MB的条带大小。我们可以看到增加条带大小不会一致地影响不同的数据轨迹。重要的是,Diff-RAID针对多个实际工作负载继续提供出色的可靠性,且跨所有条带大小。

 

 

 

只有一个轨迹(src1)有相当数量的全条带写入;当条带大小增加到16 KB时,全条带被转换成随机写入,导致Flash页面写入次数增加了30%。对全部其他的轨迹,全条带写的比例较低甚至在一个小条带大小时,在所有情况下,针对不同条带大小,闪存页面写入的数量差异小于10%。

 

4.2  Diff-RAID性能评估

为测量RAID-5和其他Diff-RAID配置之间的性能权衡,我们实现了一个软件Diff-RAID控制器,它使用Windows原始设备接口访问SSD。我们的Diff-RAID软件可以运行合成基准数据(例如,随机4 KB写入)和从轨迹文件发出的I / O。重要的是,我们禁用了实际的XOR校验计算以消除潜在的CPU瓶颈;我们相信Diff-RAID的硬件实现将使用专门的硬件来计算XOR。如前所述,我们在RAID控制器中不实现写缓存,也不会通过读取缺失的数据来优化半条带写入;这些优化通常用于改善硬盘阵列上的RAID-5性能,但对SSD不是必需的,而且可能会损害Diff-RAID可靠性。

我们使用一组每个80 GB的5个Intel X25-M SSD。根据英特尔的数据表,每个SSD指定提供3.3K IOPS的随机写入吞吐量,35K IOPS的随机读取吞吐量,连续70 MB / s写吞吐量和250 MB / s的连续读吞吐量[7]。为了使SSD性能处于稳定状态,我们通过一个老化程序运行每个设备,依次写入至整个地址空间(80GB),之后写了100万个4K页面(4 GB的数据)至随机位置。另外,在老化过程之前,我们在每个设备上也跑了很多微型基准测试;结果,所有SSD已经用完了它们3%到8%的擦除周期。

 

4.2.1  Diff-RAID吞吐量

如前所述,Diff-RAID提供了可靠性和性能之间的一个折中。图12显示了在我们的SSD阵列设置中随机写入吞吐量。我们评估各种Diff-RAID校验分配,从(100; 0; 0; 0; 0)(最左边的栏),对应于RAID-4配置,到(20; 20; 20; 20; 20)(最右边的栏),对应于RAID-5分配。在这两个极端之间,我们在一个设备上分配特定的比例并均匀分配剩下的部分给其余SSD。我们注意到图12中的两要点:首先,Diff-RAID提供了非常好的随机I / O吞吐量,从8 K到15 K IOPS不等,推动了这一观点,基于校验的方案(如Diff-RAID)适用于企业环境中的SSD阵列;第二,Diff-RAID是灵活的,让管理员选择适合于具体工作量设置的可靠性性能折衷。

 

 

 

4.2.2 真实工作负载下的性能

除了测量在随机写入下Diff-RAID的性能,我们也使用之前描述的企业数据轨迹评估了系统。图13呈现在各种Diff-RAID配置下,当轨迹数据以全速发出时的跟踪回放时间。由于写入是至关重要的,且需要更多的时间来完成,我们只发出来自每个数据轨迹的写入。对于所有的轨迹数据,Diff-RAID配置显示了一个清晰的性能趋势(RAID-5表现最好,RAID-4表现最糟糕,其他配置在中间)。

 

 

 

4.2.3 恢复时间

最后,我们评估与传统的RAID-5相比,Diff-RAID的恢复性能。Diff-RAID恢复时间预计会比RAID-5高,由于所需的校验分配的重新调整。这种校验转移可以在RAID-5重建期间执行,或简单地(通过移动所有校验)亦或使用最小数目的校验块移动。表2显示了对于RAID-5和Diff-RAID的简单及最小策略的恢复时间。通过最小限度地移动校验块,只需比RAID-5多耗费56%的时间,Diff-RAID便可以恢复并移动到下一个校验配置。请注意,SSD的重建时间比硬盘要短得多,从而降低了重建期间发生另一设备故障的可能性。

 

 

 

5. 相关工作

商品固态硬盘已经在企业环境中使用。Fusion-io最近的一个案例研究报告了这个好处,当MySpace移动到固态存储时[4]。我们论文的结果可以帮助管理员评估和提高企业闪存部署的可靠性。

一个使用闪存集群的研究系统的例子是FAWN,这是一系列带有闪存的低功耗节点,用作低功耗数据密集型计算集群[1]。Diff-RAID背后的原理可被用于在类似FAWN的系统中启用冗余方案以避免相关的故障。

由于SSD是由一系列闪存芯片组成的,可能在SSD内提供内置芯片级别的冗余以处理故障。 Greenan等人[5]提出擦除跨越不同芯片的页面的编码条带。具有这种固有冗余的SSD可以改善整个Diff-RAID阵列的DLP。类似的,RamSan-500是包含内置冗余的可商用的SSD [13]。与商品SSD不同,它使用较小的基于ECC的代码字(64字节,而不是传统的512字节)并在内部跨越可替换的闪存模块应用RAID-3。虽然比RAID-5更好,但如果使用传统更换策略的话,RAID-3仍然会遭受相关的故障。

本文是在Diff-RAID系统上的早期研讨会论文的完整版本[8]。几个以前的工作分析了闪存芯片的位差错率,并显示出它们与闪存的年龄相关性[3,6,10]。这些研究都没有考察跨越多个SSD的故障的相关性。

已经提出了多个系统,其使用SSD与硬盘协同工作,通常是作为读取缓存[2,9]。这样的系统对于将闪存引入存储是至关重要的,我们认为检测完全由商品闪存组成的存储设计有很多价值,特别是如果对可靠性的相关担忧可以被冗余抵消时。

 

6. 未来的工作

未来工作的一个重要途径是扩展Diff-RAID到多个校验方案,如RAID-6或更一般的擦除式编码存储。我们认为,不平衡的校验分配可以提高这些解决方案的可靠性。有意思的是,一个简单版本的Diff-RAID技术可以应用于RAID-1,其中镜像之一被消耗到50%的擦除周期;这使得此双设备阵列满足一个收敛的年龄分布,并在镜像达到它的50%擦除周期时发生设备更换。

我们目前正在实施一个位于Windows 7卷管理器中的Diff-RAID原型版本;这会使用户能够通过Windows中的标准管理界面创建和管理Diff-RAID阵列。

 

7. 结论

Diff-RAID是专门为SSD设计的新型RAID变体。 它在整个阵列中不均衡地分配校验块以强制设备以不同的速率老化。通过在每次设备替换时重新分配校验块,使由此产生的年龄差异在设备替换时得以维持。Diff-RAID平衡了老化设备的高BER与年轻设备的低BER,减少了相关故障的几率。相比传统的RAID-5,对于相同的SSD空间开销,Diff-RAID提供了更高的可靠性,并且还提供了一个细粒度的吞吐量和可靠性折衷曲线。它可以被用于使SSD超过其擦除限制,及减少对于SSD内昂贵的ECC的需求。

 

参考文献

[1] D. G. Andersen, J. Franklin, M. Kaminsky, A. Phanishayee,L. Tan, and V. Vasudevan. FAWN: A Fast Array of WimpyNodes. In Proceedings of the 22nd Symposium on OperatingSystems Principles (SOSP’09), Big Sky, MT, October 2009.

[2] R. Bitar. Deploying Hybrid Storage Pools With Sun FlashTechnology and the Solaris ZFS File System. Technical ReportSUN-820-5881-10, Sun Microsystems, October 2008.

[3] P. Desnoyers. Empirical Evaluation of NAND Flash MemoryPerformance. In The First Workshop on Hot Topics in Storage(HotStorage’09), Big Sky, MT, October 2009.

[4] Fusion-io. MySpace Case Study. http://www.fusionio.com/case-studies/myspace-case-study.pdf.

[5] K. M. Greenan, D. D. Long, E. L. Miller, T. J. E. Schwarz,and A.Wildani. Building Flexible, Fault-Tolerant Flash-basedStorage Systems. In The Fifth Workshop on Hot Topics inDependability (HotDep’09), Lisbon, Portugal, June 2009.

[6] L. M. Grupp, A. M. Caulfield, J. Coburn, S. Swanson,E. Yaakobi, P. H. Siegel, and J. K. Wolf. Characterizing FlashMemory: Anomalies, Observations, and Applications. In MICRO’09, New York, December 2009.

[7] Intel Corporation. Intel X18-M/X25-M SATA Solid StateDrive. http://download.intel.com/design/flash/nand/mainstream/mainstream-sata-ssd-datasheet.pdf.

[8] A. Kadav, M. Balakrishnan, V. Prabhakaran, and D. Malkhi.Differential RAID: Rethinking RAID for SSD Reliability.In The First Workshop on Hot Topics in Storage (HotStorage’09), Big Sky, MT, October 2009.

[9] J. Matthews, S. Trika, D. Hensgen, R. Coulson, and K. Grimsrud.IntelR turbo memory: Nonvolatile disk caches in thestorage hierarchy of mainstream computer systems. Transactionson Storage, 4(2):1–24, 2008.

[10] N. Mielke, T. Marquart, N. Wu, J. Kessenich, H. Belgal,E. Schares, F. Trivedi, E. Goodness, and L. R. Nevill. Bit errorrate in NAND Flash memories. In IEEE International ReliabilityPhysics Symposium (IRPS), pages 9–19, April 2008.

[11] D. Narayanan, E. Thereska, A. Donnelly, S. Elnikety, andA. Rowstron. Migrating server storage to SSDs: analysis oftradeoffs. In Proceedings of the 4th ACM European conferenceon Computer systems, pages 145–158, 2009.

[12] Robin Harris. Why RAID-5 stops working in 2009. http://blogs.zdnet.com/storage/?p=162.[13] Woody Hutsell. An In-depth Look at the RamSan-500Cached Flash Solid State Disk. http://www.texmemsys.com/files/f000233.pdf.

你可能感兴趣的:(存储)