概述
双重编解码算法是实现数据保护的关键技术。磁盘阵列中的常用算法是RAID6,其属于Reed-solomon算法范畴。RAID6算法计算复杂度较高,往往需要硬件加速单元的支持。随着闪存技术的发展,新的编解码技术层出不穷,因此有必要了解常用阵列技术的双重编解码算法,通常来讲,常用双重编解码算法主要有如下三种:
1,二维(2D)奇偶校验方法
2,EVEN-ODD编码校验法
3,Reed-Solomon编码校验法
下面会对这三种算法的原理进行详细说明,然后对比这三种算法的性能及计算复杂度。
二维奇偶校验算法
二维奇偶校验方法将数据磁盘组织成mXn矩阵,然后分别在水平方向和垂直方向都进行奇偶校验编码的方法。若数据盘有mXn个,则用于存放校验信息的磁盘数有m+n。二维奇偶校验采用简单的异或运算,容易实现。二维奇偶校验算法的原理如下图所示:
采用这种方式的磁盘冗余率为:
(m+n)/(mXn + m + n)
空间利用率为:
(mXn)/(mXn + m + n)
可以看出这种算法的计算复杂度非常低,但是,需要的冗余磁盘数量非常多。例如,对于一个12(3X4)盘的阵列,采用这种算法需要7块冗余盘,对于传统的RAID6算法只需要2块冗余盘。
EVEN-ODD编解码算法
这种编码方法采用水平冗余和对角线冗余来设计校验码,具体如下图所示:
水平校验
对角线校验
对于m块数据盘,这种编码方式需要2块冗余盘,编码方式采用普通的XOR计算方法。一块冗余盘为普通的RAID5水平校验算法;另一块冗余盘为对角线编码算法。EMC的XtremIO全闪阵列中的XDP采用的就是这种算法(可以参考文章《剖析XtremIO的XDP技术》)。
在传统的磁盘阵列中,这种算法的应用是有局限的,每次数据的更新将都会转换成“读-修改-写”的复杂、耗时操作,小写性能将会变得十分低下。但是,在全闪存阵列中,情况变得非常不同,数据小写的问题变得不存在,这种算法反而有了用武之地。
Reed-Solomon编码算法
Reed-Solomon编码算法就是现在RAID6所采用的算法。其基本原理如下图所示:
该算法的编码过程说明如下(具体算法可以参考《RAID6算法解析》):
P编码采用异或操作得到,这一步与RAID5相似
Q编码通过加权系数乘加的方法编码得到,可以与P编码构成两个方程,允许两块盘同时失效
采用条带化的数据存储方式
需要两块冗余盘,属于最优编码范畴
三种编解码算法性能对比
从理论分析上可以看出这三种编解码算法具有不同的IO性能。其中2D编码最简单,EVEN-ODD次之,RS编码计算最复杂。当系统存在故障盘时,三种算法具有不同的数据恢复计算复杂度。下图分别是一块盘损坏、两块盘损坏时的三种算法计算复杂度。其中,红线是RS算法,绿线是EO算法,白线是2D算法。(需要注意的是:横轴不是时间,而是磁盘数量;纵轴是计算复杂度)
单盘损坏时的数据恢复计算复杂度(X轴:磁盘数量,Y轴:复杂度)
两块盘损坏时的数据恢复计算复杂度(X轴:磁盘数量,Y轴:复杂度)
从上图可以看出,在这三种双错码编码中,2D译码最简单,EVEN-ODD次之,RS译码计算最复杂。
三种编解码算法在磁盘存储阵列中的对比结果如下表所示:
综上,在磁盘阵列应用领域,我们可以得出如下结论:
- 2D编码方法简单,易于实现,但是构造的磁盘阵列性价比低(不属于最优冗余编码)
- RS编、译码较EVENT-ODD复杂,一般需要用硬件电路实现,但是RS码小写性能好,因此,适用于硬件/软件优化(指令加速)实现的阵列中。
- EVEN-ODD编、译过程较RS码简单,只有异或操作,但是小写性能差,因此,EVEN-ODD适用于实时性较强的连续数据存储
随着闪存存储的发展,存储介质的特性发生了本质变化,因此,最佳编解码算法也将发生变化,原来并不适用于磁盘阵列的的EO算法可以在闪存存储中大发光彩。