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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.