From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v3 0/7] btrfs: scrub: changes to reduce memory usage for both regular and subpage sectorsize.
Date: Mon, 8 Aug 2022 13:45:36 +0800 [thread overview]
Message-ID: <cover.1659936510.git.wqu@suse.com> (raw)
[Changelog]
v3:
- Move various members from scrub_sector to scrub_block
This reduce memory usage as now those members are per-block instead of
per-sector.
- Enlarge blocksize for data extent scrub
This will greatly benefit from above change.
v2:
- Rebased to latest misc-next
The conflicts are mostly from the member renaming.
Has re-ran the tests on both aarch64 64K page size, and x86_64.
For both scrub and replace groups.
Although btrfs scrub works for subpage from day one, it has a small
pitfall:
Scrub will always allocate a full page for each sector.
This causes increased memory usage, although not a big deal, it's still
not ideal.
The patchset will change the behavior by integrating all pages into
scrub_block::pages[], instead of using scrub_sector::page.
Now scrub_sector will no longer hold a page pointer, but uses its
logical bytenr to caculate which page and page range it should use.
And since we're here, also move several members from scrub_sector to
scrub_block, and further enlarge the blocksize for data extent scrub.
[MEMORY USAGE CHANGE]
For 4K page systems
The memory usage for scrubbing a 16KiB metadata is:
Old: 240 + 4 * 128 = 752
New: 408 + 4 * 96 = 792
Diff: +5.3%
This is a slight memory usage increase due to the extra page pointer
array.
The memory usage for scrubbing a 64KiB data is (the best case):
Old: 16 * (240 + 128) = 5888
New: 480 + 16 * 96 = 1944
Diff: -67.0%
In this case, the reduce in memory usage is awesome, almost cut 2/3 of
the memory.
The memory usage for scrubbing a 4KiB data is (the worst case):
Old 240 + 128 = 368
New: 408 + 96 = 504
Diff: +37.0%
The memory usage for scrubbing a 8KiB data is:
Old: 2 * (240 + 128) = 736
New: 480 + 2 * 96 = 672
Diff: -8.7%
So as long as the extent is larger than 4KiB, the new patchset will use
less memory usage, and the larger extent is, the better.
This is especially good as btrfs by default inline small (<=2K) data
extents, thus we have much higher chance to larger data extents.
[PATCHSET STRUCTURE]
The first 3 patches are just cleanups, mostly to make scrub_sector
allocation much easier.
The 4th patch is to introduce the new page array for sblock, and
the 5th one to completely remove the usage of scrub_sector::page.
The last two are optimizations for both regular and subpage cases.
Qu Wenruo (7):
btrfs: scrub: use pointer array to replace @sblocks_for_recheck
btrfs: extract the initialization of scrub_block into a helper
function
btrfs: extract the allocation and initialization of scrub_sector into
a helper
btrfs: scrub: introduce scrub_block::pages for more efficient memory
usage for subpage
btrfs: scrub: remove scrub_sector::page and use scrub_block::pages
instead
btrfs: scrub: move logical/physical/dev/mirror_num from scrub_sector
to scrub_block
btrfs: use larger blocksize for data extent scrub
fs/btrfs/scrub.c | 546 ++++++++++++++++++++++++++++++-----------------
1 file changed, 353 insertions(+), 193 deletions(-)
--
2.37.0
next reply other threads:[~2022-08-08 5:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-08 5:45 Qu Wenruo [this message]
2022-08-08 5:45 ` [PATCH v3 1/7] btrfs: scrub: use pointer array to replace @sblocks_for_recheck Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 2/7] btrfs: extract the initialization of scrub_block into a helper function Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 3/7] btrfs: extract the allocation and initialization of scrub_sector into a helper Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 4/7] btrfs: scrub: introduce scrub_block::pages for more efficient memory usage for subpage Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 5/7] btrfs: scrub: remove scrub_sector::page and use scrub_block::pages instead Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 6/7] btrfs: scrub: move logical/physical/dev/mirror_num from scrub_sector to scrub_block Qu Wenruo
2022-08-08 5:45 ` [PATCH v3 7/7] btrfs: use larger blocksize for data extent scrub Qu Wenruo
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.1659936510.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;
as well as URLs for NNTP newsgroup(s).