Re: [PATCH v16 00/11] xfs: Delay Ready Attributes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 25, 2021 at 05:32:57PM -0700, Allison Henderson wrote:
> Hi all,
> 
> This set is a subset of a larger series for Dealyed Attributes. Which is a
> subset of a yet larger series for parent pointers. Delayed attributes allow
> attribute operations (set and remove) to be logged and committed in the same
> way that other delayed operations do. This allows more complex operations (like
> parent pointers) to be broken up into multiple smaller transactions. To do
> this, the existing attr operations must be modified to operate as a delayed
> operation.  This means that they cannot roll, commit, or finish transactions.
> Instead, they return -EAGAIN to allow the calling function to handle the
> transaction.  In this series, we focus on only the delayed attribute portion.
> We will introduce parent pointers in a later set.
> 
> In this version I have reduced the set back to the "Delay Ready Attrs" sub series to
> avoid reviewer burn out, but the extended series is available to view in the inlcuded
> git hub links, which extend all the way through parent pointers.  Feel free to review
> as much as feels reasonable.  The set as a whole is a bit much to digest at once, so
> working through it in progressive subsets seems like a reasonable way to manage its
> dev efforts.
> 
> Lastly, in the last revision folks asked for some stress testing on the set.  On my
> system, I found that in an fsstress test with all patches applied, we spend at most
> %0.17 of the time in the attr routines, compared to at most %0.12 with out the set applied.
> Both can fluctuate quite a bit depending on the other operations going on that seem to
> occupy most of the activity.  For the most part though, I do not find these results to be
> particularly concerning.  Though folks are certainly welcome to try it out on their own 
> system to see how the results might differ.
> 
> Updates since v15: Mostly just review feed back from the previous revision.  I've
> tracked changes below to help reviews recall the changes discussed

Hmm... so I ran fstests against this on an otherwise default V5
filesystem, and saw three new regressions:

xfs/125 spat out this from the final repair run:

Phase 1 - find and verify superblock...
Phase 2 - using internal log
	- zero log...
	- scan filesystem freespace and inode maps...
	- found root inode chunk
Phase 3 - for each AG...
	- scan (but don't clear) agi unlinked lists...
	- process known inodes and perform inode discovery...
	- agno = 0
attribute entry #32 in attr block 2, inode 134 is INCOMPLETE
problem with attribute contents in inode 134
would clear attr fork
bad nblocks 8 for inode 134, would reset to 0
bad anextents 4 for inode 134, would reset to 0
	- agno = 1
	- agno = 2
	- agno = 3
	- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
	- setting up duplicate extent list...
	- check for inodes claiming duplicate blocks...
	- agno = 0
	- agno = 1
	- agno = 2
	- agno = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
	- traversing filesystem ...
	- traversal finished ...
	- moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.
xfs_repair should not fail

And xfs/434 and xfs/436 both complained about memory leaks stemming from
an xfs_da_state that xfs/125 didn't free correctly:

[ 1247.150683] =============================================================================
[ 1247.151799] BUG xfs_da_state (Tainted: G    B   W        ): Objects remaining in xfs_da_state on __kmem_cache_shutdown()
[ 1247.153246] -----------------------------------------------------------------------------
[ 1247.153246] 
[ 1247.154528] INFO: Slab 0xffffea00002e9280 objects=17 used=11 fp=0xffff88800ba4b4a0 flags=0xfff80000010200
[ 1247.155764] CPU: 2 PID: 50257 Comm: modprobe Tainted: G    B   W         5.12.0-rc4-djwx #rc4
[ 1247.156849] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1247.157996] Call Trace:
[ 1247.158330]  dump_stack+0x64/0x7c
[ 1247.158767]  slab_err+0xb7/0xdc
[ 1247.159196]  ? printk+0x58/0x6f
[ 1247.159615]  __kmem_cache_shutdown.cold+0x39/0x15e
[ 1247.160248]  kmem_cache_destroy+0x3f/0x110
[ 1247.160779]  xfs_destroy_zones+0xbe/0xe2 [xfs]
[ 1247.161462]  exit_xfs_fs+0x5f/0x9b4 [xfs]
[ 1247.162065]  __do_sys_delete_module.constprop.0+0x145/0x220
[ 1247.162740]  do_syscall_64+0x2d/0x40
[ 1247.163197]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1247.163810] RIP: 0033:0x7fd91cfe4bcb
[ 1247.164262] Code: 73 01 c3 48 8b 0d c5 82 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 95 82 0c 00 f7 d8 64 89 01 48
[ 1247.166352] RSP: 002b:00007fff89097038 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
[ 1247.167217] RAX: ffffffffffffffda RBX: 0000558b8e105cc0 RCX: 00007fd91cfe4bcb
[ 1247.167998] RDX: 0000000000000000 RSI: 0000000000000800 RDI: 0000558b8e105d28
[ 1247.168781] RBP: 0000558b8e105cc0 R08: 0000000000000000 R09: 0000000000000000
[ 1247.169562] R10: 00007fd91d060ac0 R11: 0000000000000206 R12: 0000558b8e105d28
[ 1247.170351] R13: 0000000000000000 R14: 0000558b8e105d28 R15: 0000558b8e105cc0

>From a quick bisect, all of thse problem originates in the last patch.

--D

