Improve speculative prefetcher for block cloning
commita01504b35c77053e180d557677c4a84218897754
authorAlexander Motin <mav@FreeBSD.org>
Wed, 4 Dec 2024 23:19:05 +0000 (4 18:19 -0500)
committerGitHub <noreply@github.com>
Wed, 4 Dec 2024 23:19:05 +0000 (4 15:19 -0800)
tree6ae9c0172bc5d80604c54d3c06bc473147b08b5f
parentc33a55b0c201dce9457bc6632f68fc87a903a6af
Improve speculative prefetcher for block cloning

- Issue prescient prefetches for demand indirect blocks after the
first one.  It should be quite rare for reads/writes, but much more
useful for cloning due to much bigger (up to 1022 blocks) accesses.
It covers the gap during the first couple accesses when we can not
speculate yet, but we know what is needed right now.  It reduces
dbuf_hold() sync read delays in dmu_buf_hold_array_by_dnode().
 - Increase maximum prefetch distance for indirect blocks from 64
to 128MB.  It should cover the maximum 1022 blocks of block cloning
access size in case of default 128KB recordsize used.  In case of
bigger recordsize the above prescient prefetch should also help.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #16814
module/zfs/dmu_zfetch.c