Commit graph

170 commits

Author SHA1 Message Date
Andrea Mazzoleni
d3e67b2fdf Extract common recovery function setup 2026-08-24 17:39:29 +02:00
Andrea Mazzoleni
e74b03a062 Remove unused argument from recovery functions 2026-08-24 17:39:29 +02:00
Andrea Mazzoleni
46ebce4e3c Add specialized P+Q REC2OF2 recovery to all SIMD backends 2026-08-24 17:39:29 +02:00
Andrea Mazzoleni
d4184b9aee Harden public RAID API argument validation 2026-08-24 17:39:29 +02:00
Andrea Mazzoleni
ae703ce68c Optimize multi-parity recovery with fused syndrome generation 2026-08-24 11:57:04 +02:00
Andrea Mazzoleni
9d842b0dfb Precompute direct Cauchy affine matrices for RAID GFNI generation 2026-08-23 21:57:16 +02:00
Andrea Mazzoleni
0c030c024e Remove horner evaluation for RAID GFNI parity generation 2026-08-23 21:34:41 +02:00
Andrea Mazzoleni
63c81dedf3 Clarify AES GFNI performance expectations and document RAID affine multiplication behavior 2026-08-23 20:29:02 +02:00
Andrea Mazzoleni
a745a05d4e Add raid_test_tail to test recovery of tail disks across all array sizes up to 251 2026-08-21 12:06:40 +02:00
Andrea Mazzoleni
c410b11162 Clarify SIMD register preservation rationale and AVX transition comments 2026-08-21 12:06:26 +02:00
Andrea Mazzoleni
335f2619fd Optimize triple parity generation by preloading multiplication tables in vector registers 2026-08-21 12:06:26 +02:00
Andrea Mazzoleni
8c456ee354 Optimize dual parity generation by preloading multiplication tables in vector registers
Optimize AVX2 and AVX-512 GFNI AES dual parity generation by preloading coefficients in registers
2026-08-21 12:06:26 +02:00
Andrea Mazzoleni
3ff07a8297 Document RAID thread-safety requirements 2026-08-21 12:06:26 +02:00
Andrea Mazzoleni
5c24968e6d Add AArch32 (ARM32) NEON SIMD support for parity generation and recovery 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
e5ca862a37 Correct raid_scan documentation on candidate search and return semantics 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
ecb26a6aee Fix raid_selftest() parity bounds and dispatch in Vandermonde mode 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
4c51acaf29 Add multithreaded Cauchy matrix inversion test invtestx for Linux 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
6fa2c44caf Add rec1of1 and rec2of2 benchmarks for first parity reconstruction 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
7d434954e8 Precalculate shuffle table pointers outside data loop in Cauchy recX 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
ac1797be96 Precompute affine matrix representations outside data loop in AVX2 and AVX-512 GFNI recX 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
4d61b726be Unroll NEON rec2 two-disk recovery to 32-byte chunks using 25 vector registers 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
5b0e1bcd6b Unroll rec1 single-disk recovery to 64-byte chunks in AVX2, SSSE3, and NEON 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
7f6ef3b4cd Eliminate stack buffers, pre-split delta nibbles and and inner loop in recX 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
71ffb94019 Keep deltas in AVX-512 registers and unroll reconstruction with conditional jumps in recX 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
93eadd73f0 Preload multiplication tables and avoid repeated nibble splitting in NEON recovery 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
48d97dae31 Make 64-byte block alignment an explicit requirement in RAID API 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
11bf37d61b Enforce mode parity limits 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
5d2f3c7b16 Avoid strict-aliasing and unaligned write in raid_cpu_info 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
7e2a8eab7d Keep multiplication tables resident and reuse delta nibbles in AVX2 and AVX512BW REC2 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
17591ad932 Add GFNI affine parity generation for RAID polynomial 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
b5d507fbe9 Use primitive generator 3 for AES Cauchy mode 2026-08-21 12:06:25 +02:00
Andrea Mazzoleni
cc91392803 Replace pointer casting with safe memcpy helpers 2026-08-18 23:33:59 +02:00
Andrea Mazzoleni
24a8464fc0 Require AVX512BW in addition to AVX512F for AVX-512 GFNI detection 2026-08-18 23:33:59 +02:00
Andrea Mazzoleni
f09091a4e4 Refine RAID buffer displacement rationale 2026-08-18 23:33:57 +02:00
Andrea Mazzoleni
45833e9f1f Refine RAID stride noise documentation 2026-08-18 23:33:57 +02:00
Andrea Mazzoleni
039b5c2c28 Add RAID library developer README 2026-08-18 23:33:57 +02:00
Andrea Mazzoleni
f3c3265116 Document dummy register clobbers in raid_sse_end and raid_neon_end 2026-08-18 23:33:56 +02:00
Andrea Mazzoleni
47b321d97c Support dynamic runtime selection of RAID AES mode 2026-08-18 23:33:56 +02:00
Andrea Mazzoleni
49d5e685c9 Avoid a folding VLA warning in clang 2026-08-18 23:33:55 +02:00
Andrea Mazzoleni
8e2b9c03b5 Use uniform ending on files for parity implementation 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
1a3099d7f5 Fix building on x86 for missing AVX512 support 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
fd2dc7810f Run the speed test with and without displacement 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
2dbb25acbd Allow to specify the wrap size in allocation 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
e43964523f Refactor and reorganize parity generation functions using inline templates 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
22495abe9e Add AArch64 NEON parity generation and recovery functions 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
807f2f6690 Use vpternlogq in raid_gen3-6_avx512bw to fuse sequential vpxorq instructions into single 3-way XORs 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
9e1652673d Gate AVX-512BW gen1/gen2 behind slow_avx512() to avoid double-pumped shuffle penalties 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
76998613da Remove the unused number of data disks from the vector allocation
The same addressing rules are applied to the parity disks because
they are used as data disks during recovery operations.
2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
7a7dacc6db Inject variable page-offset noise to disk buffer displacement to mitigate prefetcher contention 2026-08-18 23:33:54 +02:00
Andrea Mazzoleni
5795b9706e Use the optimal displacement depending on the number of disks 2026-08-18 23:33:53 +02:00