mbox series

[GIT,PULL] xfs: fix reflink inefficiencies

Message ID 20220428191128.GP17025@magnolia (mailing list archive)
State New, archived
Headers show
Series [GIT,PULL] xfs: fix reflink inefficiencies | expand

Pull-request

git://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/reflink-speedups-5.19_2022-04-28

Message

Darrick J. Wong April 28, 2022, 7:11 p.m. UTC
The following changes since commit 1edf8056131aca6fe7f98873da8297e6fa279d8c:

  xfs: speed up write operations by using non-overlapped lookups when possible (2022-04-28 10:24:38 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/reflink-speedups-5.19_2022-04-28

for you to fetch changes up to 6ed7e509d2304519f4f6741670f512a55e9e80fe:

  xfs: rename xfs_*alloc*_log_count to _block_count (2022-04-28 10:25:59 -0700)

----------------------------------------------------------------
xfs: fix reflink inefficiencies

As Dave Chinner has complained about on IRC, there are a couple of
things about reflink that are very inefficient.  First of all, we
limited the size of all bunmapi operations to avoid flooding the log
with defer ops in the worst case, but recent changes to the defer ops
code have solved that problem, so get rid of the bunmapi length clamp.

Second, the log reservations for reflink operations are far far larger
than they need to be.  Shrink them to exactly what we need to handle
each deferred RUI and CUI log item, and no more.  Also reduce logcount
because we don't need 8 rolls per operation.  Introduce a transaction
reservation compatibility layer to avoid changing the minimum log size
calculations.

v2: better document the use of EFIs to track when refcount updates
    should be continued in a new transaction, disentangle the alternate
    log space reservation code

----------------------------------------------------------------
Darrick J. Wong (9):
      xfs: count EFIs when deciding to ask for a continuation of a refcount update
      xfs: stop artificially limiting the length of bunmap calls
      xfs: remove a __xfs_bunmapi call from reflink
      xfs: create shadow transaction reservations for computing minimum log size
      xfs: report "max_resp" used for min log size computation
      xfs: reduce the absurdly large log operation count
      xfs: reduce transaction reservations with reflink
      xfs: rewrite xfs_reflink_end_cow to use intents
      xfs: rename xfs_*alloc*_log_count to _block_count

 fs/xfs/libxfs/xfs_bmap.c       |  22 +----
 fs/xfs/libxfs/xfs_log_rlimit.c |  75 ++++++++++++++-
 fs/xfs/libxfs/xfs_refcount.c   |  14 ++-
 fs/xfs/libxfs/xfs_refcount.h   |  13 ++-
 fs/xfs/libxfs/xfs_trans_resv.c | 214 +++++++++++++++++++++++++++++------------
 fs/xfs/libxfs/xfs_trans_resv.h |  16 ++-
 fs/xfs/xfs_reflink.c           |  95 +++++++++++-------
 fs/xfs/xfs_trace.h             |  32 +++++-
 fs/xfs/xfs_trans.c             |   3 -
 9 files changed, 345 insertions(+), 139 deletions(-)