mirror_ubuntu-kernels/fs/xfs/scrub
Darrick J. Wong a7a686cb07 xfs: cache a bunch of inodes for repair scans
After observing xfs_scrub taking forever to rebuild parent pointers on a
pptrs enabled filesystem, I decided to profile what the system was
doing.  It turns out that when there are a lot of threads trying to scan
the filesystem, most of our time is spent contending on AGI buffer
locks.  Given that we're walking the inobt records anyway, we can often
tell ahead of time when there's a bunch of (up to 64) consecutive inodes
that we could grab all at once.

Do this to amortize the cost of taking the AGI lock across as many
inodes as we possibly can.  On the author's system this seems to improve
parallel throughput from barely one and a half cores to slightly
sublinear scaling.  The obvious antipattern here of course is where the
freemask has every other bit set (e.g. all 0xA's)

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2024-02-22 12:30:47 -08:00
..
agb_bitmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
agb_bitmap.h xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
agheader_repair.c xfs: roll the scrub transaction after completing a repair 2023-12-15 10:03:31 -08:00
agheader.c xfs: teach scrub to check for sole ownership of metadata objects 2023-04-11 19:00:15 -07:00
alloc_repair.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
alloc.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
attr.c xfs: remove struct xfs_attr_shortform 2023-12-29 13:37:05 +05:30
attr.h xfs: check used space of shortform xattr structures 2023-04-11 19:00:33 -07:00
bitmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
bitmap.h xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
bmap_repair.c xfs: repair the inode core and forks of a metadata inode 2023-12-15 10:03:42 -08:00
bmap.c xfs: repair inode fork block mapping data structures 2023-12-15 10:03:39 -08:00
btree.c xfs: teach scrub to check for sole ownership of metadata objects 2023-04-11 19:00:15 -07:00
btree.h overflow: Add struct_size_t() helper 2023-05-26 13:52:19 -07:00
common.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
common.h xfs: repair inode fork block mapping data structures 2023-12-15 10:03:39 -08:00
cow_repair.c xfs: convert remaining kmem_free() to kfree() 2024-02-13 18:07:34 +05:30
dabtree.c xfs: scrub should use ECHRNG to signal that the drain is needed 2023-04-11 19:00:00 -07:00
dabtree.h xfs: update copyright years for scrub/ files 2023-04-11 18:59:57 -07:00
dir.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
dqiterate.c xfs: improve dquot iteration for scrub 2023-12-15 10:03:45 -08:00
fsb_bitmap.h xfs: reintroduce reaping of file metadata blocks to xrep_reap_extents 2023-12-15 10:03:38 -08:00
fscounters.c xfs: move the xfs_rtbitmap.c declarations to xfs_rtbitmap.h 2023-10-17 16:24:22 -07:00
health.c xfs/health: cleanup, remove duplicated including 2023-12-22 11:14:17 +05:30
health.h xfs: set inode sick state flags when we zap either ondisk fork 2023-12-15 10:03:35 -08:00
ialloc_repair.c xfs: disable sparse inode chunk alignment check when there is no alignment 2024-02-17 09:18:53 +05:30
ialloc.c xfs: repair inode btrees 2023-12-15 10:03:32 -08:00
inode_repair.c xfs: remove struct xfs_attr_shortform 2023-12-29 13:37:05 +05:30
inode.c xfs: repair inode records 2023-12-15 10:03:36 -08:00
iscan.c xfs: cache a bunch of inodes for repair scans 2024-02-22 12:30:47 -08:00
iscan.h xfs: cache a bunch of inodes for repair scans 2024-02-22 12:30:47 -08:00
newbt.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
newbt.h xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
off_bitmap.h xfs: repair problems in CoW forks 2023-12-15 10:03:40 -08:00
parent.c xfs: abort directory parent scrub scans if we encounter a zapped directory 2023-12-15 10:03:37 -08:00
quota_repair.c xfs: repair quotas 2023-12-15 10:03:45 -08:00
quota.c xfs: repair quotas 2023-12-15 10:03:45 -08:00
quota.h xfs: repair quotas 2023-12-15 10:03:45 -08:00
readdir.c xfs: Replace xfs_isilocked with xfs_assert_ilocked 2024-02-19 21:19:33 +05:30
readdir.h xfs: streamline the directory iteration code for scrub 2023-04-11 19:00:17 -07:00
reap.c xfs: repair problems in CoW forks 2023-12-15 10:03:40 -08:00
reap.h xfs: reintroduce reaping of file metadata blocks to xrep_reap_extents 2023-12-15 10:03:38 -08:00
refcount_repair.c xfs: repair refcount btrees 2023-12-15 10:03:33 -08:00
refcount.c xfs: repair refcount btrees 2023-12-15 10:03:33 -08:00
repair.c xfs: repair the inode core and forks of a metadata inode 2023-12-15 10:03:42 -08:00
repair.h xfs: repair quotas 2023-12-15 10:03:45 -08:00
rmap.c xfs: move the per-AG datatype bitmaps to separate files 2023-12-15 10:03:30 -08:00
rtbitmap_repair.c xfs: online repair of realtime bitmaps 2023-12-15 10:03:43 -08:00
rtbitmap.c xfs: remove conditional building of rt geometry validator functions 2024-01-30 14:04:43 +05:30
rtbitmap.h xfs: online repair of realtime bitmaps 2023-12-15 10:03:43 -08:00
rtsummary.c xfs: remove the xfile_pread/pwrite APIs 2024-02-21 11:36:53 +05:30
scrub.c xfs: repair quotas 2023-12-15 10:03:45 -08:00
scrub.h xfs: repair inode btrees 2023-12-15 10:03:32 -08:00
stats.c xfs: only call xchk_stats_merge after validating scrub inputs 2023-09-12 10:31:08 -07:00
stats.h xfs: track usage statistics of online fsck 2023-08-10 07:48:07 -07:00
symlink.c xfs: make if_data a void pointer 2023-12-29 13:37:03 +05:30
trace.c xfs: implement live inode scan for scrub 2024-02-22 12:30:45 -08:00
trace.h xfs: cache a bunch of inodes for repair scans 2024-02-22 12:30:47 -08:00
xfarray.c xfs: convert xfarray_pagesort to deal with large folios 2024-02-21 11:36:55 +05:30
xfarray.h xfs: convert xfarray_pagesort to deal with large folios 2024-02-21 11:36:55 +05:30
xfile.c xfs: remove xfile_{get,put}_page 2024-02-21 11:36:56 +05:30
xfile.h xfs: remove xfile_{get,put}_page 2024-02-21 11:36:56 +05:30
xfs_scrub.h xfs: update copyright years for scrub/ files 2023-04-11 18:59:57 -07:00