mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
59493b63c1
When processing abds, we execute 1 `kfpu_begin()`/`kfpu_end()` pair on every page in the abd. This is wasteful and slows down checksum performance versus what the benchmark claimed. We correct this by moving those calls to the init and fini functions. Also, we always check the buffer length against 0 before calling the non-scalar checksum functions. This means that we do not need to execute the loop condition for the first loop iteration. That allows us to micro-optimize the checksum calculations by switching to do-while loops. Note that we do not apply that micro-optimization to the scalar implementation because there is no check in `fletcher_4_incremental_native()`/`fletcher_4_incremental_byteswap()` against 0 sized buffers being passed. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #14247 |
||
---|---|---|
.. | ||
cityhash.c | ||
zfeature_common.c | ||
zfs_comutil.c | ||
zfs_deleg.c | ||
zfs_fletcher_aarch64_neon.c | ||
zfs_fletcher_avx512.c | ||
zfs_fletcher_intel.c | ||
zfs_fletcher_sse.c | ||
zfs_fletcher_superscalar4.c | ||
zfs_fletcher_superscalar.c | ||
zfs_fletcher.c | ||
zfs_namecheck.c | ||
zfs_prop.c | ||
zpool_prop.c | ||
zprop_common.c |