[PATCHSET v6.2 5/7] fstests: shard the realtime section

Darrick J. Wong
2025-01-16T23:24:40Z

Hi all,

Right now, the realtime section uses a single pair of metadata inodes to
store the free space information. This presents a scalability problem
since every thread trying to allocate or free rt extents have to lock
these files. It would be very useful if we could begin to tackle these
problems by sharding the realtime section, so create the notion of
realtime groups, which are similar to allocation groups on the data
section.

While we're at it, define a superblock to be stamped into the start of
each rt section. This enables utilities such as blkid to identify block
devices containing realtime sections, and helpfully avoids the situation
where a file extent can cross an rtgroup boundary.

The best advantage for rtgroups will become evident later when we get to
adding rmap and reflink to the realtime volume, since the geometry
constraints are the same for rt groups and AGs. Hence we can reuse all
that code directly.

If you're going to start using this code, I strongly recommend pulling
from my git trees, which are linked below.

This has been running on the djcloud for months with no problems. Enjoy!
Comments and questions are, as always, welcome.

--D

kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=realtime-groups

xfsprogs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=realtime-groups

fstests git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=realtime-groups

xfsdocs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-documentation.git/log/?h=realtime-groups
---
Commits in this patchset:
* common/populate: refactor caching of metadumps to a helper
* common/{fuzzy,populate}: use _scratch_xfs_mdrestore
* fuzzy: stress data and rt sections of xfs filesystems equally
* common/ext4: reformat external logs during mdrestore operations
* common/populate: use metadump v2 format by default for fs metadata snapshots
* punch-alternating: detect xfs realtime files with large allocation units
* xfs/206: update mkfs filtering for rt groups feature
* common: pass the realtime device to xfs_db when possible
* xfs/185: update for rtgroups
* xfs/449: update test to know about xfs_db -R
* xfs/271,xfs/556: fix tests to deal with rtgroups output in bmap/fsmap commands
* common/xfs: capture realtime devices during metadump/mdrestore
* common/fuzzy: adapt the scrub stress tests to support rtgroups
* xfs: fix fuzz tests of rtgroups bitmap and summary files
---
common/ext4 | 17 +++++++++
common/fuzzy | 84 +++++++++++++++++++++++++++++++++------------
common/metadump | 22 ++++++++++--
common/populate | 85 ++++++++++++++++++++++++++--------------------
common/xfs | 87 +++++++++++++++++++++++++++++++++++++++++++----
src/punch-alternating.c | 28 +++++++++++++++
tests/xfs/114 | 4 ++
tests/xfs/146 | 2 +
tests/xfs/185 | 65 +++++++++++++++++++++++++++--------
tests/xfs/187 | 3 +-
tests/xfs/206 | 1 +
tests/xfs/271 | 4 ++
tests/xfs/341 | 4 +-
tests/xfs/449 | 6 +++
tests/xfs/556 | 16 +++++----
tests/xfs/581 | 9 ++++-
tests/xfs/582 | 14 ++++----
tests/xfs/720 | 2 +
tests/xfs/739 | 6 +++
tests/xfs/740 | 6 +++
tests/xfs/741 | 6 +++
tests/xfs/742 | 6 +++
tests/xfs/743 | 6 +++
tests/xfs/744 | 6 +++
tests/xfs/745 | 6 +++
tests/xfs/746 | 6 +++
tests/xfs/793 | 14 ++++----
tests/xfs/795 | 2 +
28 files changed, 393 insertions(+), 124 deletions(-)