Refactor dmu_prefetch().
commitfdd97e00934b9a1af7f953333ddf4f7c196907f0
authorAlexander Motin <mav@FreeBSD.org>
Mon, 7 Aug 2023 20:54:41 +0000 (7 16:54 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 19 Apr 2024 17:13:38 +0000 (19 10:13 -0700)
treefb374bdc1e4fac9496e4f814b1b2c1df997a3c84
parent3b8817db9607a875428d1a3bceb015de9709ae65
Refactor dmu_prefetch().

- Split dmu_prefetch_dnode() from dmu_prefetch() into a separate
function.  It is quite inconvenient to read the code where len = 0
means dnode prefetch instead indirect/data prefetch.  One function
doing both has no benefits, since the code paths are independent.
 - Improve dmu_prefetch() handling of long block ranges.  Instead
of limiting L0 data length to prefetch for to dmu_prefetch_max,
make dmu_prefetch_max limit the actual amount of prefetch at the
specified level, and, if there is more, prefetch all the rest at
higher indirection level.  It should improve random access times
within the prefetched range of any length, reducing importance of
specific dmu_prefetch_max value.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #15076
include/sys/dmu.h
module/os/freebsd/zfs/zfs_vnops_os.c
module/os/linux/zfs/zfs_vnops_os.c
module/zfs/dmu.c
module/zfs/dsl_deadlist.c
module/zfs/spa_log_spacemap.c
module/zfs/zvol.c