From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v3 13/13] btrfs: add subpage overview comments
Date: Thu, 25 Mar 2021 15:14:45 +0800 [thread overview]
Message-ID: <20210325071445.90896-14-wqu@suse.com> (raw)
In-Reply-To: <20210325071445.90896-1-wqu@suse.com>
This patch will add an overview for how btrfs subpage support,
including:
- Limitations
- Behaviors
- Basic implementation points
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/subpage.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c
index 2a326d6385ed..c35db695886b 100644
--- a/fs/btrfs/subpage.c
+++ b/fs/btrfs/subpage.c
@@ -1,5 +1,59 @@
// SPDX-License-Identifier: GPL-2.0
+/*
+ * Subpage (sectorsize < PAGE_SIZE) support for btrfs overview:
+ *
+ * Limitation:
+ * - Only support 64K page size yet
+ * This is to make metadata handling easier, as 64K page would ensure
+ * all nodesize would fit inside one page, thus we don't need to handle
+ * cases where a tree block crosses several pages.
+ *
+ * - Only metadata read-write yet
+ * The data read-write part is under heavy tests, while still have several
+ * bugs remaining.
+ *
+ * - Metadata can't cross 64K page boundary
+ * btrfs-progs and kernel has done such behavior for a while, thus only
+ * ancient btrfs could have such problem.
+ * For such case, btrfs will do a graceful rejection.
+ *
+ * Special behaviors:
+ * - Metadata
+ * Metadata read is fully subpage.
+ * Meaning when reading one tree block will only trigger the read for the
+ * needed range, other unrelated range in the same page will not be touched.
+ *
+ * Metadata write is partial subpage.
+ * The writeback is still for the full page, but btrfs will only submit
+ * the dirty extent buffers in the page.
+ *
+ * This means, if we have a metadata page like this:
+ * Page offset
+ * 0 16K 32K 48K 64K
+ * |/////////| |///////////|
+ * \- Tree block A \- Tree block B
+ *
+ * Even if we just want to writeback tree block A, we will also writeback
+ * tree block B if it's also dirty.
+ *
+ * This may cause extra metadata writeback which results more COW.
+ *
+ * Implementation:
+ * - Common
+ * Both metadata and data will use an new structure, btrfs_subpage, to
+ * record the status of each sector inside a page.
+ * This provides the extra granularity needed.
+ *
+ * - Metadata
+ * Since we have multiple tree blocks inside one page, we can't rely on page
+ * locking anymore, or we will have greatly reduced concurrency or even
+ * deadlock (hold one tree lock while try to lock another tree lock in the
+ * same page).
+ *
+ * Thus for metadata locking, subpage support relies on io_tree locking only.
+ * This means a slightly more tree locking latency.
+ */
#include <linux/slab.h>
#include "ctree.h"
#include "subpage.h"
--
2.30.1
next prev parent reply other threads:[~2021-03-25 7:16 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-25 7:14 [PATCH v3 00/13] btrfs: support read-write for subpage metadata Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 01/13] btrfs: add sysfs interface for supported sectorsize Qu Wenruo
2021-03-25 14:41 ` Anand Jain
2021-03-29 18:20 ` David Sterba
2021-04-01 22:32 ` Anand Jain
2021-04-01 17:56 ` David Sterba
2021-03-25 7:14 ` [PATCH v3 02/13] btrfs: use min() to replace open-code in btrfs_invalidatepage() Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 03/13] btrfs: remove unnecessary variable shadowing " Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 04/13] btrfs: refactor how we iterate ordered extent " Qu Wenruo
2021-04-02 1:15 ` Anand Jain
2021-04-02 3:33 ` Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 05/13] btrfs: introduce helpers for subpage dirty status Qu Wenruo
2021-04-01 18:11 ` David Sterba
2021-03-25 7:14 ` [PATCH v3 06/13] btrfs: introduce helpers for subpage writeback status Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 07/13] btrfs: allow btree_set_page_dirty() to do more sanity check on subpage metadata Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 08/13] btrfs: support subpage metadata csum calculation at write time Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 09/13] btrfs: make alloc_extent_buffer() check subpage dirty bitmap Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 10/13] btrfs: make the page uptodate assert to be subpage compatible Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 11/13] btrfs: make set/clear_extent_buffer_dirty() " Qu Wenruo
2021-03-25 7:14 ` [PATCH v3 12/13] btrfs: make set_btree_ioerr() accept extent buffer and " Qu Wenruo
2021-03-25 7:14 ` Qu Wenruo [this message]
2021-03-25 12:20 ` [PATCH v3 00/13] btrfs: support read-write for subpage metadata Neal Gompa
2021-03-25 13:16 ` Qu Wenruo
2021-03-28 20:02 ` Ritesh Harjani
2021-03-29 2:01 ` Qu Wenruo
2021-04-02 1:39 ` Anand Jain
2021-04-02 3:26 ` Qu Wenruo
2021-04-02 8:33 ` Ritesh Harjani
2021-04-02 8:36 ` Qu Wenruo
2021-04-02 8:46 ` Ritesh Harjani
2021-04-02 8:52 ` Qu Wenruo
2021-04-12 11:33 ` Qu Wenruo
2021-04-15 3:44 ` riteshh
2021-04-15 14:52 ` riteshh
2021-04-15 23:19 ` Qu Wenruo
2021-04-15 23:34 ` Qu Wenruo
2021-04-16 1:34 ` Qu Wenruo
2021-04-16 5:50 ` riteshh
2021-04-16 6:14 ` Qu Wenruo
2021-04-16 16:52 ` riteshh
2021-04-19 5:59 ` riteshh
2021-04-19 6:16 ` Qu Wenruo
2021-04-19 7:04 ` riteshh
2021-04-19 7:19 ` Qu Wenruo
2021-04-19 13:24 ` Qu Wenruo
2021-04-21 7:03 ` riteshh
2021-04-21 7:15 ` Qu Wenruo
2021-04-21 7:30 ` riteshh
2021-04-21 8:26 ` Qu Wenruo
2021-04-21 11:13 ` riteshh
2021-04-21 11:42 ` Qu Wenruo
2021-04-21 12:15 ` riteshh
2021-03-29 18:53 ` David Sterba
2021-04-01 5:36 ` Qu Wenruo
2021-04-01 17:55 ` David Sterba
2021-04-02 1:27 ` Anand Jain
2021-04-03 11:08 ` David Sterba
2021-04-05 6:14 ` Qu Wenruo
2021-04-06 2:31 ` Anand Jain
2021-04-06 19:20 ` David Sterba
2021-04-06 23:59 ` Qu Wenruo
2021-04-06 19:13 ` 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=20210325071445.90896-14-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).