mirror_zfs/module/zfs
Alexander Motin 74230a5bc1
Avoid memory copy when verifying raidz/draid parity
Before this change for every valid parity column raidz_parity_verify()
allocated new buffer and copied there existing data, then recalculated
the parity and compared the result with the copy.  This patch removes
the memory copy, simply swapping original buffer pointers with newly
allocated empty ones for parity recalculation and comparison. Original
buffers with potentially incorrect parity data are then just freed,
while new recalculated ones are used for repair.

On a pool of 12 4-wide raidz vdevs, storing 1.5TB of 16MB blocks, this
change reduces memory traffic during scrub by 17% and total unhalted
CPU time by 25%.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored-By: iXsystems, Inc.
Closes #13613
2022-07-05 16:27:29 -07:00
..
abd.c Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
aggsum.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
arc.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
blake3_zfs.c Fix memory allocation issue for BLAKE3 context 2022-06-21 14:32:09 -07:00
blkptr.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
bplist.c Fast Clone Deletion 2019-07-26 10:54:14 -07:00
bpobj.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
bptree.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
bqueue.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
btree.c Several B-tree optimizations 2022-06-24 13:55:58 -07:00
dataset_kstats.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dbuf_stats.c Reduce dbuf_find() lock contention 2022-05-04 11:17:29 -07:00
dbuf.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
ddt_zap.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
ddt.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_diff.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
dmu_object.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dmu_objset.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dmu_recv.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dmu_redact.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dmu_send.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dmu_traverse.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_tx.c Refactor Log Size Limit 2022-05-24 09:46:35 -07:00
dmu_zfetch.c More speculative prefetcher improvements 2022-05-25 10:12:52 -07:00
dmu.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dnode_sync.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dnode.c Fix dnode byteswapping 2022-06-29 17:06:16 -07:00
dsl_bookmark.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_crypt.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_dataset.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dsl_deadlist.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_deleg.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
dsl_destroy.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_dir.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_pool.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
dsl_prop.c Replace ZPROP_INVAL with ZPROP_USERPROP where it means a user property 2022-06-14 11:27:53 -07:00
dsl_scan.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_synctask.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
dsl_userhold.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
edonr_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
fm.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
gzip.c Forbid b{copy,zero,cmp}(). Don't include <strings.h> for <string.h> 2022-03-15 15:13:48 -07:00
hkdf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
lz4_zfs.c Updated the lz4 decompressor 2022-01-07 10:36:49 -08:00
lz4.c lz4: Cherrypick fix for CVE-2021-3520 2022-01-12 16:14:36 -08:00
lzjb.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
metaslab.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
mmp.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
multilist.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
objlist.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
pathname.c Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
range_tree.c Several sorted scrub optimizations 2022-06-24 09:50:37 -07:00
refcount.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
rrwlock.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
sa.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
sha256.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
skein_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_boot.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_checkpoint.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_config.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
spa_errlog.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
spa_history.c module: mark arguments used 2022-02-18 09:34:03 -08:00
spa_log_spacemap.c Remove wrong assertion in log spacemap 2022-06-01 09:54:35 -07:00
spa_misc.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
spa_stats.c Expose zpool guids through kstats 2022-05-18 10:25:33 -07:00
spa.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
space_map.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
space_reftree.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
THIRDPARTYLICENSE.cityhash OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
THIRDPARTYLICENSE.cityhash.descrip OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
txg.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
uberblock.c MMP interval and fail_intervals in uberblock 2019-03-21 12:47:57 -07:00
unique.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
vdev_cache.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
vdev_draid_rand.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_draid.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect_births.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect_mapping.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_initialize.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev_label.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_mirror.c Avoid memory copies during mirror scrub 2022-07-05 16:26:20 -07:00
vdev_missing.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
vdev_queue.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
vdev_raidz_math_aarch64_neon_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_aarch64_neon.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_aarch64_neonx2.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_avx2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_avx512bw.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math_avx512f.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_impl.h Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_raidz_math_powerpc_altivec_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_powerpc_altivec.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
vdev_raidz_math_scalar.c Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
vdev_raidz_math_sse2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_ssse3.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
vdev_raidz.c Avoid memory copy when verifying raidz/draid parity 2022-07-05 16:27:29 -07:00
vdev_rebuild.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
vdev_removal.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
vdev_root.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_trim.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zap_leaf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zap_micro.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zap.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zcp_get.c Correct compilation errors reported by GCC 10/11 2022-02-20 19:20:00 -08:00
zcp_global.c OpenZFS 8600 - ZFS channel programs - snapshot 2018-02-08 15:29:24 -08:00
zcp_iter.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
zcp_set.c Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zcp_synctask.c Replace ZPROP_INVAL with ZPROP_USERPROP where it means a user property 2022-06-14 11:27:53 -07:00
zcp.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zfeature.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
zfs_byteswap.c module: mark arguments used 2022-02-18 09:34:03 -08:00
zfs_chksum.c Fix memory allocation issue for BLAKE3 context 2022-06-21 14:32:09 -07:00
zfs_fm.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_fuid.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
zfs_ioctl.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zfs_log.c Fix -Wattribute-warning in zfs_log_xvattr() 2022-06-27 14:18:57 -07:00
zfs_onexit.c file reference counts can get corrupted 2021-07-10 19:00:37 -06:00
zfs_quota.c File incorrectly zeroed when receiving incremental stream that toggles -L 2020-06-09 10:41:01 -07:00
zfs_ratelimit.c Change checksum & IO delay ratelimit values 2018-03-04 17:34:51 -08:00
zfs_replay.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_rlock.c Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
zfs_sa.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_vnops.c Speed up WB_SYNC_NONE when a WB_SYNC_ALL occurs simultaneously 2022-05-03 13:23:26 -07:00
zil.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
zio_checksum.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
zio_compress.c Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
zio_inject.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zio.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zle.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zrlock.c Remove dead code 2020-06-18 12:21:18 -07:00
zthr.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
zvol.c Add missing replay entry in zvol_replay_vector for TX_SETSAXATTR 2022-05-02 11:01:26 -07:00