Updates RAID comments.

This commit is contained in:
Andrea Mazzoleni 2013-10-19 10:14:55 +02:00
parent 8d5d21b0f1
commit 65f40a8fa5
2 changed files with 13 additions and 17 deletions

View file

@ -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.

21
raid.c
View file

@ -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);
}