mirror_zfs/module/zcommon
Gvozden Neskovic 37f520db2d Fletcher4: Incremental using SIMD
Combine incrementally computed fletcher4 checksums. Checksums are combined
a posteriori, allowing for parallel computation on chunks to be implemented if
required. The algorithm is general, and does not add changes in each SIMD
implementation.
New test in ztest verifies incremental fletcher computations.

Checksum combining matrix for two buffers `a` and `b`, where `Ca` and `Cb` are
respective fletcher4 checksums, `Cab` is combined checksum, `s` is size of buffer
`b` (divided by sizeof(uint32_t)) is:

Cab[A] = Cb[A] + Ca[A]
Cab[B] = Cb[B] + Ca[B] + s * Ca[A]
Cab[C] = Cb[C] + Ca[C] + s * Ca[B] + s(s+1)/2 * Ca[A]
Cab[D] = Cb[D] + Ca[D] + s * Ca[C] + s(s+1)/2 * Ca[B] + s(s+1)(s+2)/6 * Ca[A]

NOTE: this calculation overflows for larger buffers. Thus, internally, the calculation
is performed on 8MiB chunks.

Signed-off-by: Gvozden Neskovic <neskovic@gmail.com>
2016-10-05 16:41:46 +02:00
..
Makefile.in Fletcher4 implementation using avx512f instruction set 2016-08-16 14:11:14 -07:00
zfs_comutil.c Illumos #2882, #2883, #2900 2013-09-04 15:49:00 -07:00
zfs_deleg.c Change ASSERT(!"...") to cmn_err(CE_PANIC, ...) 2015-03-03 13:22:21 -08:00
zfs_fletcher_avx512.c Rework of fletcher_4 module 2016-08-16 14:11:55 -07:00
zfs_fletcher_intel.c Rework of fletcher_4 module 2016-08-16 14:11:55 -07:00
zfs_fletcher_sse.c Rework of fletcher_4 module 2016-08-16 14:11:55 -07:00
zfs_fletcher.c Fletcher4: Incremental using SIMD 2016-10-05 16:41:46 +02:00
zfs_namecheck.c OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
zfs_prop.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
zfs_uio.c Fix uio_prefaultpages for 0 length iovec 2015-12-15 16:19:55 -08:00
zpool_prop.c Implement large_dnode pool feature 2016-06-24 13:13:21 -07:00
zprop_common.c Change KM_PUSHPAGE -> KM_SLEEP 2015-01-16 14:41:26 -08:00