• Qu Wenruo's avatar
    btrfs: scrub: avoid unnecessary csum tree search preparing stripes · 3c771c19
    Qu Wenruo authored
    One of the bottleneck of the new scrub code is the extra csum tree
    search.
    
    The old code would only do the csum tree search for each scrub bio,
    which can be as large as 512KiB, thus they can afford to allocate a new
    path each time.
    
    But the new scrub code is doing csum tree search for each stripe, which
    is only 64KiB, this means we'd better re-use the same csum path during
    each search.
    
    This patch would introduce a per-sctx path for csum tree search, as we
    don't need to re-allocate the path every time we need to do a csum tree
    search.
    
    With this change we can further improve the queue depth and improve the
    scrub read performance:
    
    Before (with regression and cached extent tree path):
    
     Device         r/s      rkB/s   rrqm/s  %rrqm r_await rareq-sz aqu-sz  %util
     nvme0n1p3 15875.00 1013328.00    12.00   0.08    0.08    63.83   1.35 100.00
    
    After (with both cached extent/csum tree path):
    
     nvme0n1p3 17759.00 1133280.00    10.00   0.06    0.08    63.81   1.50 100.00
    
    Fixes: e02ee89b ("btrfs: scrub: switch scrub_simple_mirror() to scrub_stripe infrastructure")
    CC: stable@vger.kernel.org # 6.4+
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3c771c19
raid56.c 73.8 KB