HomeFreeBSD

ZFS send should use spill block prefetched from send_reader_thread

Description

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

Details

Provenance
Chunwei Chen <tuxoko@gmail.com>Authored on Wed, Nov 6, 7:52 PM
GitHub <noreply@github.com>Committed on Wed, Nov 6, 7:52 PM
Parents
rG7b6e9675daef: Use simple folio migration function
Branches
Unknown
Tags
Unknown