From: Matthew Wilcox <willy@infradead.org>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>
Cc: josef@toxicpanda.com, linux-f2fs-devel@lists.sourceforge.net,
clm@fb.com, terrelln@fb.com, dsterba@suse.com,
linux-btrfs@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCH 02/14] btrfs: convert get_next_extent_buffer() to take a folio
Date: Thu, 22 Aug 2024 13:07:52 +0100 [thread overview]
Message-ID: <ZscqGAMm1tofHSSG@casper.infradead.org> (raw)
In-Reply-To: <0f643b0f-f1c2-48b7-99d5-809b8b7f0aac@gmx.com>
On Thu, Aug 22, 2024 at 08:28:09PM +0930, Qu Wenruo wrote:
> 在 2024/8/22 12:35, Matthew Wilcox 写道:
> > > - while (cur < page_start + PAGE_SIZE) {
> > > + while (cur < folio_start + PAGE_SIZE) {
> >
> > Presumably we want to support large folios in btrfs at some point?
>
> Yes, and we're already working towards that direction.
>
> > I certainly want to remove CONFIG_READ_ONLY_THP_FOR_FS soon and that'll
> > be a bit of a regression for btrfs if it doesn't have large folio
> > support. So shouldn't we also s/PAGE_SIZE/folio_size(folio)/ ?
>
> AFAIK we're only going to support larger folios to support larger than
> PAGE_SIZE sector size so far.
Why do you not want the performance gains from using larger folios?
> So every folio is still in a fixed size (sector size, >= PAGE_SIZE).
>
> Not familiar with transparent huge page, I thought transparent huge page
> is transparent to fs.
>
> Or do we need some special handling?
> My uneducated guess is, we will get a larger folio passed to readpage
> call back directly?
Why do you choose to remain uneducated? It's not like I've been keeping
all of this to myself for the past five years. I've given dozens of
presentations on it, including plenary sessions at LSFMM. As a filesystem
developer, you must want to not know about it at this point.
> It's straightforward enough to read all contents for a larger folio,
> it's no different to subpage handling.
>
> But what will happen if some writes happened to that larger folio?
> Do MM layer detects that and split the folios? Or the fs has to go the
> subpage routine (with an extra structure recording all the subpage flags
> bitmap)?
Entirely up to the filesystem. It would help if btrfs used the same
terminology as the rest of the filesystems instead of inventing its own
"subpage" thing. As far as I can tell, "subpage" means "fs block size",
but maybe it has a different meaning that I haven't ascertained.
Tracking dirtiness on a per-folio basis does not seem to be good enough.
Various people have workloads that regress in performance if you do
that. So having some data structure attached to folio->private which
tracks dirtiness on a per-fs-block basis works pretty well. iomap also
tracks the uptodate bit on a per-fs-block basis, but I'm less convinced
that's necessary.
I have no idea why btrfs thinks it needs to track writeback, ordered,
checked and locked in a bitmap. Those make no sense to me. But they
make no sense to me if you're support a 4KiB filesystem on a machine
with a 64KiB PAGE_SIZE, not just in the context of "larger folios".
Writeback is something the VM tells you to do; why do you need to tag
individual blocks for writeback?
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2024-08-22 12:08 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 1:37 [f2fs-dev] [PATCH -next 00/14] btrfs: Cleaned up folio->page conversion Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 01/14] btrfs: convert clear_page_extent_mapped() to take a folio Li Zetao via Linux-f2fs-devel
2024-08-22 3:02 ` Matthew Wilcox
2024-08-22 1:37 ` [f2fs-dev] [PATCH 02/14] btrfs: convert get_next_extent_buffer() " Li Zetao via Linux-f2fs-devel
2024-08-22 3:05 ` Matthew Wilcox
2024-08-22 10:58 ` Qu Wenruo via Linux-f2fs-devel
2024-08-22 12:07 ` Matthew Wilcox [this message]
2024-08-22 22:25 ` Qu Wenruo via Linux-f2fs-devel
2024-08-23 2:13 ` Qu Wenruo via Linux-f2fs-devel
2024-08-23 15:38 ` Matthew Wilcox
2024-08-23 21:32 ` Qu Wenruo via Linux-f2fs-devel
2024-08-26 14:13 ` Josef Bacik
2024-08-26 16:56 ` Matthew Wilcox
2024-08-26 21:32 ` Josef Bacik
2024-08-23 15:17 ` Josef Bacik
2024-08-22 11:01 ` Qu Wenruo via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 03/14] btrfs: convert try_release_subpage_extent_buffer() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 04/14] btrfs: convert try_release_extent_buffer() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 05/14] btrfs: convert read_key_bytes() " Li Zetao via Linux-f2fs-devel
2024-08-22 3:28 ` Matthew Wilcox
2024-08-22 1:37 ` [f2fs-dev] [PATCH 06/14] btrfs: convert submit_eb_subpage() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 07/14] btrfs: convert submit_eb_page() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 08/14] btrfs: convert try_release_extent_state() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 09/14] btrfs: convert try_release_extent_mapping() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 10/14] btrfs: convert zlib_decompress() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 11/14] btrfs: convert lzo_decompress() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 12/14] btrfs: convert zstd_decompress() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 13/14] btrfs: convert btrfs_decompress() " Li Zetao via Linux-f2fs-devel
2024-08-22 1:37 ` [f2fs-dev] [PATCH 14/14] btrfs: convert copy_inline_to_page() to use folio Li Zetao via Linux-f2fs-devel
2024-08-23 19:50 ` [f2fs-dev] [PATCH -next 00/14] btrfs: Cleaned up folio->page conversion Josef Bacik
2024-08-23 21:15 ` Josef Bacik
2024-08-26 14:08 ` Josef Bacik
2024-08-28 13:08 ` Li Zetao via Linux-f2fs-devel
2024-09-25 3:41 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
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=ZscqGAMm1tofHSSG@casper.infradead.org \
--to=willy@infradead.org \
--cc=clm@fb.com \
--cc=dsterba@suse.com \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=quwenruo.btrfs@gmx.com \
--cc=terrelln@fb.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;
as well as URLs for NNTP newsgroup(s).