From: David Sterba <dsterba@suse.cz>
To: Qu Wenruo <wqu@suse.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v2 0/3] btrfs: use btrfs_path::reada to replace the under-utilized btrfs_reada_add() mechanism
Date: Wed, 15 Dec 2021 18:11:52 +0100 [thread overview]
Message-ID: <20211215171152.GD28560@twin.jikos.cz> (raw)
In-Reply-To: <20211214130145.82384-1-wqu@suse.com>
On Tue, Dec 14, 2021 at 09:01:42PM +0800, Qu Wenruo wrote:
> [PROBLEMS]
> The metadata readahead code is introduced in 2011 (surprisingly, the
> commit message even contains changelog), but now there is only one user
> for it, and even for the only one user, the readahead mechanism can't
> provide all it needs:
>
> - No support for commit tree readahead
> Only support readahead on current tree.
>
> - Bad layer separation
> To manage on-fly bios, btrfs_reada_add() mechanism internally manages
> a kinda complex zone system, and it's bind to per-device.
>
> This is against the common layer separation, as metadata should all be
> in btrfs logical address space, should not be bound to device physical
> layer.
>
> In fact, this is the cause of all recent reada related bugs.
>
> - No caller for asynchronous metadata readahead
> Even btrfs_reada_add() is designed to be fully asynchronous, scrub
> only calls it in a synchronous way (call btrfs_reada_add() and
> immediately call btrfs_reada_wait()).
> Thus rendering a lot of code unnecessary.
>
> [ALTERNATIVE]
> On the other hand, we have btrfs_path::reada mechanism, which is already
> used by tons of btrfs sub-systems like send.
>
> [MODIFICATION]
> This patch will use btrfs_path::reada to replace btrfs_reada_add()
> mechanism.
>
> [BENCHMARK]
> The conclusion looks like this:
>
> For the worst case (no dirty metadata, slow HDD), there will be around 5%
> performance drop for scrub.
> For other cases (even SATA SSD), there is no distinguishable performance
> difference.
>
> The number is reported scrub speed, in MiB/s.
> The resolution is limited by the reported duration, which only has a
> resolution of 1 second.
>
> Old New Diff
> SSD 455.3 466.332 +2.42%
> HDD 103.927 98.012 -5.69%
>
>
> [BENCHMARK DETAILS]
> Both tests are done in the same host and VM, the VM has one dedicated
> SSD and one dedicated HDD attached to it (virtio driver though)
>
> Host:
> CPU: 5900X
> RAM: DDR4 3200MT, no ECC
>
> During the benchmark, there is no other active other than light
> DE operations.
>
> VM:
> vCPU: 16x
> RAM: 4G
>
> The VM kernel doesn't have any heavy debug options to screw up
> the benchmark result.
>
> Test drives:
> SSD: 500G SATA SSD
> Crucial CT500MX500SSD1
> (With quite some wear, as it's my main test drive for fstests)
>
> HDD: 2T 5400rpm SATA HDD (device-managed SMR)
> WDC WD20SPZX-22UA7T0
> (Very new, invested just for this benchmark)
>
> Filesystem contents:
> For filesystems on SSD and HDD, they are generated using the following
> fio job file:
>
> [scrub-populate]
> directory=/mnt/btrfs
> nrfiles=16384
> openfiles=16
> filesize=2k-512k
> readwrite=randwrite
> ioengine=libaio
> fallocate=none
> numjobs=4
>
> Then randomly remove 4096 files (1/16th of total files) to create enough
> gaps in extent tree.
>
> Finally run scrub on each filesystem 5 times, with cycle mount and
> module reload between each run.
>
> Full result can be fetched here:
> https://docs.google.com/spreadsheets/d/1cwUAlbKPfp4baKrS92debsCt6Ejqvxr_Ylspj_SDFT0/edit?usp=sharing
>
> [CHANGELOG]
> RFC->v1:
> - Add benchmark result
> - Add extent tree readahead using btrfs_path::reada
>
> v2:
> - Reorder the patches
> So that the reada removal comes at last
>
> - Add benchmark result into the reada removal patch
>
> - Fix a bug that can cause false alert for RAID56 dev-replace/scrub
> Caused by missing ->search_commit_root assignment during refactor.
>
> Qu Wenruo (3):
> btrfs: remove the unnecessary path parameter for scrub_raid56_parity()
> btrfs: use btrfs_path::reada for scrub extent tree readahead
> btrfs: remove reada mechanism
Added to misc-next, thanks.
prev parent reply other threads:[~2021-12-15 17:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-14 13:01 [PATCH v2 0/3] btrfs: use btrfs_path::reada to replace the under-utilized btrfs_reada_add() mechanism Qu Wenruo
2021-12-14 13:01 ` [PATCH v2 1/3] btrfs: remove the unnecessary path parameter for scrub_raid56_parity() Qu Wenruo
2021-12-14 13:01 ` [PATCH v2 2/3] btrfs: use btrfs_path::reada for scrub extent tree readahead Qu Wenruo
2021-12-14 13:01 ` [PATCH v2 3/3] btrfs: remove reada mechanism Qu Wenruo
2021-12-15 17:11 ` David Sterba [this message]
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=20211215171152.GD28560@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=wqu@suse.com \
/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