Thread (7 messages) 7 messages, 3 authors, 2014-08-12

Re: RAID6 - RMW logic

From: NeilBrown <hidden>
Date: 2014-07-30 21:30:07

On Wed, 30 Jul 2014 20:24:30 +0000 Markus Stockhausen
[off-list ref] wrote:
Hi,

the last days I tried to understand the RAID6 logic when recalculating
P/Q parity (or syndrome) if only parts of a stripe are updated. As far
as I get the current implementation right it will always read the whole
stripe and build parities from scratch. E.g. updating a single chunk
on a 10 disk RAID6 will read the other 7 data blocks to write the block
plus 2 P/Q parities afterwards. Compared to the best case 3 read plus
3 write operations this can be quite a heavy impact. RAID5 at least
has a shortcut for that.

Being no specialist at all - but having some ideas - I would like to
get some feedback about the following way to improve the scenario.

1) Write a modified gen_syndrome function (call it xor_syndrome)
like in lib/raid6/xxx.c that allows to XOR an existing P/Q parity
without overwriting it. The cost of that function would be the same
as it only changes a few assembler commands.

2) Enhance the ops_run_prexor to call this xor_syndrome function
for an RAID6. Fill the not relevant pages (R5_wantdrain) with an
empty page or NULL. So the gen_syndrome will only find zeroes.
With this call P/Q will have a pre-xored version.

3) Enhance ops_run_reconstruct6 to allow processing of changed
blocks only. We will call xor_snydrome from there too, to XOR
the prexored P/Q once again.

4) Enhance handle_stripe_dirtying so it will allow calculation of
RCW versus RMW costs for the RAID6 case.

Did I miss something? And if not: Will the doubled CPU consumption 
for P/Q calculation justify that way of implementation? At least
we can avoid IOs on slow disks.

Maybe it has been discussed before but I did not find it on the
mailing list.

Thanks in advance.

Markus
Please see
  http://comments.gmane.org/gmane.linux.raid/42559

Yes, this is something we probably want.
The previous effort stalled somehow.  Maybe it just needs someone to start
pushing again.

NeilBrown

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help