All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 00/13] btrfs: introduce RAID stripe tree
@ 2023-03-02  9:45 Johannes Thumshirn
  2023-03-02  9:45 ` [PATCH v7 01/13] btrfs: re-add trans parameter to insert_delayed_ref Johannes Thumshirn
                   ` (14 more replies)
  0 siblings, 15 replies; 49+ messages in thread
From: Johannes Thumshirn @ 2023-03-02  9:45 UTC (permalink / raw)
  To: David Sterba
  Cc: Johannes Thumshirn, linux-btrfs, Josef Bacik, Christoph Hellwig

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

A design document can be found here:
https://docs.google.com/document/d/1Iui_jMidCd4MVBNSSLXRfO7p5KmvnoQL/edit?usp=sharing&ouid=103609947580185458266&rtpof=true&sd=true

The user-space part of this series can be found here:
https://lore.kernel.org/linux-btrfs/20230215143109.2721722-1-johannes.thumshirn@wdc.com

Changes to v6:
- Fix degraded RAID1 mounts
- Fix RAID0/10 mounts

v6 of the patchset can be found here:
https://lore/kernel.org/linux-btrfs/cover.1676470614.git.johannes.thumshirn@wdc.com

Changes to v5:
- Incroporated review comments from Josef and Christoph
- Rebased onto misc-next

v5 of the patchset can be found here:
https://lore/kernel.org/linux-btrfs/cover.1675853489.git.johannes.thumshirn@wdc.com

Changes to v4:
- Added patch to check for RST feature in sysfs
- Added RST lookups for scrubbing 
- Fixed the error handling bug Josef pointed out
- Only check if we need to write out a RST once per delayed_ref head
- Added support for zoned data DUP with RST

Changes to v3:
- Rebased onto 20221120124734.18634-1-hch@lst.de
- Incorporated Josef's review
- Merged related patches

v3 of the patchset can be found here:
https://lore/kernel.org/linux-btrfs/cover.1666007330.git.johannes.thumshirn@wdc.com

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 (13):
  btrfs: re-add trans parameter to insert_delayed_ref
  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 RAID
  btrfs: check for leaks of ordered stripes on umount
  btrfs: add tracepoints for ordered stripes
  btrfs: announce presence of raid-stripe-tree in sysfs
  btrfs: consult raid-stripe-tree when scrubbing
  btrfs: add raid-stripe-tree to features enabled with debug

 fs/btrfs/Makefile               |   2 +-
 fs/btrfs/accessors.h            |  29 +++
 fs/btrfs/bio.c                  |  29 +++
 fs/btrfs/block-rsv.c            |   1 +
 fs/btrfs/delayed-ref.c          |  13 +-
 fs/btrfs/delayed-ref.h          |   2 +
 fs/btrfs/disk-io.c              |  24 ++
 fs/btrfs/disk-io.h              |   5 +
 fs/btrfs/extent-tree.c          |  68 ++++++
 fs/btrfs/fs.h                   |   7 +-
 fs/btrfs/inode.c                |  15 +-
 fs/btrfs/print-tree.c           |  21 ++
 fs/btrfs/raid-stripe-tree.c     | 416 ++++++++++++++++++++++++++++++++
 fs/btrfs/raid-stripe-tree.h     |  87 +++++++
 fs/btrfs/scrub.c                |  33 ++-
 fs/btrfs/super.c                |   1 +
 fs/btrfs/sysfs.c                |   3 +
 fs/btrfs/volumes.c              |  46 +++-
 fs/btrfs/volumes.h              |  13 +-
 fs/btrfs/zoned.c                | 119 ++++++++-
 include/trace/events/btrfs.h    |  50 ++++
 include/uapi/linux/btrfs.h      |   1 +
 include/uapi/linux/btrfs_tree.h |  20 +-
 23 files changed, 973 insertions(+), 32 deletions(-)
 create mode 100644 fs/btrfs/raid-stripe-tree.c
 create mode 100644 fs/btrfs/raid-stripe-tree.h

-- 
2.39.1


^ permalink raw reply	[flat|nested] 49+ messages in thread

end of thread, other threads:[~2023-03-09 15:20 UTC | newest]

Thread overview: 49+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-02  9:45 [PATCH v7 00/13] btrfs: introduce RAID stripe tree Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 01/13] btrfs: re-add trans parameter to insert_delayed_ref Johannes Thumshirn
2023-03-02 13:36   ` Anand Jain
2023-03-02  9:45 ` [PATCH v7 02/13] btrfs: add raid stripe tree definitions Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 03/13] btrfs: read raid-stripe-tree from disk Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 04/13] btrfs: add support for inserting raid stripe extents Johannes Thumshirn
2023-03-02 10:58   ` Qu Wenruo
2023-03-02 11:25     ` Johannes Thumshirn
2023-03-02 11:45       ` Qu Wenruo
2023-03-02 11:58         ` Johannes Thumshirn
2023-03-02 12:01           ` Qu Wenruo
2023-03-02 14:01           ` Christoph Hellwig
2023-03-02 15:31             ` Johannes Thumshirn
2023-03-02 22:35               ` Qu Wenruo
2023-03-03 11:15                 ` Johannes Thumshirn
2023-03-03 11:42                   ` Qu Wenruo
2023-03-03 14:21                     ` hch
2023-03-06 10:58                       ` Johannes Thumshirn
2023-03-03 14:17                   ` hch
2023-03-03 14:16                 ` hch
2023-03-08  9:11                   ` Johannes Thumshirn
2023-03-08 12:01                     ` Qu Wenruo
2023-03-08 14:33                     ` Christoph Hellwig
2023-03-09 10:53                       ` Johannes Thumshirn
2023-03-09 15:20                         ` Christoph Hellwig
2023-03-03 14:15               ` hch
2023-03-02 11:45       ` Johannes Thumshirn
2023-03-02 14:03         ` Christoph Hellwig
2023-03-02 13:59       ` Christoph Hellwig
2023-03-02 15:29         ` Johannes Thumshirn
2023-03-03  0:13         ` Qu Wenruo
2023-03-03 14:15           ` Christoph Hellwig
2023-03-03 23:03             ` Qu Wenruo
2023-03-06 17:11               ` Christoph Hellwig
2023-03-02  9:45 ` [PATCH v7 05/13] btrfs: delete stripe extent on extent deletion Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 06/13] btrfs: lookup physical address from stripe extent Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 07/13] btrfs: add raid stripe tree pretty printer Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 08/13] btrfs: zoned: allow zoned RAID Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 09/13] btrfs: check for leaks of ordered stripes on umount Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 10/13] btrfs: add tracepoints for ordered stripes Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 11/13] btrfs: announce presence of raid-stripe-tree in sysfs Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 12/13] btrfs: consult raid-stripe-tree when scrubbing Johannes Thumshirn
2023-03-02  9:45 ` [PATCH v7 13/13] btrfs: add raid-stripe-tree to features enabled with debug Johannes Thumshirn
2023-03-03 23:27   ` Anand Jain
2023-03-09  7:08   ` Naohiro Aota
2023-03-02 19:38 ` [PATCH v7 00/13] btrfs: introduce RAID stripe tree Neal Gompa
2023-03-03  8:45   ` Johannes Thumshirn
2023-03-03  9:29 ` Anand Jain
2023-03-03 10:32   ` Johannes Thumshirn

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.