存储 频道

RAID6连载(二):RAID6算法解析

[RAID6写入-P+Q校验]

多个块同时写
   
RAID6写入需要计算双重校验,第一重校验和RAID5一样,采用XOR校验,从上面的讲解可知,异或运算法则比较简单,为此一些厂商设计了专门的硬件来完成;在Intel的IOP33x处理器上就有专门的硬件模块,XOR应用加速器 (Application Accelerator with XOR),它专门处理异或运算,将CPU解放出来,从而提高整个系统的性能。

图-1 同时写多个块的P+Q校验

    如图-1,同时写多个数据块时,P = D0⊕D1⊕D2⊕D3,只需告诉XOR应用加速器D0, D1, D2, D3在内存的位置,它就可以自动的完成XOR计算得到P。

    对于第二重校验,需要采用基于伽罗瓦域(Galois Field)计算操作的Reed- Solomon编码,也就是说在计算Q时,会引入一个系数Ki,如图-1所示:Q = (K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)

    同样,由于RAID6采用了更为复杂的算法,因此可以设计专门的硬件来完成RAID6计算,Intel的IOP333上就有RAID6应用加速器 (Application Accelerator for RAID6);它和XOR应用加速器一样,只需要知道数据D0,D1,D2,D3在内存中的位置,它就可以自动完成RAID6的计算。

只写一个块
   
当系统只需要写一个数据块时,如果把所有的其他相关的数据块都读取出来计算校验,是比较耗费计算资源的。

图-2 写一个块的P+Q校验

    如图-2所示,此时可以先把需要写的块D0new对应的旧数据D0old读取出来,同时还有对应的Pold和Dold读取出来,进行计算;从而可以得到如下公式:

    Pnew = Pold ⊕ (D0new ⊕ D0old)
    = (D0old⊕D1⊕D2⊕D3)⊕(D0new ⊕ D0old)
    = D0new⊕D1⊕D2⊕D3

    Qnew = Qold ⊕ Kx ⊙ (D0new⊕ D0old)
    =(K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)⊕Kx⊙(D0new⊕ D0old)
    =(K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)⊕K0⊙(D0new⊕ D0old)
    =(K0⊙D0)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)
    ⊕(K0⊙D0new)⊕(K0⊙ D0old)
    = (K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)⊕(K0⊙D0new)
    = (K0⊙D0new)⊕(K1⊙D1)⊕(K2⊙D2)⊕(K3⊙D3)

    显然,通过上述只操作P和Q达到更新写一个块数据的校验,更为简洁高效。

0
相关文章