From: Johannes Thumshirn <johannes.thumshirn@wdc.com>
To: linux-btrfs@vger.kernel.org
Cc: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Subject: [RFC v3 00/11] btrfs: raid-stripe-tree draft patches
Date: Mon, 17 Oct 2022 04:55:18 -0700 [thread overview]
Message-ID: <cover.1666007330.git.johannes.thumshirn@wdc.com> (raw)
Here's a yet another draft of my btrfs zoned RAID patches. It's based on
Christoph's bio splitting series for btrfs.
Updates of the raid-stripe-tree are done at delayed-ref time to safe on
bandwidth while for reading we do the stripe-tree lookup on bio mapping time,
i.e. when the logical to physical translation happens for regular btrfs RAID
as well.
The stripe tree is keyed by an extent's disk_bytenr and disk_num_bytes and
it's contents are the respective physical device id and position.
For an example 1M write (split into 126K segments due to zone-append)
rapido2:/home/johannes/src/fstests# xfs_io -fdc "pwrite -b 1M 0 1M" -c fsync /mnt/test/test
wrote 1048576/1048576 bytes at offset 0
1 MiB, 1 ops; 0.0065 sec (151.538 MiB/sec and 151.5381 ops/sec)
The tree will look as follows:
rapido2:/home/johannes/src/fstests# btrfs inspect-internal dump-tree -t raid_stripe /dev/nullb0
btrfs-progs v5.16.1
raid stripe tree key (RAID_STRIPE_TREE ROOT_ITEM 0)
leaf 805847040 items 9 free space 15770 generation 9 owner RAID_STRIPE_TREE
leaf 805847040 flags 0x1(WRITTEN) backref revision 1
checksum stored 1b22e13800000000000000000000000000000000000000000000000000000000
checksum calced 1b22e13800000000000000000000000000000000000000000000000000000000
fs uuid e4f523d1-89a1-41f9-ab75-6ba3c42a28fb
chunk uuid 6f2d8aaa-d348-4bf2-9b5e-141a37ba4c77
item 0 key (939524096 RAID_STRIPE_KEY 126976) itemoff 16251 itemsize 32
stripe 0 devid 1 offset 939524096
stripe 1 devid 2 offset 536870912
item 1 key (939651072 RAID_STRIPE_KEY 126976) itemoff 16219 itemsize 32
stripe 0 devid 1 offset 939651072
stripe 1 devid 2 offset 536997888
item 2 key (939778048 RAID_STRIPE_KEY 126976) itemoff 16187 itemsize 32
stripe 0 devid 1 offset 939778048
stripe 1 devid 2 offset 537124864
item 3 key (939905024 RAID_STRIPE_KEY 126976) itemoff 16155 itemsize 32
stripe 0 devid 1 offset 939905024
stripe 1 devid 2 offset 537251840
item 4 key (940032000 RAID_STRIPE_KEY 126976) itemoff 16123 itemsize 32
stripe 0 devid 1 offset 940032000
stripe 1 devid 2 offset 537378816
item 5 key (940158976 RAID_STRIPE_KEY 126976) itemoff 16091 itemsize 32
stripe 0 devid 1 offset 940158976
stripe 1 devid 2 offset 537505792
item 6 key (940285952 RAID_STRIPE_KEY 126976) itemoff 16059 itemsize 32
stripe 0 devid 1 offset 940285952
stripe 1 devid 2 offset 537632768
item 7 key (940412928 RAID_STRIPE_KEY 126976) itemoff 16027 itemsize 32
stripe 0 devid 1 offset 940412928
stripe 1 devid 2 offset 537759744
item 8 key (940539904 RAID_STRIPE_KEY 32768) itemoff 15995 itemsize 32
stripe 0 devid 1 offset 940539904
stripe 1 devid 2 offset 537886720
total bytes 26843545600
bytes used 1245184
uuid e4f523d1-89a1-41f9-ab75-6ba3c42a28fb
Changes to v2:
- Bug fixes
- Rebased onto 20220901074216.1849941-1-hch@lst.de
- Added tracepoints
- Added leak checker
- Added RAID0 and RAID10
v2 of the patchset can be found here:
https://lore.kernel.org/linux-btrfs/cover.1656513330.git.johannes.thumshirn@wdc.com
Changes to v1:
- Write the stripe-tree at delayed-ref time (Qu)
- Add a different write path for preallocation
v1 of the patchset can be found here:
https://lore.kernel.org/linux-btrfs/cover.1652711187.git.johannes.thumshirn@wdc.com/
Johannes Thumshirn (11):
btrfs: add raid stripe tree definitions
btrfs: read raid-stripe-tree from disk
btrfs: add support for inserting raid stripe extents
btrfs: delete stripe extent on extent deletion
btrfs: lookup physical address from stripe extent
btrfs: add raid stripe tree pretty printer
btrfs: zoned: allow zoned RAID1
btrfs: allow zoned RAID0 and 10
btrfs: fix striping with RST
btrfs: check for leaks of ordered stripes on umount
btrfs: add tracepoints for ordered stripes
fs/btrfs/Makefile | 2 +-
fs/btrfs/block-rsv.c | 1 +
fs/btrfs/ctree.h | 33 +++
fs/btrfs/disk-io.c | 17 ++
fs/btrfs/extent-tree.c | 56 +++++
fs/btrfs/inode.c | 6 +
fs/btrfs/print-tree.c | 21 ++
fs/btrfs/raid-stripe-tree.c | 394 ++++++++++++++++++++++++++++++++
fs/btrfs/raid-stripe-tree.h | 60 +++++
fs/btrfs/super.c | 1 +
fs/btrfs/volumes.c | 66 +++++-
fs/btrfs/volumes.h | 14 +-
fs/btrfs/zoned.c | 43 ++++
include/trace/events/btrfs.h | 50 ++++
include/uapi/linux/btrfs.h | 1 +
include/uapi/linux/btrfs_tree.h | 20 +-
16 files changed, 768 insertions(+), 17 deletions(-)
create mode 100644 fs/btrfs/raid-stripe-tree.c
create mode 100644 fs/btrfs/raid-stripe-tree.h
--
2.37.3
next reply other threads:[~2022-10-17 11:55 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-17 11:55 Johannes Thumshirn [this message]
2022-10-17 11:55 ` [RFC v3 01/11] btrfs: add raid stripe tree definitions Johannes Thumshirn
2022-10-20 15:21 ` Josef Bacik
2022-10-20 15:49 ` Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 02/11] btrfs: read raid-stripe-tree from disk Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 03/11] btrfs: add support for inserting raid stripe extents Johannes Thumshirn
2022-10-20 15:24 ` Josef Bacik
2022-10-20 15:30 ` Josef Bacik
2022-10-21 8:13 ` Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 04/11] btrfs: delete stripe extent on extent deletion Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 05/11] btrfs: lookup physical address from stripe extent Johannes Thumshirn
2022-10-20 15:34 ` Josef Bacik
2022-10-21 8:16 ` Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 06/11] btrfs: add raid stripe tree pretty printer Johannes Thumshirn
2022-10-20 15:34 ` Josef Bacik
2022-10-17 11:55 ` [RFC v3 07/11] btrfs: zoned: allow zoned RAID1 Johannes Thumshirn
2022-10-20 15:35 ` Josef Bacik
2022-10-17 11:55 ` [RFC v3 08/11] btrfs: allow zoned RAID0 and 10 Johannes Thumshirn
2022-10-20 15:36 ` Josef Bacik
2022-10-17 11:55 ` [RFC v3 09/11] btrfs: fix striping with RST Johannes Thumshirn
2022-10-20 15:36 ` Josef Bacik
2022-10-17 11:55 ` [RFC v3 10/11] btrfs: check for leaks of ordered stripes on umount Johannes Thumshirn
2022-10-20 15:37 ` Josef Bacik
2022-10-21 8:17 ` Johannes Thumshirn
2022-10-17 11:55 ` [RFC v3 11/11] btrfs: add tracepoints for ordered stripes Johannes Thumshirn
2022-10-20 15:38 ` Josef Bacik
2022-10-20 15:42 ` [RFC v3 00/11] btrfs: raid-stripe-tree draft patches Josef Bacik
2022-10-21 8:40 ` Johannes Thumshirn
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.1666007330.git.johannes.thumshirn@wdc.com \
--to=johannes.thumshirn@wdc.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).