From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v2 0/5] btrfs: scrub: improve the scrub performance
Date: Thu, 3 Aug 2023 14:33:28 +0800 [thread overview]
Message-ID: <cover.1691044274.git.wqu@suse.com> (raw)
[REPO]
https://github.com/adam900710/linux/tree/scrub_testing
[CHANGELOG]
v2:
- Fix a double accounting error in the last patch
scrub_stripe_report_errors() is called twice, thus doubling the
accounting.
v1:
- Rebased to latest misc-next
- Rework the read IO grouping patch
David has found some crashes mostly related to scrub performance
fixes, meanwhile the original grouping patch has one extra flag,
SCRUB_FLAG_READ_SUBMITTED, to avoid double submitting.
But this flag can be avoided as we can easily avoid double submitting
just by properly checking the sctx->nr_stripe variable.
This reworked grouping read IO patch should be safer compared to the
initial version, with better code structure.
Unfortunately, the final performance is worse than the initial version
(2.2GiB/s vs 2.5GiB/s), but it should be less racy thus safer.
- Re-order the patches
The first 3 patches are the main fixes, and I put safer patches first,
so even if David still found crash at certain patch, the remaining can
be dropped if needed.
There is a huge scrub performance drop introduced by v6.4 kernel, that
the scrub performance is only around 1/3 for large data extents.
There are several causes:
- Missing blk plug
This means read requests won't be merged by block layer, this can
hugely reduce the read performance.
- Extra time spent on extent/csum tree search
This including extra path allocation/freeing and tree searchs.
This is especially obvious for large data extents, as previously we
only do one csum search per 512K, but now we do one csum search per
64K, an 8 times increase in csum tree search.
- Less concurrency
Mostly due to the fact that we're doing submit-and-wait, thus much
lower queue depth, affecting things like NVME which benefits a lot
from high concurrency.
The first 3 patches would greately improve the scrub read performance,
but unfortunately it's still not as fast as the pre-6.4 kernels.
(2.2GiB/s vs 3.0GiB/s), but still much better than 6.4 kernels (2.2GiB
vs 1.0GiB/s).
Qu Wenruo (5):
btrfs: scrub: avoid unnecessary extent tree search preparing stripes
btrfs: scrub: avoid unnecessary csum tree search preparing stripes
btrfs: scrub: fix grouping of read IO
btrfs: scrub: don't go ordered workqueue for dev-replace
btrfs: scrub: move write back of repaired sectors into
scrub_stripe_read_repair_worker()
fs/btrfs/file-item.c | 33 +++---
fs/btrfs/file-item.h | 6 +-
fs/btrfs/raid56.c | 4 +-
fs/btrfs/scrub.c | 235 ++++++++++++++++++++++++++-----------------
4 files changed, 169 insertions(+), 109 deletions(-)
--
2.41.0
next reply other threads:[~2023-08-03 6:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-03 6:33 Qu Wenruo [this message]
2023-08-03 6:33 ` [PATCH v2 1/5] btrfs: scrub: avoid unnecessary extent tree search preparing stripes Qu Wenruo
2023-08-03 6:33 ` [PATCH v2 2/5] btrfs: scrub: avoid unnecessary csum " Qu Wenruo
2023-08-03 6:33 ` [PATCH v2 3/5] btrfs: scrub: fix grouping of read IO Qu Wenruo
2023-08-03 6:33 ` [PATCH v2 4/5] btrfs: scrub: don't go ordered workqueue for dev-replace Qu Wenruo
2023-08-03 6:33 ` [PATCH v2 5/5] btrfs: scrub: move write back of repaired sectors into scrub_stripe_read_repair_worker() Qu Wenruo
2023-08-10 18:09 ` [PATCH v2 0/5] btrfs: scrub: improve the scrub performance David Sterba
2023-08-15 20:52 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1691044274.git.wqu@suse.com \
--to=wqu@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox