Re: [PATCH 06/13] async_tx: add support for asynchronous GF multiplication
From: Ilya Yanok <hidden>
Date: 2009-03-21 20:05:28
Also in:
lkml
From: Ilya Yanok <hidden>
Date: 2009-03-21 20:05:28
Also in:
lkml
Hi H.Peter, H. Peter Anvin wrote:
quoted
+ * @scfs: array of source coefficients used in GF-multiplicationArray of source coefficients? Are you doing a vector-vector multiplication here? Given this code:quoted
for (d = 0; d < len; d++) { + wq = wp = ptrs[0][d]; + for (z = 1; z < src_cnt; z++) { + wd = ptrs[z][d]; + wp ^= wd; + wq ^= raid6_gfmul[scfs[z]][wd]; + }... it kinds of looks like that. This is really quite expensive! The whole point of the restore code that exists is that we never do a two-dimensional lookup, instead caching a pointer to the multiplication table that we intend to use, because the RAID-6 code only ever contains scalar-vector multiplications. I really don't get this, and I think it's broken.
Well, that code IS broken. Dan, I think you over-optimized this part. Have you ever tested this code path? Besides of doing two-dimensional lookup at every step it ignores scfs[0] completely so if it's not equal to one the result is wrong. Regards, Ilya.