OSDN Git Service

md/raid6: fix algorithm choice under larger PAGE_SIZE
authorZhengyuan Liu <liuzhengyuan@kylinos.cn>
Fri, 20 Dec 2019 02:21:28 +0000 (10:21 +0800)
committerSong Liu <songliubraving@fb.com>
Mon, 13 Jan 2020 19:44:09 +0000 (11:44 -0800)
commitf591df3cc6d60cadf8ceff5d44af73ea6ba0a39a
treeada457cd4702edff2fb46542299ff13eed508379
parent5e5ac01c2b8802921fee680518a986011cb59820
md/raid6: fix algorithm choice under larger PAGE_SIZE

There are several algorithms available for raid6 to generate xor and syndrome
parity, including basic int1, int2 ... int32 and SIMD optimized implementation
like sse and neon.  To test and choose the best algorithms at the initial
stage, we need provide enough disk data to feed the algorithms. However, the
disk number we provided depends on page size and gfmul table, seeing bellow:

    const int disks = (65536/PAGE_SIZE) + 2;

So when come to 64K PAGE_SIZE, there is only one data disk plus 2 parity disk,
as a result the chosed algorithm is not reliable. For example, on my arm64
machine with 64K page enabled, it will choose intx32 as the best one, although
the NEON implementation is better.

This patch tries to fix the problem by defining a constant raid6 disk number to
supporting arbitrary page size.

Suggested-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Zhengyuan Liu <liuzhengyuan@kylinos.cn>
Signed-off-by: Song Liu <songliubraving@fb.com>
include/linux/raid/pq.h
lib/raid6/algos.c