From: David Brown <david@westcontrol.com>
To: Piergiorgio Sartor <piergiorgio.sartor@nexgo.de>
Cc: linux-raid@vger.kernel.org
Subject: Re: Is this enough for us to have triple-parity RAID?
Date: Tue, 17 Apr 2012 22:18:55 +0200 [thread overview]
Message-ID: <4F8DD02F.1060504@westcontrol.com> (raw)
In-Reply-To: <20120417171609.GA2859@lazy.lzy>
On 17/04/12 19:16, Piergiorgio Sartor wrote:
> Hi David,
>
>> My current state is that I've got theory worked out and written up -
>> not just for triple parity, but for more parities as well. For some
>> of it, I've got Python code to test and verify the maths. It turns
>> out that triple parity can work well - but for quad parity the limit
>> is 21 data disks (using generators 2, 4, and 8), or up to 33 (using
>> for example 0x07, 0x35 and 0x8b as generators). Realistically, I
>> think triple parity is the limit for practical implementations.
>
> Why is that? An RS code (255,251) should be possible, like
> it is a (255,223). What's the limitation?
> I'm sure there is even a "RAID-96", which is (96,64).
>
> My wild guess would be that the generators must be chosen
> in some way.
>
> Have you had a look at the "par2" code? That seems to be
> capable of doing a parametric RS, even if in 16bit words.
>
> bye,
>
It is certainly possible to make raid systems using as many disks as you
want, and as many parities as you want. The trick is to do so in an
efficient manner.
The way raid6 is implemented is using simple polynomials over the Galois
field G(2⁸):
Py = g_y^0 . D0 + g_y^1 . D1 + g_y^2 . D2 + ... + g_y^n . Dn
For raid5, you have one parity generators, and g0 is 1 (i.e., a simple
xor). For raid6, you have two parity - 1 and 2. For triple parity, we
would use g0 = 1, g1 = 2 and g2 = 4. The whole thing is therefore
simple (or relatively simple!) to implement, and should run fast -
calculating the third parity will only be slightly slower than
calculating the second parity in raid6 is today, and recovery will be as
fast as raid6 unless you need to recover from 3 data disk failures.
For quad parity, we can try g3 = 8 as the obvious next choice in the
pattern. Unfortunately, we start hitting conflicts. To recover missing
data, we have to solve multiple simultaneous equations over G(2⁸), whose
coefficients depend on the index numbers of the missing disks. With
parity generators (1, 2, 4, 8), some of these combinations of missing
disk indexes lead to insoluble equations when you have more that 21 disks.
I didn't find any neat way to prove this, or prove that all combinations
of missing disks for parity generators (1, 2, 4) work out okay. I wrote
some brute-force checking code, and let my computer do the hard work.
There are other ways to make a raid system with quad parity or more.
The parities don't have to be calculated in such a neat form as above -
perhaps even something as simple as re-ordering the powers of the parity
generators would help. We could use a different operation rather than
the "G(2⁸) multiply". We could use different sized Galois fields. Or
we could try something completely different, such as RS codes.
Somewhere there we would get quad parity and more - for as many disks as
we like.
However, I would be surprised if there were another method that had the
practicality of implementation that we get with this system. There are
/huge/ benefits in having the triple-parity raid being the same as raid6
but with an extra parity, and being able to generate it in the same way.
If quad parity is something that appeals to anyone, then it could be
implemented at the same time - and 21 data disks (25 disks total) would
be the limit. Even though the same equations with different generators
can give up to 33 data disks, I expect that compatibility with raid6 and
triple-parity would outweigh the benefits of supporting more disks.
After all, a 25 disk array is already pretty big for a single array.
mvh.,
David
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-04-17 20:18 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-17 6:11 Is this enough for us to have triple-parity RAID? Alex
2012-04-17 7:58 ` David Brown
2012-04-17 16:37 ` Stefan /*St0fF*/ Hübner
2012-04-18 14:15 ` Alex
2012-04-18 14:11 ` David Brown
2012-04-17 17:16 ` Piergiorgio Sartor
2012-04-17 20:18 ` David Brown [this message]
2012-04-17 20:54 ` Piergiorgio Sartor
2012-04-18 18:22 ` Piergiorgio Sartor
2012-04-18 20:20 ` David Brown
2012-04-18 20:39 ` Piergiorgio Sartor
2012-04-19 18:16 ` H. Peter Anvin
2012-04-20 2:27 ` Alex
2012-04-20 3:00 ` H. Peter Anvin
2012-04-20 3:32 ` Alex
2012-04-20 18:58 ` David Brown
2012-04-20 19:39 ` H. Peter Anvin
2012-04-20 21:04 ` Piergiorgio Sartor
2012-04-20 21:01 ` Piergiorgio Sartor
2012-04-20 21:29 ` Peter Grandi
2012-04-20 22:31 ` Piergiorgio Sartor
2012-04-21 9:51 ` Peter Grandi
2012-04-21 11:18 ` Piergiorgio Sartor
2012-04-22 3:14 ` Alex
2012-04-22 8:57 ` Piergiorgio Sartor
2012-04-20 7:45 ` Stan Hoeppner
2012-04-23 15:26 ` Alex
2012-04-25 1:20 ` Stan Hoeppner
2012-04-25 2:45 ` Alex
2012-04-25 16:59 ` Emmanuel Noobadmin
2012-04-25 19:29 ` David Brown
2012-04-26 2:30 ` Alex
2012-04-27 15:15 ` Emmanuel Noobadmin
2012-05-01 16:38 ` Alex
2012-04-26 4:24 ` Alex
-- strict thread matches above, loose matches on Subject: below --
2012-04-16 12:55 Alex
2012-04-16 10:04 Alex
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F8DD02F.1060504@westcontrol.com \
--to=david@westcontrol.com \
--cc=linux-raid@vger.kernel.org \
--cc=piergiorgio.sartor@nexgo.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.