Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same
First Claim
1. A method for encoding input data including d data symbols (b0, b1, . . . bd−
- 1) to generate coded data having d+m symbols, each symbol consisting of N bits, where d is an integer greater than 1, m is an integer greater than 3, N is an integer greater than 1, and s is an integer, the method comprising;
(a) receiving the d data symbols;
(b) calculating m parity symbols from the d data symbols, wherein each k-th parity symbol for integer k between 0 and m−
1 is calculated by evaluating a parity polynomial where α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN; and
(c) storing or transmitting the d data symbols and the m parity symbols as the d+m symbols of the coded data.
2 Assignments
0 Petitions
Accused Products
Abstract
An improved and extended Reed-Solomon-like method for providing a redundancy of m≧3 is disclosed. A general expression of the codes is described, as well as a systematic criterion for proving correctness and finding decoding algorithms for values of m≧3. Examples of codes are given for m=3, 4, 5, based on primitive elements of a finite field of dimension N where N is 8, 16 or 32. A Horner'"'"'s method and accumulator apparatus are described for XOR-efficient evaluation of polynomials with variable vector coefficients and constant sparse square matrix abscissa. A power balancing technique is described to further improve the XOR efficiency of the algorithms. XOR-efficient decoding methods are also described. A tower coordinate technique to efficiently carry out finite field multiplication or inversion for large dimension N forms a basis for one decoding method. Another decoding method uses a stored one-dimensional table of powers of α and Schur expressions to efficiently calculate the inverse of the square submatrices of the encoding matrix.
-
Citations
39 Claims
-
1. A method for encoding input data including d data symbols (b0, b1, . . . bd−
- 1) to generate coded data having d+m symbols, each symbol consisting of N bits, where d is an integer greater than 1, m is an integer greater than 3, N is an integer greater than 1, and s is an integer, the method comprising;
(a) receiving the d data symbols; (b) calculating m parity symbols from the d data symbols, wherein each k-th parity symbol for integer k between 0 and m−
1 is calculated by evaluating a parity polynomialwhere α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN; and(c) storing or transmitting the d data symbols and the m parity symbols as the d+m symbols of the coded data. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
where f, g and h are integers satisfying 0<
f<
g<
h<
N.
- 1) to generate coded data having d+m symbols, each symbol consisting of N bits, where d is an integer greater than 1, m is an integer greater than 3, N is an integer greater than 1, and s is an integer, the method comprising;
-
15. The method of claim 14, where N=8, 16, or 32 and m=4 or 5.
-
16. A data encoder for encoding input data having d data blocks (b0, b1, . . . bd−
- 1) to generate coded data having d+m blocks, each data block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 3, N is an integer greater than 1, K is an integer greater than 0, the bits of every block being indexed by indices i,j, where 0≦
i<
N and 0≦
j<
K, and where s is an integer, the encoder comprising;means for receiving the d data blocks; means for calculating m parity blocks from the d data blocks, wherein each k-th parity block for integer k between 0 and m−
1 is calculated by evaluating a parity polynomialwhere α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . im} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN,wherein the means for calculating m parity blocks comprises, for each parity block, K identical copies of means for calculating N bits of the block having the same index j; and means for storing or transmitting the d data symbols and the m parity symbols as the d+m symbols of the coded data. - View Dependent Claims (17, 18, 19)
- 1) to generate coded data having d+m blocks, each data block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 3, N is an integer greater than 1, K is an integer greater than 0, the bits of every block being indexed by indices i,j, where 0≦
-
20. A data encoder for encoding input data including d data blocks (b0, b1, . . . bd−
- 1) to generate coded data including m parity blocks, each data block and parity block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, K is an integer greater than 0, and s is an integer, the encoder comprising;
m accumulators each for calculating one of the m parity blocks, each accumulator comprising; a trunk input including N*K bits logically indexed by a width-wise coordinate i and a depth-wise coordinate j, i being an integer variable between 0 and N−
1 and j being an integer between 0 and K−
1, the bits having the same j logically forming a j-th trunk input vector;a side input including N*K bits indexed by the width-wise coordinate i and the depth-wise coordinate j, the bits having the same j logically forming a j-th side input vector; a trunk output including N*K bits indexed by the width-wise coordinate i and the depth-wise coordinate j, the bits having the same j logically forming a j-th trunk output vector; for each value of j, zero or more shifts and XOR combiners forming a mapping circuit, the mapping circuit connected to the N bits of the j-th trunk input vector as input and generating as output N mapped bits logically forming a j-th mapped vector; for each value of j, N XOR combiners each for combining one bit of the j-th mapped vector with a corresponding bit of the j-th side input vector to generate a corresponding bit of the j-th trunk output vector, wherein the mapping circuits are identical for all j within each of the m accumulators, wherein for an integer k between 0 and m−
1, the mapping circuit for the k-th one of the m accumulators generates a mapped vector capable of being expressed as a product of the trunk input vector and x=α
s+k, where α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN.- View Dependent Claims (21, 22, 23, 24, 25)
- 1) to generate coded data including m parity blocks, each data block and parity block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, K is an integer greater than 0, and s is an integer, the encoder comprising;
-
26. A method for encoding input data having d data symbols (b0, b1, . . . bd−
- 1) to generate coded data having d+3 symbols, each symbol consisting of N bits, where d is an integer greater than 1, and N is an integer greater than 1, the method comprising;
(a) receiving the d data symbols; (b) calculating 3 parity symbols from the d data symbols, wherein each k-th parity symbol for integer k between 0 and 2 is calculated by evaluating a parity polynomial where α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, a being nonzero and the order of a in the multiplicative group of FN being greater than or equal to d,(c) storing or transmitting the d data symbols and the 3 parity symbols as the d+3 symbols of the coded data.
- 1) to generate coded data having d+3 symbols, each symbol consisting of N bits, where d is an integer greater than 1, and N is an integer greater than 1, the method comprising;
-
27. A data encoder for encoding input data having d data blocks (b0, b1, . . . bd−
- 1) to generate coded data having d+m blocks, each data block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, K is an integer greater than 0, N*K>
32, the bits of every block being indexed by indices i,j, where 0≦
i<
N and 0≦
j<
K, and where s is an integer, the encoder comprising;means for receiving the d data blocks; means for calculating m parity blocks from the d data blocks, wherein each k-th parity block for integer k between 0 and m−
1 is calculated by evaluating a parity polynomialwhere α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a mapping which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN,wherein the means for calculating m parity blocks comprises, for each parity block, K identical copies of means for calculating N bits of the block having the same index j; and means for storing or transmitting the d data symbols and the m parity symbols as the d+m symbols of the coded data.
- 1) to generate coded data having d+m blocks, each data block consisting of N*K bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, K is an integer greater than 0, N*K>
-
28. A method for decoding data, wherein the data comprises d data symbols and m parity symbols and wherein up to a total of m data and parity symbols are unavailable, each symbol consisting of N bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, and s is an integer, wherein each k-th of the m parity symbols for integer k between 0 and m−
- 1 has been calculated from the d data symbols by evaluating a parity polynomial
where α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a first and a second mapping each of which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, the first and second mapping being either the same or different mappings, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN,the decoding method comprising; (a) storing a first one-dimensional table of powers of α
in a form under the first mapping and a second one-dimensional table of powers of α
in a form under the second mapping, each table being indexed by the power to which α
is raised, where the index ranges from an integer value by steps of 1 to a greater integer value,(b) generating a square decoding matrix by inverting a square submatrix of a parity matrix P;
and the square submatrix is defined based on identities of the unavailable data symbols and available parity symbols, the inverting step including;if the square submatrix is 1×
1,(b1) obtaining a power of a from the first one-dimensional table by table lookup using an index determined by the square submatrix entry; and if the square submatrix is 2×
2 or larger,(b2) calculating a plurality of indices based on an expression of inverse matrix entries as minors of the square submatrix of the parity matrix; and (b3) obtaining powers of a from the second one-dimensional table by table lookup using the calculated indices; (c) calculating syndrome data using the parity matrix and the available data and parity symbols; and (d) multiplying the syndrome data by the square decoding matrix to obtain data symbols corresponding to the unavailable data symbols. - View Dependent Claims (29, 30, 31, 32, 33, 34)
wherein in the second one-dimensional tables the powers of α
are stored in a bit vector form under the second mapping;wherein step (b) further comprises; if the square submatrix is 2×
2 or larger,(b4) converting each entry of the square decoding matrix into a bit matrix form under the first mapping.
- 1 has been calculated from the d data symbols by evaluating a parity polynomial
-
31. The decoding method of claim 28, wherein the first and second mappings are different mappings,
wherein multiplication and inversion under the second mapping are performed as combinations of addition, multiplication, inversion, squaring, and constant multiplication on one or more subfields of FN, and wherein the decoding method further comprises storing tables of products and inverses in the one or more subfields of FN. -
32. The method of claim 28, wherein the first one-dimensional table of powers of α
- is stored in a bit matrix form under the first mapping.
-
33. The method of claim 28, wherein the first and second mappings are the same mapping.
-
34. The decoding method of claim 28, wherein step (d) includes reordering the bits of the decoding matrix into a number of bit fields treated as unsigned integers, each integer corresponding to an XOR accumulate of a subset of a set of syndrome data fields onto a subset of the decoded data;
- and performing matrix multiply by looping over all of the integers.
-
35. A data decoder for decoding data, wherein the data comprises d data symbols and m parity symbols and wherein up to a total of m data and parity symbols are unavailable, each symbol consisting of N bits, where d is an integer greater than 1, m is an integer greater than 1, N is an integer greater than 1, and s is an integer, wherein each k-th of the m parity symbols for integer k between 0 and m−
- 1 has been calculated from the d data symbols by evaluating a parity polynomial
where α
is a primitive element of a finite field FN of dimension N over the bit field {0,1}, all N-bit symbols being mapped onto the field FN by a first and a second mapping each of which is a vector space isomorphism over {0,1} using bitwise AND and XOR operations, the first and second mapping being either the same or different mappings, such that for every integer M between 1 and min(m,d) inclusive, and every ordered subset of M−
1 integers {i2, . . . iM} between 1 and d−
1, and every ordered subset of M−
1 integers {j2, . . . jM} between 1 and m−
1, the determinant of the matrix
is nonzero in the field FN,the decoder comprising; a memory storing a first one-dimensional table of powers of α
in a form under the first mapping and a second one-dimensional table of powers of α
in a form under the second mapping, each table being indexed by the power to which α
is raised, where the index ranges from an integer value by steps of 1 to a greater integer value,means for generating a square decoding matrix by inverting a square submatrix of a parity matrix P;
and the square submatrix is defined based on identities of the unavailable data symbols and available parity symbols, the means for generating;for a 1×
1 square submatrix,means for obtaining a power of α
from the first one-dimensional table by table lookup using an index determined by the square submatrix entry; andfor a 2×
2 or larger square submatrix,means for calculating a plurality of indices based on an expression of inverse matrix entries as minors of the square submatrix of the parity matrix; and means for obtaining powers of α
from the second one-dimensional table by table lookup using the calculated indices;means for calculating syndrome data using the parity matrix and the available data and parity symbols; and means for multiplying the syndrome data by the square decoding matrix to obtain data symbols corresponding to the unavailable data symbols. - View Dependent Claims (36, 37, 38)
wherein in the second one-dimensional tables the powers of α
are stored in a bit vector form under the second mapping;wherein the means for generating a square decoding matrix further comprises; for the 2×
2 or larger square submatrix, means for converting each entry of the square decoding matrix into a bit matrix form under the first mapping.
- 1 has been calculated from the d data symbols by evaluating a parity polynomial
-
38. The data decoder of claim 37, wherein the means for converting includes at least one accumulator, each accumulator comprising:
-
a trunk input including N*D bits logically indexed by a width-wise coordinate i and a depth-wise coordinate j, i being an integer variable between 0 and N−
1 and j being an integer between 0 and D−
1, the bits having the same j logically forming a j-th trunk input vector, wherein D is the count of matrix entries handled in a single calculation;a trunk output including N*D bits indexed by the width-wise coordinate i and the depth-wise coordinate j, the bits having the same j logically forming a j-th trunk output vector; a side output including N*D bits each connected to the corresponding bits of the trunk output; and for each value of j, zero or more shifts and XOR combiners forming a mapping circuit, the mapping circuit connected to the N bits of the j-th trunk input vector as input and generating as output N mapped bits logically forming the j-th trunk output vector, wherein the j-th trunk output vector is capable of being expressed as a product of the trunk input vector and x=α
s+k;wherein in at least one accumulator, each bit of the trunk output is switchably connected to the corresponding bit of the trunk input via a latch, or connected to a corresponding bit of a trunk input of another accumulator.
-
-
39. A method of processing input digital signals, wherein the digital signals include one or more input signals each representing an element of a first finite field of dimension 2*N, the method comprising:
-
(a) for each of the input signals, forming a first and a second intermediate signal representing a first and a second element respectively of a second finite field of dimension N, such that the field element represented by the input signal is the sum of the second element of the second field and the product of the first element of the second field with a constant element A of the first finite field, wherein A satisfies the equation
A2+A+g=0
where g is a constant element of the second finite field such that the equation
X2+X+g=0
does not have a solution X in the second finite field;(b) performing operations using the intermediate signals formed in step (a), including; (b1) performing operations using the intermediate signals from step (a) to generate first additional intermediate signals, and (b2) performing operations using the intermediate signals from step (a) or (b1) to generate further additional intermediate signals, the operations in steps (b1) and (b2) including a general add which forms the field sum of two intermediate signals, a general multiply which forms the field product of two intermediate signals, or a g-multiply which forms the field product of one intermediate signal with the constant element g; and (c) generating an output signal representing an element of the first finite field using intermediate signals formed in step (a) or step (b) such that the field element represented by the output signal is the field product of two field elements represented by two input signals or the field product of an field element represented by an input signal with the constant field element A*g, wherein if in step (c) the field element represented by the output signal is the field product of two field elements represented by two input signals, then step (b) includes performing zero or more general adds, one or more g-multiplies, and no more than three general multiplies, and if in step (c) the field element represented by the output signal is the field product of one field element represented by an input signal with the constant field element A*g, then step (b) includes performing zero general multiplies, zero or more general adds, and no more than three g-multiplies.
-
Specification