-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ZFS send should use spill block prefetched from send_reader_thread #16701
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why tests are showing failure even though the test results seems mostly fine. |
Crashed on assertion:
|
Hmm... Edit: Ok, I think it's because we turn off zfs_send_unmodified_spill_blocks |
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. Signed-off-by: Chunwei Chen <[email protected]>
Updated to prefetch also unmodified spill block in send_reader_thread. |
Motivation and Context
Currently, even though send_reader_thread prefetches spill block, do_dump() will not use it and issues its own blocking arc_read. This may cause 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.
On one of our setup, we see at least 5x difference during affected areas.
Description
How Has This Been Tested?
Manual send/recv on dataset with spill block.
Manual raw send/recv on encrypted dataset with spill block.
Types of changes
Checklist:
Signed-off-by
.