mirror_zfs/module/zfs
Alexander Motin 1c0c729ab4
Several sorted scrub optimizations
- Reduce size and comparison complexity of q_exts_by_size B-tree.
Previous code used two 64-bit divisions and many other operations to
compare two B-tree elements.  It created enormous overhead.  This
implementation moves the math to the upper level and stores the score
in the B-tree elements themselves.  Since all that we need to store in
that B-tree is the extent score and offset, those can fit into single
8 byte value instead of 24 bytes of q_exts_by_addr element and can be
compared with single operation.
 - Better decouple secondary tree logic from main range_tree by moving
rt_btree_ops and related functions into dsl_scan.c as ext_size_ops.
Those functions are very small to worry about the code duplication and
range_tree does not need to know details such as rt_btree_compare.
 - Instead of accounting number of pending bytes per pool, that needs
atomic on global variable per block, account the number of non-empty
per-vdev queues, that change much more rarely.
 - When extent scan is interrupted by TXG end, continue it in the next
TXG instead of selecting next best extent.  It allows to avoid leaving
one truncated (and so likely not the best any more) extent each TXG.

On top of some other optimizations this saves about 1.5 minutes out of
10 to scrub pool of 12 SSDs, storing 1.5TB of 4KB zvol blocks.

Reviewed-by: Paul Dagnelie <pcd@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tom Caputi <caputit1@tcnj.edu>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored-By: iXsystems, Inc.
Closes #13576
2022-06-24 09:50:37 -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 Corrected edge case in uncompressed ARC->L2ARC handling 2022-05-04 11:59:30 -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 Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -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 More speculative prefetcher improvements 2022-05-25 10:12:52 -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 Introduce CPU_SEQID_UNSTABLE 2020-11-02 11:51:12 -08:00
dmu_objset.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_recv.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
dmu_redact.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
dmu_send.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -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 Improve log spacemap load time 2022-04-26 10:44:21 -07:00
dnode_sync.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dnode.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_bookmark.c module: zfs: dsl_bookmark: silence false-positive maybe-uninitialised 2022-03-28 10:03:13 -07:00
dsl_crypt.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_dataset.c Default zfs_max_recordsize to 16M 2022-04-28 15:12:24 -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 Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
dsl_dir.c Fix ENOSPC when unlinking multiple files from full pool 2022-03-08 09:16:35 -08:00
dsl_pool.c Refactor Log Size Limit 2022-05-24 09:46:35 -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 Several sorted scrub optimizations 2022-06-24 09:50:37 -07:00
dsl_synctask.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
dsl_userhold.c Replace sprintf()->snprintf() and strcpy()->strlcpy() 2020-06-07 11:42:12 -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 Improve mg_aliquot math 2022-05-04 11:33:42 -07:00
mmp.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -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 Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
sa.c linux: spl: generic: ddi_strto*: match solaris ddi_strto*(9) 2022-05-13 10:15:47 -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 Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
spa_errlog.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -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 Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
spa_stats.c Expose zpool guids through kstats 2022-05-18 10:25:33 -07:00
spa.c Verify BPs in spa_load_verify_cb() and dsl_scan_visitbp() 2022-05-20 10:36:14 -07:00
space_map.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -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 Scrub mirror children without BPs 2022-06-23 10:36:28 -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 module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
vdev_raidz.c Scrub mirror children without BPs 2022-06-23 10:36:28 -07:00
vdev_rebuild.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev_removal.c Cancel in-progress rebuilds when we finish removal 2022-05-25 09:25:13 -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 Replace ZPROP_INVAL with ZPROP_USERPROP where it means a user property 2022-06-14 11:27:53 -07:00
zap_leaf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zap_micro.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zap.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -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 Clean up CSTYLEDs 2022-01-26 11:38:52 -08: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 Add const to nvlist functions to properly expose their real behavior 2021-12-06 18:19:13 -07:00
zfs_ioctl.c Replace ZPROP_INVAL with ZPROP_USERPROP where it means a user property 2022-06-14 11:27:53 -07:00
zfs_log.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -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 Fix typo in zil_commit() comment block 2022-05-31 15:37:46 -07:00
zio_checksum.c Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
zio_compress.c Tiered early abort, zstd edition 2022-05-24 09:43:22 -07:00
zio_inject.c module: zfs: zio_inject: zio_match_handler: don't << -1 2022-03-13 13:18:17 -07:00
zio.c Verify BPs in spa_load_verify_cb() and dsl_scan_visitbp() 2022-05-20 10:36:14 -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