Method and system utilizing quintuple parity to provide fault tolerance
10997024 · 2021-05-04
Assignee
Inventors
Cpc classification
G06F3/0659
PHYSICS
G06F3/0604
PHYSICS
H03M13/157
ELECTRICITY
H03M13/033
ELECTRICITY
H03M13/3761
ELECTRICITY
H03M13/373
ELECTRICITY
H03M13/1575
ELECTRICITY
H03M13/15
ELECTRICITY
International classification
G06F11/10
PHYSICS
H03M13/03
ELECTRICITY
Abstract
An error correction and fault, tolerance method and system for an array of disks is presented. The array comprises k+5 disks, where k disks store user data and 5 disks store computed parity. The present invention further comprises a method and a system for reconstituting the original content of each of the k+5 disks, when up to disks have been lost, wherein the number of disks at unknown locations is E and the number of disks wherein the location of the disks is known is Z. All combinations of faulty disks wherein Z+2×E≤4 are reconstituted. Some combinations of faulty disks wherein Z+2×E≤5 are either reconstituted, or errors are limited to a small list.
Claims
1. A method of encoding data for providing higher fault tolerance to an associated array of disks in subsequent decoding, said array storing a plurality of identically sized logical or physical blocks of data, herein referred to as stripes, said method comprising: (a) logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe; (b) numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k; (c) calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5, wherein the calculating comprises: (i) selecting k non-zero distinct elements of a Galois field GF(2.sup.m), denoted by α.sub.1, α.sub.2, . . . , α.sub.k, and at most one root of a quadratic equation ζ.sup.2+ζ+1=0 to be included in the elements; and (ii) calculating parity of each parity strip according to the formula
M.sub.j,i=α.sub.i.sup.j−1 for j=1, 2, 3, 4, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1); and (d) extending each stripe of the plurality of stripes into an encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes, wherein the data strips are unmodified and generated using a systematic coding of encoding data; and (e) storing the plurality of encoded stripes in the array of disks such that each strip of the associated encoded stripe is stored in a unique disk in the array of disks, wherein each disk stores one strip from each encoded stripe, and wherein an order of the strips in each stripe can be optionally changed prior to storing to implement load balancing, wherein the step of extending each stripe of the plurality of stripes by combining k data strips and the five parity stripes provides an enhanced fault tolerance.
2. The method of claim 1 wherein the subsequent decoding of the plurality of encoded stripes of data comprises subjecting the plurality of encoded stripes to an error-generating process, the error-generating process comprising storage and retrieval of data from disks and data transmission over a noisy channel, and wherein the decoding further comprises identifying and correcting combinations of errors at known and unknown locations in the plurality of encoded stripes of data, wherein most likely combinations of errors are given higher priority over less likely combinations of errors.
3. The method of claim 2 further comprising a syndrome decoding, comprising: (a) calculating a plurality of syndrome vectors s.sub.l=(s.sub.j,l).sub.j=1.sup.5, l=1, 2, . . . , L, according to formula:
4. The method of claim 3, further comprising: (a) identifying at most two faulty strips of data in each stripe retrieved, herein referred to as received vector, from the array of disks, wherein the identifying does not require prior knowledge of a location or content of the faulty strips in the received vector, the identifying further comprising calculating two or more syndromes and syndrome ratios for the received vector to identify the at most two faulty strips of data: and (b) reconstituting lost data in the faulty strips in the received vector by calculating said lost data from non-faulty strips comprising the associated stripe. wherein the method provides fault tolerance due to a combination of at most two errors at known or unknown locations.
5. The method of claim 4, further comprising: (a) computing a location of the faulty strips with unknown locations; and (b) calculating lost data from non-faulty strips and reconstituting the lost data in the plurality of faulty strips of the received vector, wherein each stripe contains Z faulty strips at known locations, and E faulty strips at unknown locations, and wherein Z and E are nonnegative whole numbers such that Z+2×E≥4.
6. The method of claim 5, wherein the number of Galois field operations is independent of the number of disks in the array.
7. The method of claim 3, further comprising list decoding whereby a listing of most likely error vectors is produced for a given syndrome vector, in an order of decreasing likelihood.
8. The method of claim 7, wherein a complete listing of all of the most likely error vectors is produced for each syndrome vector, for which said complete listing of all of the most likely error vectors comprises at most two error vectors.
9. The method of claim 8, wherein the number of Galois field operations is independent of the number of disks in the array.
10. The method of claim 7, further comprising providing fault tolerance of up to 5 errors by collecting lists of most likely error vectors from multiple stripes, and using the lists to reconstitute the lost data, wherein providing the fault tolerance comprises: (a) searching for multiple stripes where the lists of error vectors share a set of common error locations; (b) identifying locations of errors in said multiple stripes at the set of common error locations; and (c) reconstituting lost data in said multiple stripes.
11. The method of claim 10 wherein each stripe contains up to three faulty data strips, and none of the faulty parity strips.
12. The method of claim 3, further comprising listing up to two possible error locations for one data error at unknown location, wherein each stripe contains four faulty strips, wherein two of the faulty strips are data strips at known locations, a third strip is a data strip at an unknown location, and a fourth strip is a parity strip at a known location.
13. A method of encoding data logically or physically partitioned into a plurality of identically sized data blocks called stripes, said method comprising: (a) logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of mi associated stripe: (b) numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k; (c) calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5, wherein the calculating comprises: (i) selecting k non-zero distinct elements of a Galois field GF(2.sup.m), denoted by α.sub.1, α.sub.2, . . . , α.sub.k: and (ii) calculating parity of each parity strip according to the formula
M.sub.j,i=α.sub.i.sup.j−1 for j=1, 2, 3, 4, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1); and (d) extending each stripe of the plurality of stripes into an encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes, wherein the data strips are unmodified and generated using a systematic coding of encoding data.
14. A system of encoding data for providing higher fault tolerance to an associated array of disks in subsequent decoding, said array storing a plurality of identically sized logical or physical blocks of data, herein referred to as stripes, the system comprising: (i) one or more processors, and (ii) a memory coupled to the one or more processors, the memory to store computer-executable instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising: (a) logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe; (b) numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k; (c) calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5. wherein the calculating comprises: (i) selecting k non-zero distinct elements of a Galois field GF(*2.sup.m). denoted by α.sub.1, α.sub.2, . . . , α.sub.k; and (ii) calculating parity of each parity strip according to the
M.sub.j,i=α.sub.i.sup.j− for j=1, 2, 3, 4, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1); and (d) extending each stripe of the plurality of stripes into an encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes, wherein the data strips are unmodified and generated using a systematic coding of encoding data: and (e) storing the plurality of encoded stripes in the array of disks such that each strip of the associated encoded stripe is stored in a unique disk in the array of disks, wherein each disk stores one strip from each encoded stripe, and wherein an order of the strips in each stripe can be optionally changed prior to storing to implement loud balancing, wherein the step of extending each stripe of the plurality of stripes by combining k data strips and the five parity stripes provides an enhanced fault tolerance.
15. The system of claim 14, wherein the subsequent decoding of the plurality of encoded stripes of data comprises subjecting the plurality of encoded stripes to an error-generating process, the error-generating process comprising storage and retrieval of data from disks and data transmission over a noisy channel, and wherein the decoding further comprises identifying and correcting combinations of errors at known and unknown locations in the plurality of encoded stripes of data, wherein most likely combinations of errors are given higher priority over less likely errors.
16. The system of claim 15, wherein the subsequent decoding further comprises a syndrome decoding, wherein the syndrome decoding comprises: (a) calculating a plurality of syndrome vectors s.sub.l=(s.sub.j,l).sub.j=1.sup.5, l=1, 2, . . . , L, according to formula
17. The system of claim 16, wherein the memory includes additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising: (a) identifying at most two faulty strips of data in each stripe retrieved, herein referred to as received vector, from the array of disks, w herein the identifying does not require prior knowledge of a location or content of the faulty strips in the received vector, the identifying further comprising calculating two or more syndromes and syndrome ratios for the received vector to identify the at most two faulty strips of data: (b) reconstituting lost data in the faulty strips in the received vector by calculating said lost data from non-faulty strips comprising the associated stripe, wherein the operation provides fault tolerance due to a combination of at most two errors at known or unknown locations; (c) computing a location of the faulty strips with unknown locations; and (d) calculating lost data from non-faulty strips and reconstituting the lost data in the plurality of faulty strips of the received vector, wherein each stripe contains Z faulty strips at known locations, and E faulty strips at unknown locations, and wherein Z and E are nonnegative whole numbers such that Z+2×E≥4, wherein the number of Galois field operations is independent of the number of disks in the array.
18. The system of claim 16, wherein the memory includes additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising: performing list decoding comprising producing a listing of most likely error vectors for a given syndrome vector, in an order of decreasing likelihood; and producing a complete listing of all of the most likely error vectors for each syndrome vector, for which said complete listing of all of the most likely error vectors comprises at most two error vectors, wherein the number of Galois field operations is independent of the number of disks in the array.
19. The system of claim 18, wherein each stripe contains up to three faulty data strips, and none of the faulty parity strips.
20. The system of claim 16, wherein the memory includes additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising: listing up to two possible error locations for one data error at unknown location, wherein each stripe contains four faulty strips, wherein two of the faulty strips are data strips at known locations, a third strip is a data strip at an unknown location, and a fourth strip is a parity strip at a known location.
Description
SUMMARY OF THE INVENTION
(1) In some aspects, the present invention provides a method of calculating of parity data and also expresses coefficients P.sub.j,i, of the parity data as a matrix P. In order to overcome the problem of increasing fault tolerance of RAID 6 and having efficient decoding, similar matrices were proposed in the past. Most notably, the matrix in (“A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems”, Plank 1997) called Information Dispersal Matrix (IDM) was proposed:
(2)
Matrix M generalizes the matrix of RAID 6 (The Mathematics of RAID-6, Anvin 2009), where p=1 yields the matrix used in RAID 6 coding method. Over the period of several years, it remained unnoticed that the method based on matrix M in (1) has what was perceived as a fundamental flaw, because it was discovered that some submatrices of M are not invertible as required by the decoding method. Matrix M was abandoned, and in subsequent papers (“Note: Correction to the 1997 Tutorial on Reed-Solomon Coding”, Plank and Ding 2005: Accelerated erasure coding system and method, Anderson and Mann 2014) a different matrix was proposed, based on column reduction of Vandermonde matrix An application to RAID is based on this modification of the Vandermonde matrix was presented in (Accelerated erasure coding system and method, Anderson and Mann 2014; The Original View of Reed-Solomon Coding and the Welch-Berlekamp Decoding Algorithm. Mann '2013). The generator matrix G of the present invention adds a row to the matrix M in (1) constructed with p=3, such that the row is obtained by adding rows k+2 and k+3 of the matrix M. The surprising discovery in the course of research on this matrix and the associated systematic, linear FEC code is that the resulting code overcomes the problem of efficient, systematic coding with significantly higher fault tolerance than than RAID 6. By means of a mathematical proof it was demonstrated that, the code has distance 5. In particular, the code of the invention is not a Maximum Distance Separable (MDS) code, which may have excluded it from the search for a good code by those skilled in the art. It can be further seen that many submatrices of the generator matrix G shown in
(3) Additionally, the error code based on the generator matrix G can be more efficiently decoded in the decoding method of the present invention, by using a fixed number of Galois field operations, independent of the number of disks in the array. Upon examining of the method of the invention, an efficient decoder can be constructed because of the care taken to preserve the essential features of the Vandermonde matrix, in particular, to keep simple formulae for the coefficients P.sub.j,i. The method of decoding of the present invention significantly improves upon the prior art by employing a plurality of non-linear steps comprising solving systems of algebraic equations in several variables, for achieving the efficiency of the decoding. It is surprising that the non-linear steps can be completed by solving algebraic equations in one variable only, and of degree not more than 3. By comparison, Reed-Solomon codes use a single non-linear step consisting of solving a single algebraic equation in one variable, but of higher degree. The use of several non-linear steps solving systems of algebraic equations in several variable to achieve the efficient decoding is surprising, as the prior art would associate such a non-linear step with increasing computational complexity. For example, the computational complexity associated with solving a general system of polynomial equations in several variables is doubly exponential or at least polynomial, in the size of the system, making the general method based on such systems of polynomial equations impractical. It has been demonstrated that even for small degrees the computational complexity is still polynomial (“Polynomial Complexity of Solving Systems of Few Algebraic Equations with Small Degrees”, Grigoriev 2013). By focusing on specific features of the non-linear systems in the present invention, it was discovered that the non-linear step can actually be performed very efficiently, leading to overall quasi-logarithmic computational complexity O(log)(N).Math.log log(N).Math.log log log(N)) in the number of disks, when performed on a parallel computer with N processors. Such low computational complexity should be surprising and unexpected to those skilled in the art, who would expect linear complexity O(N) in the number of disks. The present invention discloses that the number of Galois field operations is independent of the number of disks, which has significant computational benefits. For example, in order to perform any common task, the time is typically expected to increase proportionally to the task size (e.g., linear complexity). Thus, for about 10000 disks, the size of the input, increases by a factor 10000, and we would expect, to take tip 1000 times more time than for input of size 10. However, the inventors have recognized that it is possible to significantly reduce the computational time by using algorithms using logarithmic complexities. For example, the time it takes to decode a stripe, according to the present invention is nearly proportional to the logarithm of the number of disks. More specifically, if we compare RAID with N disks to RAID with N.sup.2 disks, N.sup.3, disks, etc, the time it takes to decode a stripe of data will double for N2, triple for N.sup.3 and so on. Thus, increasing the number of disks from 10 to 100 will only double the time to decode the stripe; if we have RAID with 10000 disks, the time will only quadruple over 10 disks according to an embodiment of the present invention.
(4) In order to overcome data loss due to simultaneous failure of multiple disks, a method and apparatus for distributing data among multiple networks, machines, drives, disk sectors, files, message packets, and/or other data constructs, henceforth called “disks” is disclosed.
(5) In one aspect, the invention is an efficient method and apparatus for efficient error correction in data storage and computer related applications based on a systematic, linear forward error correcting (FEC) code of type [N, N-5,5] employing Galois field arithmetic. The method comprises designating 5 symbols of a codeword as parity, providing storage loss 5/N. As is known, [N, K, D] code, the code can correct Z erasures and E errors at unknown locations if the inequality
Z+2×E≤D−1
holds (“Linear Block Codes”, Moon 2005). For the code in the invention this inequality is
Z+2×E≤4
implying that, the method provides error tolerance of up to 2 errors at unknown locations, and up to 4 known erasures, and of some combinations of known erasures and errors at unknown locations. The pairs (Z, E) satisfying the inequality Z+2×E≤4 are: (0,0). (0,1), (0,2), (1,0), (1,1), (2,0), (2,1), (3,0), (4,0).
(6) The method of the invention provides error tolerance of a significant fraction of 5 simultaneous erasures. Some other combinations of errors, wherein Z+2×E≥5, are handled by narrowing the list of most likely error combinations to a small number, e.g. 2.
(7) In another aspect, the invention provides a fault-tolerant distributed data storage and retrieval system that delivers data at high speed and low cast, with storage data rate of up to N times of the rate at which data can be stored the slowest data construct comprising the apparatus, and with retrieval data rate of up to N−5 times the retrieval data rate of the slowest data construct comprising the apparatus.
(8) In yet another aspect, the invention provides a low cost RAID with a significantly higher fault, tolerance than RAID 6, providing fault tolerance of up to 4 concurrent disk failures without data loss, such as failure of additional disk during reconstruction of another disk. Said RAID retaining error correcting capability to correct Undetected Disk Errors (UDE) when in degraded modes with up to 2 concurrently failed disks. Said RAID allowing at least 2.sup.m−2 data disks to be connected to one controller when used with a Galois field GF(2.sup.m). For example, when using bytes (elements of GF(256)) as symbols, RAID may comprise up to 259 disks (254 data disks and 5 parity disks) connected to one RAID controller. Said RAID providing high data rates by striping, with or without load balancing.
(9) In yet another aspect, the invention provides an algebraic method of decoding of linear FEC codes, generalizing Reed-Solomon codes by allowing asymmetric treatment of error locators corresponding to different classes of symbols. One example of such asymmetric treatment is a systematic code wherein data symbols are divided into two groups, where one group is the data symbols and the other group is the parity symbols. The invention provides a method of decoding all linear FEC codes algebraically by solving systems of non-linear polynomial equations,
(10) We turn to certain calculations showing the advantage of FEC code of the invention in comparison with the widely used RAID 6 code. As is known, array error rate can be computed from the formula for the tail probability of a binomial distribution:
(11)
where R represents the failure rate of said disks comprising the array and F is the number of failures the array tolerates. The RAID array in the invention has F=2 for errors at unknown locations (two-error tolerance), and F=4 for errors at known locations jour-error tolerance). For comparison, RAID level 6 has F=1 for errors at unknown locations (a single error tolerance) and F=2 for errors at known locations (two-error tolerance). As it is easily determined,
(12)
assuming N>>1 and N×R<<1, the latter assumption being generally satisfied and necessary for a RAID array to provide sufficient fault tolerance. It follows that for unknown location errors, the array error rate is lower by a factor of
(13)
for the RAID array in the invention than that of a RAID G array. This provides for the ability to manufacture significantly larger RAID arrays employing a single controller. As an example, the probability that a particular byte stored in the array will be read incorrectly upon retrieval due to an UDE is estimated at
R=1−(1−10.sup.−14).sup.8≈8×10.sup.−14≈10.sup.−13
wherein 8 represents the number of bits in a byte, the underlying Galois field is GF(256) and 10.sup.−14 represents the typical error rate for a single rotational hard disk. If the array has N=100 disks, the N×R≈10.sup.−11. Hence, the probability of data loss is reduced by a factor of
(14)
by utilizing the array of the invention instead of a RAID 6 array. Similarly, the error rate of errors at known locations is reduced by a factor of
(15)
This is determined by studying the ratio:
(16)
The probability of data loss due to failed disks at known locations is decreases even more, by a factor of 20×1022. Another comparison can be made by requiring that the array in the invention and RAID 6 array give the same error rates, but the number of disks in the arrays is N.sub.1 and N.sub.2, respectively. For errors at unknown locations we require:
(17)
By solving the equation with respect to N.sub.1 we obtain:
(18)
For example, a RAID 6 array comprising N.sub.2−10 disks is comparable in terms of the probability of data loss to the array of the invention with
N.sub.1≈300,000=3×10.sup.5
disks. While it is hard to imagine today an array of this many disks attached to a single controller, the reasoning demonstrates a great advantage of the array of the invention over RAID 6 array in applications with a much higher value of R, such as communications over a noisy communication channel. It should be noted that an array of the invention comprising 3×10.sup.5 disks cannot be constructed over the field GF(256), but can be constructed with a Galois field GF(2.sup.19) elements, as 2.sup.19=524.288. While the rate R is slightly changed by this modification R=19×10.sup.−14<10.sup.−12, this does not affect overall conclusions about the ability to use orders of magnitude more disks attached to a single raid controller that RAID 6, with comparable error rates, still estimating N.sub.1≈10.sup.5. It is also insightful to estimate how much more noise can the array of invention tolerate, with the same number of disks N, but different error rates R.sub.1 and R.sub.2 for a single device, by requiring:
(19)
Solving for R.sub.1, we obtain
(20)
For example, a RAID 6 array comprising rotational hard disks has R.sub.2=10.sup.—13 and the array of the invention with the same number N=100 disks has
R.sub.1≈6.7×10.sup.−10
which is approximately 6,700 higher. Therefore, the array of the invention with comparable error rate to the RAID 6 array can comprise devices with 6,700 times higher error rate.
(21) A method of encoding data for providing higher fault tolerance to an associated array of disks in subsequent decoding is provided. The array may store a plurality of identically sized logical or physical blocks of data, herein referred to as stripes. The method may include logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe, numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k, and calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5. The calculating may include selecting k non-zero distinct elements of a Galois field GF(2.sup.m), denoted by α.sub.1, α.sub.2, . . . , α.sub.k, and at most one root of a quadratic equation ζ.sup.2+ζ+1=0 to be included in the elements, and calculating parity of each parity strip according to the formula
(22)
wherein j is a parity strip index, associated with parity strip numbered k+j in the associated stripe, and l is a stripe index of the associated stripe, and wherein
M.sub.j,i=α.sub.i.sup.j−1
for j=1, 2, 3, 4, and where.
M.sub.5,i=α.sub.i.Math.(α.sub.i+1);
The method may additionally include extending each stripe of the plurality of stripes into an encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes. As such, the data strips may be unmodified and may be generated using a systematic coding of encoding data and storing the plurality of encoded stripes in the array of disks such that each strip of the associated encoded stripe may be stored in a unique disk in the array of disks. Each disk may store one strip from each encoded stripe, and order of the strips in each stripe can be optionally changed prior to storing to implement load balancing. In this way, the step of extending each stripe of the plurality of stripes by combining k data strips and the five parity stripes may provide all enhanced fault tolerance. The subsequent decoding of the plurality of encoded stripes of data may include subjecting the plurality of encoded stripes to an error-generating process, the error-generating process comprising storage and retrieval of data from disks and data transmission over a noisy channel. The decoding may further include identifying and correcting combinations of errors at known and unknown locations in the plurality of encoded stripes of data, wherein most likely combinations of errors are given higher priority over less likely combinations of errors. The method may further include a syndrome decoding. Syndrome decoding may include calculating a plurality of syndrome vectors s=(s.sub.j,l).sub.j=1.sup.5, l=1, 2, . . . L, according to formula:
(23)
wherein r.sub.i,l denotes data retrieved from disk i and stripe l, for i=1, 2, . . . , k+5 and l=1, 2, . . . , L, wherein L is the total number of stripes. The syndrome decoding may additionally include calculating elements of the Galois field, herein referred to as error locators, by performing arithmetical operations in the Galois field. The syndrome decoding may additionally include identifying error locations based on the error locators, wherein an error locator value equal to α.sub.i for some i designates data strip with index i as a faulty strip, calculating error values, and reconstituting lost data in each faulty strip by calculating lost data from non-faulty strips. The method may additionally include identifying at most two faulty strips of data in each stripe retrieved, herein referred to as received vector, from the array of disks, wherein the identifying does not require prior knowledge of a location or content of the faulty strips in the received vector. As such, the identifying may further include calculating two or more syndromes and syndrome ratios for the received vector to identify the at most two faulty strips of data, and reconstituting lost data in the faulty strips in the received vector by calculating said lost data from non-faulty strips comprising the associated stripe, wherein the method provides fault tolerance due to a combination of at most two errors at known or unknown locations. The method may additionally include computing a location of the faulty strips with unknown locations, and calculating lost data from non-faulty strips and reconstituting the last data in the plurality of faulty strips of the received vector, wherein each stripe contains Z faulty strips at known locations, and E faulty strips at unknown locations, and wherein Z and E are nonnegative whole numbers such that Z+2×E≤4. As such, the number of Galois field operations may be independent of the number of disks in the array. The method may further include list decoding whereby a listing of most likely error vectors is produced for a given syndrome vector, in an order of decreasing likelihood. A complete listing of all of the most likely error vectors may be produced for each syndrome vector, for which said complete listing of all of the most likely error vectors includes at most two error vectors and the number of Galois field operations may be independent of the number of disks in the array. The method may additionally include providing fault tolerance of up to five errors by collecting lists of most likely error vectors from multiple stripes, and using the lists to reconstitute the lost data. As such, providing the fault tolerance may include searching for multiple stripes where the lists of error vectors share a set of common error locations, identifying locations of errors in said multiple stripes at the set of common error locations, and reconstituting lost data in said multiple stripes. Each stripe may contain up to three faulty data strips, and none of the faulty parity strips. The method may additionally include listing up to two possible error locations for one data error at unknown location. Each stripe may contain four faulty strips and two of the faulty strips may be data strips at known locations, a third strip may be a data strip at an unknown location, and a fourth strip may be a parity strip at a known location. A second example embodiment of the present invention includes a method of encoding data logically or physically partitioned into a plurality of identically sized data blocks called stripes. The said method may include logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe, and numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k. The method may additionally include calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5. As such, the calculating may include selecting k non-zero distinct elements of a Galois field GF(2.sup.m), denoted by α.sub.1, α.sub.2, . . . , α.sub.k, and calculating parity of each parity strip according to the formula
(24)
The method may additionally include providing fault tolerance of up to five errors by collecting lists of most, likely error vectors from multiple stripes, and using the lists to reconstitute the lost data. As such, providing the fault tolerance may include searching for multiple stripes where the lists of error vectors share a set of common error locations, identifying locations of errors in said multiple stripes at the set of common error locations, and reconstituting lost data in said multiple stripes. Each stripe may contain up to three faulty data strips, and none of the faulty parity strips. The method may additionally include listing up to two possible error locations for one data error at unknown location. Each stripe may contain four faulty strips and two of the faulty strips may be data strips at known locations, a third strip may be a data strip at an unknown location, and a fourth strip may be a parity strip at a known location.
(25) A second example embodiment of the present invention includes a method of encoding data logically or physically partitioned into a plurality of identically sized data blocks called stripes. The said method may include logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe, and numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k. The method may additionally include calculating parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5. As such, the calculating may include selecting k non-zero distinct elements of a Galois field GF(2.sup.m). denoted by α.sub.1, α.sub.2, . . . , α.sub.k, and calculating parity of each parity strip according to the formula
(26)
where j is a parity strip index, associated with parity strip numbered k+j in the associated stripe, and is a stripe index of the associated stripe, and where
M.sub.j,i=α.sub.i.sup.j−1
for j=1, 2, 3, 4, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1);
The method may additionally include extending each stripe of the plurality of stripes into an encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes, wherein the data strips are unmodified and generated using a systematic coding of encoding data. A third example embodiment of the present invention includes a system of encoding data for providing higher fault tolerance to an associated array of disks in subsequent decoding, said array storing a plurality of identically sized logical or physical blocks of data, herein referred to as stripes. The system may include one or more processors, and a memory coupled to the one or more processors, the memory to store computer-executable instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including logically or physically partitioning each stripe into k≥1 identically sized strips, herein referred to as data strips, wherein each data strip stores a portion of the data blocks of an associated stripe, and numbering the data strips in each stripe with whole numbers 1, 2, 3, . . . , k. The one or more processors of the system may additionally calculate parity data comprising five parity strips, distinct from the data strips, and numbered k+1, k+2, k+3, k+4 and k+5. As such, the calculating may include selecting k non-zero distinct elements of a Galois field GF(2.sup.m), denoted by α.sub.1, α.sub.2, . . . , α.sub.k, and calculating parity of each parity strip according to the formula
(27)
wherein j is a parity strip index, associated with parity strip numbered k+j in the associated stripe, and l is a stripe index of the associated stripe, and wherein
M.sub.j,i=α.sub.i.sup.j−1
for j=1, 2, 3, 4, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1);
The calculating may additionally include extending each stripe of the plurality of stripes into mi encoded stripe by combining k data strips and the five parity strips and comprising a total of k+5 strips to generate a plurality of encoded stripes, wherein the data strips are unmodified and generated using a systematic coding of encoding data; and storing the plurality of encoded stripes in the array of disks such that each strip of the associated encoded stripe is stored in a unique disk in the array of disks, wherein each disk stores one strip from each encoded stripe, and wherein an order of the strips in each stripe can be optionally changed prior to storing to implement load balancing. As such, the step of extending each stripe of the plurality of stripes by combining k data strips and the five parity stripes provides mi enhanced fault tolerance. The subsequent decoding of the plurality of encoded stripes of data may include subjecting the plurality of encoded stripes to an error-generating process, the error-generating process comprising storage and retrieval of data from disks and data transmission over a noisy channel. The decoding may include identifying and correcting combinations of errors at known and unknown locations in the plurality of encoded stripes of data, wherein most likely combinations of errors are given higher priority over less likely errors. The subsequent decoding may further include a syndrome decoding, wherein the syndrome decoding may include calculating a plurality of syndrome vectors s=(s.sub.j,l).sub.j=1.sup.5, l=1, 2, . . . , L, according to formula:
(28)
wherein r.sub.i,l denotes data retrieved from disk i and stripe l, for i=1, 2, . . . , k+5 and l=1, 2, . . . , L, wherein L is the tot al number of stripes and calculating elements of the Galois field, herein referred to as error locators, by performing arithmetical operations in the Galois field. The subsequent decoding may additionally include identifying error locations based on the error locators, wherein an error locator value equal to α.sub.i for some i designates data strip with index i as a faulty strip, calculating error values, and reconstituting lost data in each faulty strip by calculating lost data from non-faulty strips. The memory may include additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including identifying at most two faulty strips of data in each stripe retrieved, herein referred to as received vector, from the array of disks, wherein the identifying does not require prior knowledge of a location or content of the faulty strips in the received vector, the identifying further comprising calculating two or more syndromes and syndrome ratios for the received vector to identify the at most two faulty strips of data. The one or more processors may additionally reconstitute lost data in the faulty strips in the received vector by calculating said lost data from non-faulty strips including the associated stripe, wherein the operation provides fault tolerance due to a combination of at most two errors at known or unknown locations. The one or more processors may additionally compute a location of the faulty strips with unknown locations, and calculate lost data from non-faulty strips and reconstitute the lost data in the plurality of faulty strips of the received vector, wherein each stripe contains Z faulty strips at known locations, and E faulty strips at unknown locations, and wherein Z and E are nonnegative whole numbers such that Z+2×E≤4, wherein the number of Galois field operations is independent of the number of disks in the array. The memory may include additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including performing list decoding comprising producing a listing of most likely error vectors for a given syndrome vector, in an order of decreasing likelihood, and producing a complete listing of all of the most likely error vectors for each syndrome vector, for which said complete listing of all of the most likely error vectors comprises at most two error vectors, wherein the number of Galois field operations is independent of the number of disks in the array. Each stripe may contain up to three faulty data strips, aid none of the faulty parity strips. The memory may include additional instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including listing up to two possible error locations for one data error at unknown location, wherein each stripe contains four faulty strips, wherein two of the faulty strips may be data strips at known locations, a third strip may be a data strip at an unknown location, and a fourth strip may be a parity strip at a known location.
(29) The invention accordingly comprises the several steps and the relation of one or more of such steps with respect to each of the others, and the apparatus embodying features of construction, combinations of elements and arrangement of parts that are adapted to affect such steps, all is exemplified in the following detailed disclosure, and the scope of the invention will be indicated in the claims.
BRIEF DESCRIPTION OF THE DRAWINGS
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(j, ρ,x, y)←LocateFailedParityAndData(s, X),
comprising initial step [56], input of syndromes and excluded roots step [57], initialization of variables comprising position of failed parity drive j, Galois field element ρ associated with failed data drive, data error value x, parity error value y and auxiliary parity index m step [58], comparison of two consecutive syndromes s.sub.m and to zero step [59], assignment, of the ratio of consecutive syndromes s.sub.m and to ρ and constructing a vector P based on ρ step [60], checking membership of ρ in the set X of excluded roots of unity step [61], assignment of x followed by initializing failure count failcount to 0 and initializing loop counter t to 1 step [62], checking loop counter t and syndrome s.sub.t for consistency with assumptions made step [63], incrementing failure count failcount and updating failed parity drive position j step [64], incrementing of loop counter t step [65], testing whether loop counter t is in range step [66], comparison of failure count with 0 step [67], comparison of failure count with 1 step [68], assignment of invalid value 6 to failed parity disk position j step [69], assignment, of invalid value 0 to the failed parity disk position j step [70], assignment of the parity error value y step [71], comparison of auxiliary parity index m with value 1 step [72], assignment of value 3 to the auxiliary parity index m step [73], output of failed parity disk position j, Galois field element p associated with failed data disk position, data error value x and the parity error value y step [74], and end of the method to locate 1 failed data and 1 failed parity drive step [75].
(37)
(e, status)←RecoverFailedParityAndData (α, s),
comprising start of the method to correct error given 1 failed data and 1 failed parity drive step [76], input of the set of Galois field elements α and the syndrome vector a step [77], assignment of the set of excluded roots of unity to variable X step [78], initialization of error vector e step [79], initialization of the data drive count k step [80], initialization of logical variable status stop [81], initialization of the failed parity drive position j, the Galois element ρ associated with the failed data drive, the data error x, and the parity error y step [82], comparison of the failed parity drive position j to invalid value 0 step [83], lookup of the failed data drive position based on the Galois field element ρ step [84], testing failed data drive position i for invalid value 0 step [85], assignment of data error value x to the element of the error vector e.sub.i step [86], testing validity of the failed parity drive position j step [87], assignment of parity error value y to the element of the error vector e.sub.k+j [88], assignment of true value to the status variable step [89], output of error vector e and status variable status stop [90], and end of method to correct error given 1 failed data anti 1 failed parity drive step [91].
(38)
(u,v,x,y)←LocateTwoFailedDataDrives(s),
comprising start of the method to locate 2 failed data drives step [92], input of the syndrome vector s step [93], initialization of Galois field elements u and r associated with failed data drive positions and the corresponding error values x and y step [94], parity consistency check step [95], computing determinants associated with a linear system step [96], comparison of determinants associated with a linear system to zero step [97], computing symmetric polynomial values σ.sub.1 and σ.sub.2 of the Galois field elements u anti v step [98], computing values u and v associated with failed drive positions by solving a quadratic equation step [99 ], computing error values x and y step [100]. output of Galois field elements u and v associated with failed drive positions and the corresponding error values x and y step [101], and end of method to locate 2 failed data drives step [102].
(39)
(e, status)←RecoverFailedParityAndData(α, s),
comprising the following steps: start of the method to correct errors, given that two data drives failed step [103], input of the set of Galois field elements α and the syndrome vector s step [104], computing Galois field elements u and v associated with two drive failures and corresponding error values x and y step [105], assignment, of the number of elements of α to variable k step [106], assignment of the locations of the failed data drives to variables i and j step [107], initialization of the error vector e and the status variable status step [108], testing validity of i and j step [109]. assignment of error values x and y to the elements of the error vector i and j, and setting status to true as indication of success step [110], output of the error vector e and status variable status step [111], and end of method to correct errors, given that two data drives failed step [112].
(40)
(41)
(42)
(43)
(44)
(45)
(46) Referring now to
(47) The drawing in
(48) The drawing in
(49) We now turn again to
(50)
where N is the number of disks in the array, and the second notation is preferred when the stripe index l is obvious. The data in the stripe Stripe.sub.l is understood as a column vector in the N-dimensional vector space over the Galois field CF(2.sup.m). In the present invention, each stripe of the plurality of stripes is extended such that each stripe comprises the block of data associated with said stripe and a set of parity data comprising five parity strips. The array of disks may be divided into k data disks, to which data is written unmodified, and 5 parity disks, to which the computed parity data is written. For this reason, the List 5 disks are distinguished as parity disks, and refer to the data in their strips as P.sub.i,l instead of D.sub.k+i,l, for i=1, 2, 3, 4, 5. The parity of each parity strip is calculated according to
(51)
where j is the parity disk index and l is the stripe index, and where
M.sub.j,i=α.sub.i.sup.j−1
for j=1,2,3,4, i=1,2, . . . , k, and where,
M.sub.5,i=α.sub.i.Math.(α.sub.i+1), i=1,2, . . . , k.
The equivalent form of equation (2) is
s=H.Math.r (3)
and it represents s as a matrix product of the parity matrix [34] and vector r=D.sub.1,l, D.sub.2,l, . . . , D.sub.k+5,l) called the received vector, and containing the data of stripe numbered C. The term “sent vector” refers to data that were most recently written to the same locations. The sent vector r′=(D′.sub.1,l, D′.sub.2,l, . . . , D′.sub.k+5,lwhich may be different from the received vector due to errors. The difference e=r−r′ is henceforth called the “error vector”.
(52) The flowchart in
(53) In additional embodiments, a method of recovering data in at most 5 faulty strips of data in each stripe retrieved (“received vector”) from the array of disks is presented, said method further comprising a method for identifying at most two faulty strips, wherein said identification method does not require prior knowledge of a location or content of a faulty strip in the received vector, the identification method comprises calculating two or more syndromes and syndrome ratios for the received vector to identify the at most two faulty strips of data, wherein each syndrome, s, is calculated from:
(54)
wherein r.sub.i,l denotes data retrieved from disk i and stripe l, for i=1,2, . . . , k+5 and t=1,2, . . . , L, wherein L is the total number of stripes. Equation (4) is consistent with equations (2) and (3).
(55) The drawing in
(56)
The subscripted, Greek symbols α.sub.1, α.sub.2, . . . , α.sub.k represent member elements of the Galois field GF(2.sup.m), where m is any whole number, such as 1, 2, and so on. The whole number k represents the number of data disks comprising the RAID array. The elements α.sub.j must be distinct and non-zero. As the Galois field has 2.sup.m elements, usually numbered 0, 1, 2, . . . , 2.sup.m−1, this imposes a requirement that 1≤k≤.sup.m−1. Furthermore, we require that at most one of the elements α.sub.j satisfies the quadratic equation
ζ.sup.2+ζ+1=0 (6)
with an unknown quantity ζ, ranging over the Galois field GF(2.sup.m). Depending on m, either equation (6) has no solutions or it has two roots, which we call ζ.sub.1 and ζ.sub.2. Vieta's equations imply that ζ.sub.1+ζ.sub.2=1 and ζ.sub.1.Math.ζ.sub.2=1. Hence, both ζ.sub.1 and ζ.sub.2 and are non-zero and distinct. Additionally, the roots of equation 6 are also the roots of the equation ζ.sup.3=1, also called the cubic roots of unity. It follows that k may be further limited to the range 1≤k≤2.sup.m−2. As an example, in GF(256), i.e. when m=8, 1≤k≤254.
(57) The flowchart in
P.Math.e.sub.data+e.sub.parity=s (7)
where e.sub.data=(e.sub.1, e.sub.2, . . . , e.sub.k) is the data segment of the error vector, e.sub.parity=(e.sub.k+1, e.sub.k+2, e.sub.k+3, e.sub.k+4 , e.sub.k+5) is the parity segment of the error vector. let I be the set of indices i≤k such that e.sub.i≠0. Let J be set of indices j∈{1, 2, 3, 4, 5} such that e.sub.k+j≠0. Let P be the submatrix obtained from the parity-check matrix P.sub.5×k by keeping only the column with indices i∈I. Then
P.sup.I.Math.e.sup.I+e.sub.parity=s (8)
The non-zero entries in the parity vector play the role of slack variables, in the following sense: we satisfy a maximal subset of equations of the system
P.sup.I.Math.e.sup.I=s (9)
By setting slack variables according to the equation:
e.sub.parity=s−P.sup.I.Math.e.sup.I=s−P.Math.e.sub.data
we satisfy the remaining equations. If we drop the rows in both sides with indices j∈J, we obtain the simplified equation:
P.sup.JI.Math.e.sup.I=S.sup.J (10)
where P.sup.J,I is obtained from P.sup.I by deleting rows with indices j∈J, e.sup.I=e.sub.data.sup.I is the vector obtained by keeping entries of e with indices i∈I and s.sup.J is obtained from s by deleting entries with indices j where j∈J. There may be many solutions to the equation H.Math.e=s for a given syndrome vector s. According to maximum likelihood or minimal distance decoding, the solution to the decoding problem for the syndrome vector s is the vector e of minimum weight (i.e. with the minimum number of non-zero entries). The majority of steps of the error correcting method of the invention is directed towards finding such an error vector. The last step of the decoding process is computing the decoded vector r′=r−e, where r′ is the most likely codeword ( i.e. a vector in the column space of the generator matrix G). resulting in received vector r, and is also called the sent vector. It will be useful to have (10) in a more explicit form. Let u.sub.1, u.sub.2, . . . , u.sub.r be variables which in the invention are called data error locators. The steps of the decoding method will set u.sub.v=α.sub.i.sub.
(58)
by deleting rows with numbers j∈J. For example, for J={2, 4}, the deletion of rows step results in the system:
(59)
In symbolic form this system can be written as a system of algebraic equations
(60)
(61) where {1, 2, . . . , 5}\J={j.sub.1, j.sub.2, . . . , j.sub.t} the complement of the set J (thus t=5−|J| is the count of elements in the complement of J, wherein |J| denotes the number of elements of the set J, and “\,” represents set difference) in the set of all parity indices, and f.sub.v(u)=g.sub.j.sub.
(62)
and wherein b.sub.v=s.sub.j.sub.
P.sup.J,rx=s.sup.J (14)
wherein P.sup.J,r the coefficient matrix of the system (13) of linear equations in variables x.sub.1, x.sub.2, . . . , x.sub.rand wherein s.sup.J denotes a vector obtained from the syndrome vector by deleting entries with indices j∈J. For example,
(63)
(64) The linear system (14) is used to compute the constraints Γ which are necessary and sufficient conditions to be consistent, by methods of linear algebra, which will be apparent to those skilled in the art. Γ is a set of polynomial equations variables u.sub.i, i=1, 2, . . . , r, and the syndromes s.sub.j. The linear system (14) is also used to compute the non-uniqueness conditions Υ which are necessary and sufficient for the system to have a non-unique solution. The set Υ also consists from polynomial equations, involving only the coefficients, i.e. variables u.sub.i, i=1, 2. . . , r. Sets Γ and Υ are pre-computed and tabulated, and are used in lookup of constraints Γ and non-uniqueness conditions Υ step [49] test of consistency constraints step [50] and test of non-uniqueness conditions step [51]. If during the test of consistency constraints step [50] it is determined that the constraints are not satisfied, we abandon the current pair (J, r) and go back to the choice of parity error indices J and data error number r step [48]. It is important that the pairs are chosen in the order of increasing number of errors, i.e. |J|+r. Also, if there are known erasures amongst parity errors, J should include them. If there are r′≤r known erasures amongst data errors, the values of u.sub.i, i−1, 2, . . . , r′ are set to their data locators. If during the test of non-uniqueness conditions step [51] it is determined that the non-uniqueness conditions are satisfied, we move to the list decoding branch step [52]. This step may consider all possible errors by considering multiple equiprobable error vectors (i.e. having the same weight). One application of this branch may be fast identification of failed disks, as the number of failed disk is typically narrowed substantially. Another application of the list decoding branch step [52] is disclosed in
(65)
This is an upper bound on the number of times that choice of parity error indices J and data error number r step [48] will be executed. A variant of the invention would process some of the pairs (J, r), and exclude others. One example is a variant limiting the number of erasures Z and errors E, wherein Z+2×E≤4. The preferred embodiment handles all syndrome vectors for which there is a unique error vector f of minimum-weight, by finding said unique error vector. Another variant of the invention handles all syndrome vectors for which at most 2 minimum-weight syndrome vectors exist, by finding a list of said error vectors.
(66) In order to further clarify the test of consistency constraints step [50] and the test of non-uniqueness conditions step [51] of
(67)
(68) The determinant is found to be equal to:
(u.sub.2−u.sub.1)(u.sub.2 s.sub.5+u.sub.1 s.sub.5−u.sub.2 s.sub.3−u.sub.1 s.sub.3−s.sub.3−s.sub.1 u.sub.1 u.sub.2).
(69) As u.sub.2≠u.sub.1 may be assumed (data locators for distinct locations are distinct), the condition of consistency is:
u.sub.2 s.sub.5+u.sub.1 s.sub.5−u.sub.2 s.sub.3−u.sub.1 s.sub.3−s.sub.1 u.sub.1 u.sub.2=0.
(70) Furthermore, the condition can be expressed in terms of elementary symmetric polynomials σ.sub.1=u.sub.1 and u.sub.2 and σ.sub.2=u.sub.1 u.sub.2:
σ.sub.1(s.sub.5+s.sub.3)+s.sub.1 σ.sub.2+s.sub.3=0. (15)
(71) Therefore, when both u.sub.1 and u.sub.2 are known, γ={σ.sub.1(s.sub.5+s.sub.3)+s.sub.1 σ.sub.2+s.sub.3}. This formula can be found in
(u.sub.1+u.sub.2)(s.sub.5+s.sub.3)+s.sub.1 u.sub.1 u.sub.2+s.sub.3=0.
The solution is non-unique iff the coefficient at u.sub.2 and the term indepeudend of u.sub.2 are both zero.
(72)
Thus, Υ={s.sub.5+s.sub.3+s.sub.1 u.sub.1, s.sub.3+(s.sub.3+s.sub.5)u.sub.1}. If Υ is not satisfied, we find that
(73)
Thus, u.sub.2 is unique. If u.sub.2 is a valid locator we proceed to the solving a system of linear equations for error values step [53]. The third case is when u.sub.1 and u.sub.2 are both unknown (2 errors at unknown location). In this case the solution is typically non-unique and the details are omitted. This ends the walk-through of the steps of the method for J={2, 4} and r=2, and several variants of the method wherein some of the errors are known erasures.
(74) Exemplary arrangements of the preferred embodiment in
(75) The flowchart in
s=H.Math.r
where H is the parity check matrix [36] and r is the received vector. The steps leading to computing s from H and r are apparent to those skilled in the art, in particular, anyone familiar with matrix multiplication and algebra of Galois fields, and the general concept of syndrome decoding. In the initialization of variables comprising position of failed parity drive j, Galois field element ρ associated with failed data drive, data error value x, parity error value y and auxiliary parity index m step [58] we initialize j to integer value 0, Galois field values ρ, x and y to the 0 of the Galois field, and the integer counter m to integer 1, where m is generally ranging from 1 to 5, and limited by the method to values 1 and 3. In the explanation that follows, m is either 1 or 3. In the comparison of two consecutive syndromes s.sub.m, and s.sub.m+1 to zero step [59] we compare syndromes s.sub.m and s.sub.m+1 to ρ in the Galois field. If both syndromes are non-zero, we use their values to calculate their ratio, which we call ρ. In the assignment of the ratio of consecutive syndromes s.sub.m and s.sub.m+1 to ρ and constructing a vector P based on ρ step [60] we then calculate a Galois vector P with 5 components, which follow the pattern of columns parity matrix, and comprised of the Galois field elements 1, ρ, ρ.sup.2, ρ.sup.3 and ρ.Math.(p+1). In the checking membership of ρ in the set X of excluded roots of unity step [61] a set X of excluded cubic roots of unity is provided and membership. Comparison of P.sub.4 to 1 in step the [61] detects whether ρ is a cubic root of unity. If m=1 and ρ∈X, i.e. it has been excluded, m−3 is tried, and ρ is recomputed based on different syndromes.
(76) The drawing in
(77) In order to further illustrate the method of
x=e.sub.i, y=e.sub.k+1, z=e.sub.k+2:
(78)
We eliminate variables y and z by simply erasing the first two equations:
(79)
Elimination of x from the first two equations is attained by multiplying the first equation by ρ and adding the first two equations yields 0=ρs.sub.3+s.sub.4. Multiplying the third equation by ρ and adding all 3 equations yields 0=ρs.sub.5+s.sub.3+s.sub.4. This is a derivation of the system of equations in the first row of the table, which is:
(80)
Other systems of equations in the second column of the table are obtained by a variation of the method. One must ensure equivalence of the system of equations with the original equation H.Math.e=s. The third column of the table is obtained from the above system by eliminating ρ, resulting in the equation:
s.sub.4 s.sub.5+s.sub.3 s.sub.4+s.sub.3.sup.2=0 (19)
which is a accessary condition for the (overdetermined) system (18) to have a solution. It should be noted that ρ may be either a locator of a known erasure or an unknown locator. If ρ is known, we must check all equations in the third column, hence Γ has 2 polynomials:
Γ={s.sub.5 ρ+s.sub.4+s.sub.3, s.sub.3 ρ+s.sub.4}
If ρ is unknown, the Γ={s.sub.4 s.sub.5+s.sub.3 s.sub.4+s.sub.3.sup.2}. The column with the heading “Non-Uniqueness Condition” gives the condition for the system to have a non-unique solution. It is obtained by requiring that the coefficients at ρ in equations of the form A ρ+B=0 are both 0, and also, in equations A ρ.sup.2+B=0 must also be both 0 as the Frobenius (squaring) map ϕ(ρ)=p.sup.2 is an automorphism of the Galois field, and therefore there is only one root, of the equation A ρ.sup.2+B=0 if A+0, in a Galois field of characteristic 2. However, the full quadratic equation A ρ.sup.2+B ρ+C=0 may have 2 roots in Galois fields of characteristic 2. We determine the syndrome from the received vector and substitute into (19). If (19) is satisfied, ρ may be found by using one of the equations containing ρ, unless the non-uniqueness condition holds. It should be noted that the non-uniqueness condition in each of the rows states that the syndromes which do not correspond to the parity errors must be 0. Since the number of zero syndromes is 3, the most likely error is a pure parity error with two faulty parities j and l, with the corresponding errors e.sub.k+j=s.sub.j and e.sub.k+l=s.sub.l. Thus, they will never be satisfied if we check for 2-error failures before 3-error failures. If (19) is violated, we are certain that the syndrome vector is inconsistent with 2 parity, 1 data error with parity positions j=1, l=2, and try other rows. If all row constraints fail, we look for other types of errors width produce a match. If the data error in a 3-error failure is an erasure, ρ is known. In the exemplary steps of correcting errors with j=1, l=2, the value x is also known, e.g. x=s.sub.3/ρ.sup.2. We consider the first 2 equations of (16):
(81)
Thus, y and z are easily found, and the solution is:
(82)
Triple errors involving parity only are corrected by noting that the syndrome vector s has 3 non-zero and 2 zero entries, and the 3 non-zero entries are at the error positions. The error values are equal to the syndromes at the same positions.
(83) The drawing in
(84)
where the first equation is obtained by substituting s.sub.5+s.sub.3 with s.sub.2 using a form of the constraint s.sub.2=s.sub.3+s.sub.5. Since a is known, we have a linear equation for b only after eliminating σ.sub.1 and σ.sub.2:
s.sub.2(u.sub.1+u.sub.2)+s.sub.1 u.sub.1 u.sub.2=s.sub.3
Therefore, (s.sub.2+s.sub.1 u.sub.1)u.sub.2=s.sub.3+s.sub.2 u.sub.1 and formally:
(85)
The solution is non-unique and non-zero (only non-zero data locators are allowed) iff s.sub.2+s.sub.1 u.sub.1=s.sub.3+s.sub.2 u.sub.1=0 which implies that either s.sub.1=s.sub.2=s.sub.3 or
(86)
If s.sub.1=s.sub.2=s.sub.3, the constraint implies that s.sub.5=0. If s.sub.1=0 then s.sub.1=s.sub.2=s.sub.3≤s.sub.5=0 and the error is matched by a single parity error at position j=2 which is more likely and is handled elsewhere, in an earlier step of the method. Hence, we may assume s.sub.1≠0. The equation for σ.sub.1 and σ.sub.2 becomes s.sub.1(σ.sub.2+σ.sub.2)=s.sub.1 in view of s.sub.1=s.sub.2=s.sub.3 and s.sub.1≠0 implies σ.sub.1+σ.sub.2=1, or u.sub.1+u.sub.2+u.sub.1 u.sub.2=1. Hence, u.sub.1(1+u.sub.2)−u.sub.1+1. If u.sub.1=1, u.sub.2 -s arbitrary (non-unique solution); if u.sub.1≠1 then u.sub.2−1. Hence, non-unique solution only exists if we have erasure at position with locator 1. We may assume u.sub.1=1. We have s.sub.5−0. Hence u.sub.1(u.sub.1+1)=0 and u.sub.2(u.sub.2+1)y=s.sub.5=0, where y is the error value for error locator u.sub.2. As u.sub.2(u.sub.2+1)≠0, we have y=0. In particular, the error has only 1 failed data and 1 failed parity, and was considered elsewhere as a 2-error failure and was considered elsewhere. This ends the sequence of exemplary steps for correcting 3 errors, wherein 2 of the errors are known erasures, with some portions of analogous steps omitted, as they will be apparent to those skilled in the art.
(87) The drawings in
(88) The steps in
(89)
The fraction of such quintuples consisting of 5 data symbols is:
(90)
For example, when N=20, the probability of uncorrectable quintuple of erasures is 1/19≈5% plus 1001/5168≈19%. i.e. approximately ¼ of quintuple errors are not correctable. However, with N large the fraction of uncorrectable quintuple errors approaches 100%.
(91) The drawings in
(92)
One necessary condition for system (22) to be consistent is s.sub.2+s.sub.3=s.sub.5, as the last equation is dependent. Another necessary condition is that the determinant:
(93)
Those skilled in the art swill check that this determinant equals
(94)
where σ.sub.1=u.sub.1+u.sub.2+u.sub.3, σ.sub.2=u.sub.1 u.sub.2+u.sub.1 u.sub.3+u.sub.2 u .sub.3 and σ.sub.3=u.sub.1 u.sub.2 u.sub.3 are the elementary symmetric polynomials. Therefore, the consistency conditions for J=∅ and r=3 in
(95)
When u.sub.1, u.sub.2 and u.sub.3 are unknown, we typically have more than one solution to (22), thus in
(96) Supplementary embodiments of the present invention feature a method for reconstituting data lost via faulty strips in the received vector by calculating said lost data from non-faulty strips comprising the associated stripe. Bach stripe may contain Z+E faulty strips where Z is the number of faulty strips at known locations and E is the number of faulty strips at unknown locations, wherein Z and E are any whole, non-negative numbers satisfying the inequality Z+2×E≤4. Further details of the data recovery method arc described in the appendix section of U.S. Provisional Patent Application No 66/449,920 filed on Jan. 24, 2017, which is/are incorporated here in their entirety by reference. Additional further details of this data recovery method fire featured in the appended document: (Efficient Error Correcting Codes for Dual-Disk Corruption, Moussa and Rychlik 2018).
(97) It will thus be seen that the objects set forth above, among those made apparent from the preceding description, are efficiently attained and, because certain changes may be made in carrying out the above method and in the construction(s) set forth without departing from the spirit and scope of the invention, it is intended that all matter contained in the above description and shown in the accompanying drawings shall be interpreted as illustrative and not in a limiting sense.
(98) It is also to be understood that the following claims are intended to cover fill of the generic and specific features of the invention herein described and all statements of the scope of the invention which, as a matter of language, might be said to fall therebetween.
(99) Various modifications of the invention, in addition to those described herein, will be apparent to those skilled in the art from the foregoing description. Such modifications are also intended to fall within the scope of the appended claims. Each reference cited in the present application is incorporated herein by reference in its entirety.
(100) Although there has been shown and described the preferred embodiment of the present invention, it will be readily apparent to those skilled in the art that modifications may be made thereto which do not exceed the scope of the appended claims. Therefore, the scope of the invention is only to be limited by the following claims. Reference numbers recited in the claims are exemplary and for ease of review by the patent office only, and are not limiting in any way. In some embodiments, the figures presented in this patent application are drawn to scale, including the angles, ratios of dimensions, etc. In some embodiments, the figures are representative only and the claims are not limited by the dimensions of the figures. In some embodiments, descriptions of the inventions described herein using the phrase “comprising” includes embodiments that could be described as “consisting of”, and as such the written description requirement for claiming one or more embodiments of the present invention using the phrase “consisting of” is met.
(101) The reference numbers recited in the below claims are solely for ease of examination of this patent application, and are exemplary, and are not intended in any way to limit the scope of the claims to the particular features having the corresponding reference numbers in the drawings.
REFERENCES
(102) Anderson, M. H. and S. Mann (2014). Accelerated erasure coding system and method. U.S. Pat. No. 8,683,296. URL: https://wvw.google.com/patents/US8683296. Anvin, Peter H. (2009). The Mathematics of RAID-6. URL: https://www.kernel.org/pub/linux/kernel/people/hpa/raid6.pdf. Bairavasundaram, Lakshmi N. et al. (2008). “An Analysis of Data Corruption in the Storage Stack”. In: Trans. Storage 4.3, 8:1-8:28. ISSN: 1553-3077. DOI: 10.1145/1416944.1416947. URL: http://doi.acm.org/10.1145/1416944.1416947. Grigoriev, D. (2013). “Polynomial Complexity of Solving Systems of Few Algebraic Equations with Small Degrees”. In: LECTURE NOTES IN COMPUTER SCIENCE 1.8136, 136-139. URL: http://www.ingentaconnect.com/content/s8am/03029743/2013/00000001/00003136/art00011. Leventhal, Adam (2009). “Triple-Parity RAID and Beyond”. In: Queue 7.11.30:30-30:39. ISSN: 1542-7730. DOI: 10.1145/1661785.1670144. URL: http://doi.acm.org/10.1145/1661785.1670144. Mann, Sarah Edge (2013). The Original View of Reed-Solomon Coding and the Welch-Berlekamp Decoding Algorithm. URL: http://hdl.handle.net/10150/301533. Moon, Todd K. (2005). “Linear Block Codes”. In: Error Correction Coding. John Wiley & Sons, Inc., 83-112. ISBN: 9780471739210. DOI: 10.1002/0471739219. ch3. URL: http://dx.doi.org/10.1002/0471739219.ch3. Moussa, Mohamad and Marek Rychlik (2018). Efficient Error Correcting Codes for Dual-Disk Corruption. Submitted to USPTO as a document accompanying the non-provisional utility patent on Jan. 19, 2018: extended and updated version of the paper submitted on Jan. 24, 2017 with the provisional patent application. Plank, James S. (1997). “A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems”. In: Software—Practice & Experience 27.9, 995-1012. Plank, James S. and Y. Ding (2005). “Note: Correction to the 1997 Tutorial on Reed-Solomon Coding”. In: Software—Practice & Experience 35.2, 189-194. Rozier, Eric W. D. et al. (2009). “Evaluating the impact of Undetected Disk Errors in RAID systems”. English. In: 83-92. ISBN: 9781424444229; 1424444225; Schönhage, Arnold and Volker Strassen (1971). “Schnelle Multiplikation groβer Zahlen.” In: Computing 7.3-4, 281 292. URL: http://dblp.uni-trier.de/db/journals/computing/computing7.html#SchonhageS71.