EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转—— Google说闪存不如硬盘可靠,Nimble说RAID 3P+能搞定 C/ V$ _" Q* a: m) [9 F3 O6 o
大家知道,前几天Goggle在USENIX FAST 2016发布了一篇论文,说在实际环境中,闪存的可靠性其实不如硬盘。- p8 J9 |6 | W/ U* t" i9 {
' f( c4 W. l6 r, D5 m$ \
这可在业界兴起了轩然大波,很多不太了解的客户就会问,这么说,全闪存时代不会这么快来了,还是暂时不考虑全闪存阵列了吧,可靠性不行啊。
& h8 r! l0 x- k其实,仔细研究论文的人,应该是没有这个想法的。因为Goggle说的闪存的可靠性不高,指的只是颗粒层面,到了SSD(我这里用SSD来表示闪存盘)层面,再到AFA(全闪存阵列)系统层面,可靠性完全是可以满足要求,甚至超过HDD系统的可靠性。; ^' t3 k9 }0 h' F6 w8 S
这不,Nimble Storage的CTO就是这么一个爱学习的人。今天,西瓜哥就聊聊他对该论文的解读,还有Nimble Storage的应对之道。* w) a0 Y! [' x
Google说,SSD和HDD的故障模式有两点不同:: a8 t8 Z0 X( _! e" {0 k0 G7 o
- 整盘故障(需要更换驱动器):SSD的年故障率要低于HDD;
- 部分数据丢失:SSD比HDD有很高的不可恢复错误(每一个扇区,典型大小0.5-4KB,被纠错码(ECC)保护。但一个扇区有太多的比特错误,超过了ECC的纠错能力,就会导致这个扇区的数据丢失)
7 x, j( R) Q/ a, N/ \ 大家可以看到,其实SSD整盘的故障率其实比HDD低,只是在扇区层面故障率比较高。因此,存储厂商必须了解这些特点,对症下药,才能提高AFA系统的可靠性。4 w5 ~3 U) h5 M7 B9 u) `5 H
Google的论文还说,原始比特误码率(RBER) 并不能预测不可恢复错误的发生,也就是这两者没有相关性。这个好像和我们的常识不符。但具体原因,Google没有解释。+ }5 k/ G9 P u
Nimble CTO说Nimble了解闪存这些故障特点,并在Nimble系统层面已经解决这些问题,并且试图解释为什么RBER和不可恢复错误不相关。
" D+ X$ Z, _, X为啥HDD容易整个盘都坏了呢?其实原因很简单,HDD是机械部件,某个部件比如马达坏了,磁盘也就完完了。而SSD是电子器件。
8 F s% O% V Q; Y5 R5 _Goggle说他们的驱动器故障率是这样的:6 z* G+ `$ D2 F* R2 F3 h
- SSD:4年多的更换率是4%-10%,平均每年1%-2.5%;
- HDD:每年2-9%
8 ^8 Y- Y( O! v2 S7 s 大家知道Nimble有一个很牛的云监控软件叫InfoInsight。Nimble CTO说,他们也监控了5年,他们的阵列的驱动器整体故障率要低于Google,但比例相似,即SSD的更换率只有HDD的1/3。
( \2 a4 p/ k8 J# h7 t7 }: ]但要注意的是,SSD的固件复杂,因为要做FTL和垃圾收集。Google应该针对自己的应用定制了自己的固件,但市场上的商用产品,由于不同的固件版本,故障率可能也不同。: V ?0 W9 y0 J5 D9 b5 ~
另外,SSD相比HDD来说还是新事物。HDD已经有60多年历史,但现在还不断发现影响故障率的因素。比如就在同一个会议的另外一篇论文就说HDD的故障率受到湿度的影响很大。而SSD才10年多历史,未来估计还会有更多的发现。: f1 f$ ~1 H6 d. c# @! c2 W, q
Nimble如何应对整盘失效呢?Nimble的triple parity RAID(也叫RAID 3P,喂,这位男同学,不要想歪了,不是那个3P)可以支持3块硬盘同时故障。) V* a3 @9 `7 A, q i6 V
当然,Nimble还留有热备盘,这样驱动器故障后可以马上进行重构,减少故障时间。3 e5 V) y2 Y; J) w \
你可能说,3个校验加热备,是否太浪费空间了?这个,Nimble通过增加RAID组成员的数量解决容量使用率的问题,比如20D+3P+1S,使用率也是很高的。
# C$ j! B8 b, S$ Q8 q& Z当然,要减少计算校验的时间和写放大,应该就是Nimble的CASL架构应该考虑的事情了。
# X, j6 w* Z) i( I9 P: B: sRAID 3P很好解决了整盘故障,但是如果SSD内部部分数据丢失怎么办?Goggle说,4年来一共有23-60%的SSD丢失过某些数据,而HDD在2.5年里只有3.5%(底层丢失数据但上层还有保护,因此应用系统是不受影响的,不要理解为系统丢失数据)。
^6 N( R# r" ] G如果整个盘只有几个坏块,自己能够修复其实是最好的方式。Nimble把每个盘分成很多chunk,每个chunk比如包含100个扇区,系统在每个chunk加上1个或几个校验扇区,当这个chunk有不可恢复错误时用来进行盘内修复。如果把横向的校验叫盘间校验的话,chunk的校验就叫盘内校验。盘内校验空间一般无需太大,约1%即可。 P/ c- S# g# x5 j
这样,我们可以看到,Nimble的RAID逻辑结构如下:
( M/ t- D. R' V
/ b) c( q0 g" L( `由于RAID 3P还多了一层盘内校验,因此,Nimble内部把这个叫做RAID 3P+,哈哈,这个是否有点华为RAID 2.0+的意思。不过,从上图我们看到,由于RAID 3P+还是保留了热备盘,重构的时候热备盘还是容易成为瓶颈。不过,Nimble的人很多从NetApp出来的,因此其CASL必然也吸取了RAID DP的优点,只是变成了RAID 3P而已。不过,基于chunk的RAID肯定比基于盘的RAID重构快,因为只需要重构写过的chunk。
1 K$ B0 I1 E" O. uNimble还说,其实加上热备盘(不是所有厂商都有),应该宣传RAID 3P++,哈哈。$ H# ?7 N( x- Y; k. c5 H
还有,针对静默故障,Nimble也采用checksum校验码保护每一个块。并且后台会扫描并修复发生问题的块。这个很多阵列也一样,不提。
# F0 W% Q. v: t( {6 c2 s" \, o6 ]- RBER和不可恢复错误
) r, \5 J# \2 @' i8 Y2 a 关于原始比特误码率和不可恢复错误为什么没有关系,Nimble认为应该是RBER是按照整个硬盘统计的,但其实原始比特误码并不是均匀分布的。如果集中在某些扇区,这些扇区可能就发生不可恢复错误,即ECC也纠错不了了。
5 v) }4 P2 j' c& M4 A: L+ I* f就像雪的多少和平均海拔的关系一样。某些地方,平均海拔不高,但并不代表雪不多。因为高山多,雪就多。而某些地方,就算平均海拔比较高,但不见得雪就多,因为没有高山。4 q& e% N( O" O0 k( H" ^
Nimble CTO说和Google论文作者交流了他们的想法,Google认为有道理。( S3 ^' b a) j6 P
【学习心得】
! o8 j$ ~* o. R( t/ j9 |# U/ B1、针对闪存的特点,看来传统的RAID方式难满足要求了。Nimble的RAID 3P+给我们一些很好的启示。EMC的DSSD的Cubic RAID(参考1分钟看懂EMC DSSD的Cubic RAID原理)更是一种创新,虽然Nimble其实也是一种多维RAID,我个人感觉Cubic RAID更完善一些。而Pure Storage的RAID 3D,EMC XtremIO的XDP等都没有采用传统的RAID形式。据了解,华为的新一代全闪存阵列Dorado V3虽然还是采用RAID 2.0+,但是可能采用3校验的方式,支持同时坏3块SSD,不知道华为是否会宣传RAID 2.0+ 3P呢?O(∩_∩)O哈!: o! G4 M2 H9 }, w9 A j3 C6 k3 x
2、SSD作为较新的一种介质类型,就像HDD一样,相信以后不断会有新的故障特征被发现。因此,存储厂商需要时刻关注这些研究结果,特别是大型互联网公司的生产实践,不断创新,以较小的代价持续提高闪存系统的可靠性。
1 ^! S6 t5 J) q) N, n W |