diff --git a/HISTORY b/HISTORY index c64aabeb..831c55c4 100644 --- a/HISTORY +++ b/HISTORY @@ -6,11 +6,10 @@ SnapRAID HISTORY * Added support for RAIDTP (Triple Parity) and RAIDQP (Quad Parity). For Quad Parity, and only for Quad Parity, there is a limitation of using no more than 21 data disks. This is a conseguence of the - high performant parity generator matrix used. An extension supporting - up to 89 disks with Hexa (6) parity is possible, but not yet implemented. - Note that more general approaches without these limitations are also - possible, but they would affect badly the performance. - Parity computation uses SSSE3 and AVX instructions if available for the + high performant parity generator matrix used. + Extensions supporting more disks and more parities are possible, + but not yet implemented. + * New parity computation using SSSE3 and AVX instructions for the best performance. * In sync, if a silent error is found, directly mark the block as bad like in scrub, and continue with the sync process. diff --git a/raid.c b/raid.c index 8a7da86d..b7a12291 100644 --- a/raid.c +++ b/raid.c @@ -1674,19 +1674,16 @@ void raid_gen(unsigned level, unsigned char** vbuf, unsigned data, unsigned size * parity coefficients 1,2,4,8,16,32 for up to 89 disks. * * A general method working for any number of disks is to setup the matrix - * used to compute the parity as a Cauchy matrix [4], or set the MDS generator - * matrix as Vandermonde matrix, and do some transformations to it until it - * can be expressed as the concatenation of the identify matrix and the - * submatrix used to generate the parity [5]. + * used to compute the parity as a Cauchy matrix [4] or Extended Cauchy matrix [5]. * * But with a such matrix, we would obtain a slower performance, because the - * coefficients of the equations are arbitrarily chosen, and not powers of - * the same value. + * coefficients of the equations are not powers of the same value. * This means that we would need to use multiplication tables to implement the - * parity computation, instead of the fast approach described in [1]. - * Note anyway, that there is also a method to implement very fast multiplication - * tables with SSE instructions [6] that it's already competitive with the RAIDQP - * parity computation. + * parity computation, instead of the parallel approach described in [1]. + * + * Note anyway, that there is also a method to implement parallel multiplication + * with tables using SSSE3 instructions [6] that it's already competitive with + * the RAIDTP parity computation. * * In details, RAIDTP is implemented for n disks Di, computing the parities * P,Q,R with: @@ -1744,7 +1741,7 @@ void raid_gen(unsigned level, unsigned char** vbuf, unsigned data, unsigned size * [2] Brown, "Multiple-parity RAID", 2011 * [3] MacWilliams, Sloane, "The Theory of Error-Correcting Codes", 1977 * [4] Blömer, "An XOR-Based Erasure-Resilient Coding Scheme", 1995 - * [5] Plank, "Note: Correction to the 1997 Tutorial on Reed-Solomon Coding", 2003 + * [5] Vinocha, Bhullar, Brar, "On Generator Cauchy Matrices of GDRS/GTRS Codes", 2012 * [6] Plank, "Screaming Fast Galois Field Arithmetic Using Intel SIMD Instructions", 2013 */ @@ -1820,7 +1817,7 @@ static inline unsigned char pown(int b, int e) case 3 : return pow8(e); } - fprintf(stderr, "GF invalid base\n"); + fprintf(stderr, "GF invalid exponent\n"); exit(EXIT_FAILURE); }