概述

双重编解码算法是实现数据保护的关键技术。磁盘阵列中的常用算法是RAID6,其属于Reed-solomon算法范畴。RAID6算法计算复杂度较高,往往需要硬件加速单元的支持。随着闪存技术的发展,新的编解码技术层出不穷,因此有必要了解常用阵列技术的双重编解码算法,通常来讲,常用双重编解码算法主要有如下三种:

 

1,二维(2D)奇偶校验方法

2EVEN-ODD编码校验法

3Reed-Solomon编码校验法

 

下面会对这三种算法的原理进行详细说明,然后对比这三种算法的性能及计算复杂度。

 

二维奇偶校验算法

二维奇偶校验方法将数据磁盘组织成mXn矩阵,然后分别在水平方向和垂直方向都进行奇偶校验编码的方法。若数据盘有mXn个,则用于存放校验信息的磁盘数有m+n。二维奇偶校验采用简单的异或运算,容易实现。二维奇偶校验算法的原理如下图所示:

 

wKioL1QBrBWxsNg3AACJDJyn3yI207.jpg

 

采用这种方式的磁盘冗余率为:

(m+n)/(mXn + m + n)

 

空间利用率为:

mXn/(mXn + m + n)

 

可以看出这种算法的计算复杂度非常低,但是,需要的冗余磁盘数量非常多。例如,对于一个123X4)盘的阵列,采用这种算法需要7块冗余盘,对于传统的RAID6算法只需要2块冗余盘。

 

EVEN-ODD编解码算法

这种编码方法采用水平冗余和对角线冗余来设计校验码,具体如下图所示:

 

wKioL1QBrDLwDj8ZAADKm-K3Mbk687.jpg

水平校验

 

wKioL1QBrEqz9GqhAADPKyZmEuQ383.jpg

对角线校验

 

对于m块数据盘,这种编码方式需要2块冗余盘,编码方式采用普通的XOR计算方法。一块冗余盘为普通的RAID5水平校验算法;另一块冗余盘为对角线编码算法。EMCXtremIO全闪阵列中的XDP采用的就是这种算法(可以参考文章《剖析XtremIOXDP技术》)。

 

在传统的磁盘阵列中,这种算法的应用是有局限的,每次数据的更新将都会转换成“读-修改-写”的复杂、耗时操作,小写性能将会变得十分低下。但是,在全闪存阵列中,情况变得非常不同,数据小写的问题变得不存在,这种算法反而有了用武之地。

 

Reed-Solomon编码算法

Reed-Solomon编码算法就是现在RAID6所采用的算法。其基本原理如下图所示:

 

wKiom1QBq1GS99a9AAEpezMn6xM559.jpg

 

该算法的编码过程说明如下(具体算法可以参考《RAID6算法解析》):

*       P编码采用异或操作得到,这一步与RAID5相似

*       Q编码通过加权系数乘加的方法编码得到,可以与P编码构成两个方程,允许两块盘同时失效

*       采用条带化的数据存储方式

*       需要两块冗余盘,属于最优编码范畴

 

三种编解码算法性能对比

从理论分析上可以看出这三种编解码算法具有不同的IO性能。其中2D编码最简单,EVEN-ODD次之,RS编码计算最复杂。当系统存在故障盘时,三种算法具有不同的数据恢复计算复杂度。下图分别是一块盘损坏、两块盘损坏时的三种算法计算复杂度。其中,红线是RS算法,绿线是EO算法,白线是2D算法。(需要注意的是:横轴不是时间,而是磁盘数量;纵轴是计算复杂度)

 

wKioL1QBrILAea1ZAAGU2u1P6i4525.jpg

单盘损坏时的数据恢复计算复杂度(X轴:磁盘数量,Y轴:复杂度)

 

wKiom1QBq4ORt-vLAAGPRpRBBjI240.jpg

两块盘损坏时的数据恢复计算复杂度(X轴:磁盘数量,Y轴:复杂度)

从上图可以看出,在这三种双错码编码中,2D译码最简单,EVEN-ODD次之,RS译码计算最复杂。

 

三种编解码算法在磁盘存储阵列中的对比结果如下表所示:

 

wKiom1QBq6-T-KesAADqtDkfY3A961.jpg

 

综上,在磁盘阵列应用领域,我们可以得出如下结论:

  1. 2D编码方法简单,易于实现,但是构造的磁盘阵列性价比低(不属于最优冗余编码)

  2. RS编、译码较EVENT-ODD复杂,一般需要用硬件电路实现,但是RS码小写性能好,因此,适用于硬件/软件优化(指令加速)实现的阵列中。

  3. EVEN-ODD编、译过程较RS码简单,只有异或操作,但是小写性能差,因此,EVEN-ODD适用于实时性较强的连续数据存储

 

随着闪存存储的发展,存储介质的特性发生了本质变化,因此,最佳编解码算法也将发生变化,原来并不适用于磁盘阵列的的EO算法可以在闪存存储中大发光彩。