ZFS send should use spill block prefetched from send_reader_thread
commit5945676bcc5d8b45554c93ea08a0d1f654c7075e
authorChunwei Chen <tuxoko@gmail.com>
Wed, 6 Nov 2024 19:52:01 +0000 (6 11:52 -0800)
committerGitHub <noreply@github.com>
Wed, 6 Nov 2024 19:52:01 +0000 (6 11:52 -0800)
tree6631f47851ff5e81aed233a6577a088e0d32bda1
parent7b6e9675daefcc94393293c46e4672e66490757d
ZFS send should use spill block prefetched from send_reader_thread

Currently, even though send_reader_thread prefetches spill block,
do_dump() will not use it and issues its own blocking arc_read. This
causes significant performance degradation when sending datasets with
lots of spill blocks.

For unmodified spill blocks, we also create send_range struct for them
in send_reader_thread and issue prefetches for them. We piggyback them
on the dnode send_range instead of enqueueing them so we don't break
send_range_after check.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Chunwei Chen <david.chen@nutanix.com>
Co-authored-by: david.chen <david.chen@nutanix.com>
Closes #16701
module/zfs/dmu_send.c