> xfs: Reverse apply 72b97ea40d
>   NEW
> 
> xfs: Add helper xfs_attr_node_remove_step
>   DROPPED
> 
> xfs: Add xfs_attr_node_remove_cleanup
>   No change
> 
> xfs: Hoist transaction handling in xfs_attr_node_remove_step
>   DROPPED
> 
> xfs: Hoist xfs_attr_set_shortform
>   No change
> 
> xfs: Add helper xfs_attr_set_fmt
>   Fixed helper to return error when defer_finish fails
> 
> xfs: Separate xfs_attr_node_addname and xfs_attr_node_addname_work
>   Renamed xfs_attr_node_addname_work to xfs_attr_node_addname_clear_incomplete
> 
> xfs: Add helper xfs_attr_node_addname_find_attr
>   Renamed goto out, to goto error
> 
> xfs: Hoist xfs_attr_node_addname
>   Removed unused retval variable
>   Removed extra state free in xfs_attr_node_addname
> 
> xfs: Hoist xfs_attr_leaf_addname
>   Fixed spelling typos
> 
> xfs: Hoist node transaction handling
>   Added consistent braces to if/else statement
> 
> xfs: Add delay ready attr remove routines
>   Typo fixes
>   Merged xfs_attr_remove_iter with xfs_attr_node_removename_iter
>   Added state XFS_DAS_RMTBLK
>   Flow chart updated
> 
> xfs: Add delay ready attr set routines
>   Rebase adjustments
>   Typo fixes
> 
> 
> Extended Series Changes
> ------------------------
> xfs: Add state machine tracepoints
>   Rebase adjustments
>   xfs_attr_node_remove_rmt_return removed to match earlier refactoring changes
>   trace_xfs_attr_node_removename_iter_return becomes
>   trace_xfs_attr_remove_iter_return to match earlier refactoring changes
> 
> xfs: Rename __xfs_attr_rmtval_remove
>   No change
> 
> xfs: Handle krealloc errors in xlog_recover_add_to_cont_trans
>   Added kmem_alloc_large fall back
>  
> xfs: Set up infrastructure for deferred attribute operations
>   Typo fixes
>   Rename xfs_trans_attr to xfs_trans_attr_finish_update
>   Added helper function xfs_attri_validate
>   Split patch into infrastructure and implementation patches
>   Added XFS_ERROR_REPORT in xlog_recover_attri_commit_pass2:
> 
> xfs: Implement for deferred attribute operations
>   NEW
> 
> xfs: Skip flip flags for delayed attrs
>   Did a performance analysis
> 
> xfs: Add xfs_attr_set_deferred and xfs_attr_remove_deferred
>   Typo fixes
> 
> xfs: Remove unused xfs_attr_*_args
>   Rebase adjustments
> 
> xfs: Add delayed attributes error tag
>   Added errortag include
> 
> xfs: Merge xfs_delattr_context into xfs_attr_item
>   Typo fixes
> 
> 
> This series can be viewed on github here:
> https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_v16
> 
> As well as the extended delayed attribute and parent pointer series:
> https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_v16_extended
> 
> And the test cases:
> https://github.com/allisonhenderson/xfs_work/tree/pptr_xfstestsv2
> 
> In order to run the test cases, you will need have the corresponding xfsprogs
> changes as well.  Which can be found here:
> https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_xfsprogs_v16
> https://github.com/allisonhenderson/xfs_work/tree/delay_ready_attrs_xfsprogs_v16_extended
> 
> To run the xfs attributes tests run:
> check -g attr
> 
> To run as delayed attributes run:
> export MOUNT_OPTIONS="-o delattr"
> check -g attr
> 
> To run parent pointer tests:
> check -g parent
> 
> I've also made the corresponding updates to the user space side as well, and ported anything
> they need to seat correctly.
> 
> Questions, comment and feedback appreciated! 
> 
> Thanks all!
> Allison 
> 
> Allison Henderson (11):
>   xfs: Reverse apply 72b97ea40d
>   xfs: Add xfs_attr_node_remove_cleanup
>   xfs: Hoist xfs_attr_set_shortform
>   xfs: Add helper xfs_attr_set_fmt
>   xfs: Separate xfs_attr_node_addname and
>     xfs_attr_node_addname_clear_incomplete
>   xfs: Add helper xfs_attr_node_addname_find_attr
>   xfs: Hoist xfs_attr_node_addname
>   xfs: Hoist xfs_attr_leaf_addname
>   xfs: Hoist node transaction handling
>   xfs: Add delay ready attr remove routines
>   xfs: Add delay ready attr set routines
> 
>  fs/xfs/libxfs/xfs_attr.c        | 903 ++++++++++++++++++++++++----------------
>  fs/xfs/libxfs/xfs_attr.h        | 364 ++++++++++++++++
>  fs/xfs/libxfs/xfs_attr_leaf.c   |   2 +-
>  fs/xfs/libxfs/xfs_attr_remote.c | 126 ++++--
>  fs/xfs/libxfs/xfs_attr_remote.h |   7 +-
>  fs/xfs/xfs_attr_inactive.c      |   2 +-
>  fs/xfs/xfs_trace.h              |   1 -
>  7 files changed, 998 insertions(+), 407 deletions(-)
> 
> -- 
> 2.7.4
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux