mbox series

[GIT,PULL,6/6] xfs: CPU usage optimizations for realtime allocator

Message ID 169781768373.780878.12341753475995545092.stg-ugh@frogsfrogsfrogs (mailing list archive)
State New, archived
Headers show
Series [GIT,PULL,1/6] xfs: minor bugfixes for rt stuff | expand

Pull-request

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/rtalloc-speedups-6.7_2023-10-19

Message

Darrick J. Wong Oct. 20, 2023, 10:17 p.m. UTC
Hi Chandan,

Please pull this branch with changes for xfs for 6.7-rc1.

As usual, I did a test-merge with the main upstream branch as of a few
minutes ago, and didn't see any conflicts.  Please let me know if you
encounter any problems.

--D

The following changes since commit 663b8db7b0256b81152b2f786e45ecf12bdf265f:

xfs: use accessor functions for summary info words (2023-10-18 16:53:00 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/rtalloc-speedups-6.7_2023-10-19

for you to fetch changes up to e0f7422f54b092df7996f21da69824aea496490a:

xfs: don't look for end of extent further than necessary in xfs_rtallocate_extent_near() (2023-10-19 08:34:33 -0700)

----------------------------------------------------------------
xfs: CPU usage optimizations for realtime allocator [v2.3]

This is version 2 of [Omar's] XFS realtime allocator opimization patch
series.

Changes since v1 [1]:

- Fixed potential overflow in patch 4.
- Changed deprecated typedefs to normal struct names
- Fixed broken indentation
- Used xfs_fileoff_t instead of xfs_fsblock_t where appropriate.
- Added calls to xfs_rtbuf_cache_relse anywhere that the cache is used
instead of relying on the buffers being dirtied and thus attached to
the transaction.
- Clarified comments and commit messages in a few places.
- Added Darrick's Reviewed-bys.

Cover letter from v1:

Our distributed storage system uses XFS's realtime device support as a
way to split an XFS filesystem between an SSD and an HDD -- we configure
the HDD as the realtime device so that metadata goes on the SSD and data
goes on the HDD.

We've been running this in production for a few years now, so we have
some fairly fragmented filesystems. This has exposed various CPU
inefficiencies in the realtime allocator. These became even worse when
we experimented with using XFS_XFLAG_EXTSIZE to force files to be
allocated contiguously.

This series adds several optimizations that don't change the realtime
allocator's decisions, but make them happen more efficiently, mainly by
avoiding redundant work. We've tested these in production and measured
~10%% lower CPU utilization. Furthermore, it made it possible to use
XFS_XFLAG_EXTSIZE to force contiguous allocations -- without these
patches, our most fragmented systems would become unresponsive due to
high CPU usage in the realtime allocator, but with them, CPU utilization
is actually ~4-6%% lower than before, and disk I/O utilization is 15-20%%
lower.

Patches 2 and 3 are preparations for later optimizations; the remaining
patches are the optimizations themselves.

1: https://lore.kernel.org/linux-xfs/cover.1687296675.git.osandov@osandov.com/

v2.1: djwong rebased everything atop his own cleanups, added dave's rtalloc_args
v2.2: rebase with new apis and clean them up too
v2.3: move struct definition around for lolz

With a bit of luck, this should all go splendidly.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>

----------------------------------------------------------------
Darrick J. Wong (2):
xfs: simplify xfs_rtbuf_get calling conventions
xfs: simplify rt bitmap/summary block accessor functions

Dave Chinner (1):
xfs: consolidate realtime allocation arguments

Omar Sandoval (6):
xfs: cache last bitmap block in realtime allocator
xfs: invert the realtime summary cache
xfs: return maximum free size from xfs_rtany_summary()
xfs: limit maxlen based on available space in xfs_rtallocate_extent_near()
xfs: don't try redundant allocations in xfs_rtallocate_extent_near()
xfs: don't look for end of extent further than necessary in xfs_rtallocate_extent_near()

fs/xfs/libxfs/xfs_rtbitmap.c | 525 +++++++++++++++++++++----------------------
fs/xfs/libxfs/xfs_rtbitmap.h |  97 +++++---
fs/xfs/scrub/rtsummary.c     |  13 +-
fs/xfs/xfs_mount.h           |   6 +-
fs/xfs/xfs_rtalloc.c         | 471 ++++++++++++++++++--------------------
5 files changed, 554 insertions(+), 558 deletions(-)