图3所示是RS码的校验矩阵。RS码从最佳的冗余特性出发。达到Singleton界的RS码被人们提出并广泛应用。
校验矩阵通过线性变换可以化为系统矩阵,用存储系统的语言亦可显式地区分出系统中哪些单元用于存储校验单元。可以看出,矩阵中的元素不再是“0”、“1”,而为有限域元素的幂,故编码需要使用有限域运算。在计算机系统中,有限域元素最后还是会被映射为“0”、“1”单元。这时每个有限域元素一般会被映射为多个“0”、“1”单元,而有限域运算也可以被分解为这些“0”、“1”单元的复杂运算。我们仍然以编码所需的异或运算为基本单位,则编码所需的异或运算次数和编码算法的巧妙程度有关。目前较好的域运算算法所需的异或次数大约为O(n3)[5],计算复杂度相当高。RS码是MDS码,故冗余度是最优的。
3 阵列编码
上述几种编码各有优缺点,那么是否存在对于多指标同时最优的k容错编码方法呢?自文献[5]提出EVENODD码起,一大类只使用异或运算的阵列编码被提出并被人们广泛研究。
多维阵列或FULL码等二进制线性码每块磁盘只取一个逻辑单元进行校验运算。而阵列码则在每块磁盘上取多个逻辑单元,一起交叉进行校验运算。校验计算同2进制线性码一样,只使用二进制异或运算,但冗余度却可以与RS码相同。
3.1 EVENODD码
EVENODD码的想法很简单,每块磁盘中取若干单元,排成方阵,然后将这些单元分成不同的校验组,另外添加两块磁盘用于存储校验单元。所有校验组均使用简单的二进制奇偶校验。
水平校验与对角校验如表1所示。表1中D代表用户数据单元,P代表冗余校验单元。可以看出,Disk1—Disk5存储用户数据单元;Disk6、7存储冗余校验单元。Disk6的各单元为用户数据各行的水平校验和,而Disk7的各单元为用户数据的辅对角线校验和。
设存储用户数据盘的数目为p(如上例中p=5),则系统包含p+2块磁盘,前p+1块磁盘中的最后一个单元为虚拟0元,故每盘实际包含p-1个单元,最后一块磁盘包含p个单元。可以证明,当p为素数时系统是双容错的。
简单计算可知此时的系统的冗余度为(2p-1)/((p+2)(p-1)+1)。由于最后的校验盘多出一个单元,所以冗余度稍稍大于最优的2/(p+2)。为了达到最优值,文献[5]中使用如下技巧:将多出的单元(即辅对角交验和)叠加到该盘其他单元上,构造MDS的EVENODD码如表2所示。
表2也可表示为如表3所示。
也就是说当第一辅对角校验和为1时,其他各对角校验为奇校验;当第一辅对角校验和为0时,其他各对角校验为偶校验。这就是它被命名为EVENODD码的原因。
3.2 RDP码
从表2可以看出,为了得到冗余最优,EVENODD码的辅对角线上的单元的更新复杂度很高。每次更新这些单元的数据时都要同时更新其他p个校验单元。对于双容错编码来说,最优值为2。文献[6]中构造的RDP编码将这些单元的更新复杂度均衡到每个单元,从而有效地消除了写操作中更新性能的不均衡。一个包含水平校验的对角线校验如表4所示。
与EVENODD不同处在于,做对角校验时也包含了水平校验单元的一列(因此,数据单元也比EVENODD少了一列)。
同样的,RDP的最后一个校验盘多出一个单元,使得整个系统不为MDS码。但RDP码的优势在于,简单地将多出的单元删去,系统仍然为双容错的。即得到如表5所示阵列。
从表5可以看出,所有数据单元的更新负载为2或3,分布比EVENODD码要均匀,不会产生由编码方式带来的额外“瓶颈”,但系统的平均更新复杂度是相同的。