mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 10:51:54 -04:00
Updates RAID comments.
This commit is contained in:
parent
8d5d21b0f1
commit
65f40a8fa5
2 changed files with 13 additions and 17 deletions
9
HISTORY
9
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.
|
||||
|
|
|
|||
21
raid.c
21
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue