mirror_zfs/module/zfs
Ameer Hamza 3523b5f3f9 L2ARC: Implement even-depth multi-sublist scanning
The introduction of ARC multilists made L2ARC writing quite random,
depending on whether it found something to write in a randomly selected
sublist. This created inconsistent write patterns and poor utilization
of available sublists leading to uneven cache population.

This commit replaces random selection with systematic scanning across
all sublists within each burst. Fair headroom distribution ensures
even-depth traversal across all sublists until the target write size
is reached. Round-robin processing with random starting points eliminates
sequential bias while maintaining predictable write behavior.

The systematic approach provides consistent L2ARC filling patterns
and better utilization of available ARC data across all sublists.

Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ameer Hamza <ahamza@ixsystems.com>
Closes #18093
2026-02-04 10:05:53 -08:00
..
abd.c Preserve LIFO ordering of kmap ops in abd_raidz_gen_iterate() 2025-12-09 09:12:16 -08:00
aggsum.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
arc.c L2ARC: Implement even-depth multi-sublist scanning 2026-02-04 10:05:53 -08:00
blake3_zfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
blkptr.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
bplist.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
bpobj.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
bptree.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
bqueue.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
brt.c Add BRT support to zpool prefetch command 2025-11-10 16:16:22 -08:00
btree.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dataset_kstats.c ZIL: "crash" the ZIL if the pool suspends during fallback 2025-08-08 16:43:26 -07:00
dbuf_stats.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
dbuf.c Lock db_mtx around arc_release() in couple places 2026-01-26 21:32:16 -05:00
ddt_log.c DDT: Move logs searches out of the lock 2025-12-15 09:17:04 -08:00
ddt_stats.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
ddt_zap.c DDT: Fix compressed entry buffer size 2025-12-15 14:52:44 -08:00
ddt.c DDT: Add locking for table ZAP destruction 2026-01-13 15:07:15 -08:00
dmu_diff.c Allow physical rewrite without logical 2025-08-06 10:36:07 -07:00
dmu_direct.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dmu_object.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dmu_objset.c Fix snapshot automount expiry cancellation deadlock 2025-12-01 14:43:42 -08:00
dmu_recv.c When receiving a stream with the large block flag, activate feature 2026-01-07 16:47:12 -08:00
dmu_redact.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
dmu_send.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dmu_traverse.c Allow physical rewrite without logical 2025-08-06 10:36:07 -07:00
dmu_tx.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
dmu_zfetch.c tunables: remove legacy FreeBSD aliases 2025-09-08 10:03:01 -07:00
dmu.c Add BRT support to zpool prefetch command 2025-11-10 16:16:22 -08:00
dnode_sync.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dnode.c Update dnode_next_offset_level to accept blkid instead of offset 2025-11-04 13:12:17 -08:00
dsl_bookmark.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dsl_crypt.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dsl_dataset.c Add snapshots_changed_nsecs dataset property 2026-01-06 09:36:20 -08:00
dsl_deadlist.c Fix missed assertion update in physical rewrite patch 2025-08-13 15:56:25 -04:00
dsl_deleg.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
dsl_destroy.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
dsl_dir.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
dsl_pool.c Prefer VERIFY0P(n) over VERIFY(n == NULL) 2025-08-07 11:41:37 -07:00
dsl_prop.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
dsl_scan.c Use reduced precision for scan times 2025-12-18 10:22:11 -08:00
dsl_synctask.c dmu_tx_assign: make all VERIFY0 calls use DMU_TX_SUSPEND 2025-05-28 10:28:59 -07:00
dsl_userhold.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
edonr_zfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
fm.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
gzip.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
hkdf.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
lz4_zfs.c SPDX: license tags: BSD-2-Clause 2025-03-13 17:56:46 -07:00
lz4.c SPDX: license tags: BSD-2-Clause 2025-03-13 17:56:46 -07:00
lzjb.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
metaslab.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
mmp.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
multilist.c Allow vmem_alloc backed multilists 2025-08-12 13:36:03 -07:00
objlist.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
pathname.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
range_tree.c range_tree: drop duplicate zfs_ prefix from rs_set_fill_raw 2025-09-29 16:38:52 -07:00
refcount.c Implement allocation size ranges and use for gang leaves (#17111) 2025-05-02 15:32:18 -07:00
rrwlock.c Prefer VERIFY0P(n) over VERIFY(n == NULL) 2025-08-07 11:41:37 -07:00
sa.c Lock db_mtx around arc_release() in couple places 2026-01-26 21:32:16 -05:00
sha2_zfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
skein_zfs.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
spa_checkpoint.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
spa_config.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
spa_errlog.c Allow physical rewrite without logical 2025-08-06 10:36:07 -07:00
spa_history.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
spa_log_spacemap.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
spa_misc.c Use reduced precision for scan times 2025-12-18 10:22:11 -08:00
spa_stats.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
spa.c Make sure we can still write data to txg 2026-01-26 21:33:21 -05:00
space_map.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
space_reftree.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -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 txg_wait_synced_flags: add TXG_WAIT_SUSPEND flag to not wait if pool suspended 2025-05-28 10:27:46 -07:00
u8_textprep.c u8_textprep: move into module/zfs 2025-12-22 14:58:36 -08:00
uberblock.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
unique.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_draid_rand.c SPDX: license tags: LicenseRef-OpenZFS-ThirdParty-PublicDomain 2025-03-13 17:57:31 -07:00
vdev_draid.c Detect a slow raidz child during reads 2025-09-10 15:25:03 -07:00
vdev_file.c Enable zhack to work properly with 4k sector size disks 2025-09-10 11:13:55 -07:00
vdev_indirect_births.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
vdev_indirect_mapping.c Pass flags to more DMU write/hold functions 2025-10-29 11:17:51 -07:00
vdev_indirect.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
vdev_initialize.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
vdev_label.c Cleanup ZIO_FLAG_IO_RETRY vs TRYHARD usage 2025-10-30 16:29:48 -07:00
vdev_mirror.c Allow physical rewrite without logical 2025-08-06 10:36:07 -07:00
vdev_missing.c Implement allocation size ranges and use for gang leaves (#17111) 2025-05-02 15:32:18 -07:00
vdev_queue.c tunables: remove legacy FreeBSD aliases 2025-09-08 10:03:01 -07:00
vdev_raidz_math_aarch64_neon_common.h SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_aarch64_neon.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_aarch64_neonx2.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_avx2.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_avx512bw.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_avx512f.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_impl.h SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_powerpc_altivec_common.h SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_powerpc_altivec.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_scalar.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_sse2.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math_ssse3.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
vdev_raidz_math.c tunables: don't assert initialisation in impl getters 2025-05-28 16:50:22 -07:00
vdev_raidz.c RAIDZ: Remove some excessive logging 2025-12-17 14:00:01 -08:00
vdev_rebuild.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
vdev_removal.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
vdev_root.c Implement allocation size ranges and use for gang leaves (#17111) 2025-05-02 15:32:18 -07:00
vdev_trim.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
vdev.c FreeBSD: unbreak compilation on i386 2026-01-14 17:02:41 -08:00
zap_leaf.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zap_micro.c DDT: Add/use zap_lookup_length_uint64_by_dnode() 2025-12-15 14:38:34 -08:00
zap.c DDT: Add/use zap_lookup_length_uint64_by_dnode() 2025-12-15 14:38:34 -08:00
zcp_get.c Add snapshots_changed_nsecs dataset property 2026-01-06 09:36:20 -08:00
zcp_global.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zcp_iter.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zcp_set.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zcp_synctask.c zcp_synctask: add zfs.sync.clone() 2025-06-10 14:53:10 -07:00
zcp.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
zfeature.c Synchronize the update of feature refcount 2025-08-22 16:35:58 -07:00
zfs_byteswap.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_chksum.c chksum: run 256K benchmark on demand, preserve chksum_stat_data 2025-12-01 10:14:52 -08:00
zfs_crrd.c Fix time database update calculations 2025-09-12 16:33:36 -07:00
zfs_debug_common.c nvlist: Add nvlist_snprintf() and zfs_dbgmsg_nvlist() 2025-04-18 09:22:16 -04:00
zfs_fm.c Fix snapshot automount expiry cancellation deadlock 2025-12-01 14:43:42 -08:00
zfs_fuid.c libspl: move SID definitions from zfs_context.h; remove kernel gate 2025-11-12 10:01:48 -08:00
zfs_impl.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_ioctl.c Fix history logging for zpool create -t 2026-01-14 14:51:51 -08:00
zfs_log.c ZIL: pass commit errors back to ITX callbacks 2025-08-08 16:43:20 -07:00
zfs_onexit.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_quota.c Bypass snprintf() in quota checks if no quotas set 2025-12-17 21:59:47 -05:00
zfs_ratelimit.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zfs_replay.c dmu_tx: rename dmu_tx_assign() flags from TXG_* to DMU_TX_* (#17143) 2025-03-18 16:04:22 -07:00
zfs_rlock.c Prefer VERIFY0(n) over VERIFY3U(n, ==, 0) 2025-08-07 11:41:25 -07:00
zfs_sa.c ZIL: allow zil_commit() to fail with error 2025-08-08 16:43:09 -07:00
zfs_vnops.c ZIL: allow zil_commit() to fail with error 2025-08-08 16:43:09 -07:00
zfs_znode.c Add default user/group/project quota properties 2025-04-03 10:35:22 -07:00
zil.c ZIL: Make allocations more flexible 2025-08-14 08:50:17 -07:00
zio_checksum.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
zio_compress.c Removed unused zio_decompress_fail_fraction variable 2025-08-06 17:10:03 -07:00
zio_inject.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00
zio.c DDT: Move logs searches out of the lock 2025-12-15 09:17:04 -08:00
zle.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
zrlock.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
zthr.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
zvol.c spa_misc: add an API for spa_namespace_lock 2025-11-10 14:23:39 -08:00