From: Mark Goodwin <markgw@sgi.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH 0/28] XFS: sync and reclaim rework
Date: Wed, 20 Aug 2008 09:11:49 +1000 [thread overview]
Message-ID: <48AB5335.4030900@sgi.com> (raw)
In-Reply-To: <1219151804-30749-1-git-send-email-david@fromorbit.com>
Thanks Dave - this is queued behind the btree factoring series;
both need to be QA'd and stress/perf tested independently, which
leads me to ask: how much QA has the sync/reclaim rework received?
(and could you make use of the machine Christoph has been using,
since you're in non-overlapping TZs?)
Also, if we were to change the inode / block offset direct mapping
to an indirect method (e.g. inode32+), would this grossly affect
the ascending inode number traversal optimization? If so, could that
mechanism be made conditional?
Thanks
-- Mark
Dave Chinner wrote:
> Multiple patch sets, all in one patch bomb against a current
> git tree. This includes all outstanding patches I have previously
> sent that are not committed plus a bunch more...
>
> ---
>
> XFS: replace the mount inode list with radix tree traversals V4
>
> The list of all inodes on a mount is superfluous. We can traverse
> all inodes now by walking the per-AG inode radix trees without
> needing a separate list. This enables us to remove a bunch of
> complex list traversal code and remove another two pointers from
> the xfs_inode.
>
> Also, by replacing the sync traversal with an ascending inode
> number traversal, we will issue better inode I/O patterns for
> writeback triggered by xfssyncd or unmount.
>
> Before we make this change, move all the relevant sync code
> into it's own file in the linux-2.6/ directory. This aggregates
> VFS specific sync interfacing in the one file and will allow
> all the subsequent change history to be associated with this
> file so it is easy to find in future.
>
> Version 4:
> o revert xfs_syncsub -> xfs_sync change in xfs_quiesce_fs and
> rediff patch series
>
> ---
>
> XFS: clean up sync code
>
> xfs_sync and xfs_syncsub are multiplexed interfaces that
> shares relatively little code between callers. because it is
> a multiplexed interface, it's hard to tell what is executed
> in each context it is called.
>
> Factor out the sync code and explicitly call the sync functions
> needed rather than the multiplexed interfaces. Once this is
> done, we can remove xfs_syncsub and xfs_sync altogether.
>
> ---
>
> RFC: Combine Linux and XFS inodes V2
>
> XFS currently has to deal with two separate inode lifecycles
> which makes for complexity in inode lookups and reclaim. We
> also have the problem of not always having a linux inode around
> when it might be useful to have it.
>
> To avoid these lifecycle problems, this series embedѕ the linux
> inode inside the struct xfs_inode and changes the way we reference
> to two inodes. We can no longer check for a null linux inode -
> instead we have to check to see if it is valid or not by checking
> either the linux inode or xfs inode state flags. While this means
> that inodes waiting for reclaim use more memory, this is not the
> commonn state for inodes and the will soon be completely freed so
> the additional memeory use in this state is only a temporary issue.
>
> This combining of the inodes simplifies the inode and reclaim logic,
> making it possible to do reclaim via radix tree tags (an upcoming
> patch series) and to be able to use RCU locking on the radix trees.
> The fact that we don't have a simple mechanism to determine the
> reclaim state of the inode makes RCU locking very complex, and this
> complexity is removed by having a combined inode structure.
>
> This patch series also changes the way XFS caches inodes. It no
> longer uses the linux inode cache as the primary lookup cache -
> instead we rely solely on the XFS inode caches. This avoids the
> inode_lock in lookups that hit the cache - we should get much
> better parallelism out of inode lookup than we currently do now.
>
> The patch series also makes use of the slab 'init once' feature
> for the XFS inodes. This means we only need to do partial
> initialisation of the xfs (and embedded linux inode) whenever
> we allocate a new inode.
>
> In future, we should also be able to cull duplicate fields out of
> the xfs and linux inodes reducing the overall memory usage of
> the active inode cache. This provides scope for continuing to
> reduce the memory footprint of the XFS inode cache.
>
> Version 2
> o reorder and rework as a result of review comments.
>
> ---
>
> XFS: Track reclaimable inodes in inode cache.
>
> Move the tracking of reclaimable inodes
> into the inode radix trees. This currently does not replace
> the reclaim flags in the inode, rather it allows traversal of
> all reclaimable inodes by walking the per-AG inode radix trees without needing
> a separate list. This enables us to remove a list and a lock to
> remove a point of serialisation during inode reclaim.
>
>
> Like the matching sync code, this also allows reclaim of inodes
> in ascending inode numbers which substantially improves I/O
> patterns during reclaim driven inode flushing.
>
> ---
>
> Combined diffstat:
>
> fs/inode.c | 205 ++++++----
> fs/xfs/Makefile | 1
> fs/xfs/linux-2.6/xfs_aops.c | 2
> fs/xfs/linux-2.6/xfs_iops.c | 19
> fs/xfs/linux-2.6/xfs_super.c | 265 +++----------
> fs/xfs/linux-2.6/xfs_super.h | 3
> fs/xfs/linux-2.6/xfs_sync.c | 780 +++++++++++++++++++++++++++++++++++++++++
> fs/xfs/linux-2.6/xfs_sync.h | 55 ++
> fs/xfs/linux-2.6/xfs_vfs.h | 31 -
> fs/xfs/linux-2.6/xfs_vnode.c | 6
> fs/xfs/linux-2.6/xfs_vnode.h | 5
> fs/xfs/quota/xfs_qm.c | 10
> fs/xfs/quota/xfs_qm_syscalls.c | 137 +++----
> fs/xfs/xfs_ag.h | 5
> fs/xfs/xfs_iget.c | 473 +++++++++---------------
> fs/xfs/xfs_inode.c | 140 ++++---
> fs/xfs/xfs_inode.h | 22 -
> fs/xfs/xfs_itable.c | 14
> fs/xfs/xfs_mount.c | 8
> fs/xfs/xfs_mount.h | 12
> fs/xfs/xfs_vfsops.c | 617 --------------------------------
> fs/xfs/xfs_vfsops.h | 2
> fs/xfs/xfs_vnodeops.c | 118 ------
> include/linux/fs.h | 2
> 24 files changed, 1391 insertions(+), 1541 deletions(-)
>
>
>
--
Mark Goodwin markgw@sgi.com
Engineering Manager for XFS and PCP Phone: +61-3-99631937
SGI Australian Software Group Cell: +61-4-18969583
-------------------------------------------------------------
next prev parent reply other threads:[~2008-08-19 23:11 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-19 13:16 [PATCH 0/28] XFS: sync and reclaim rework Dave Chinner
2008-08-19 13:16 ` [PATCH 01/28] XFS: remove i_gen from incore inode Dave Chinner
2008-08-19 13:16 ` [PATCH 02/28] XFS: move sync code to its own file Dave Chinner
2008-08-19 13:16 ` [PATCH 04/28] XFS: Remove xfs_iflush_all and clean up xfs_finish_reclaim_all() V3 Dave Chinner
2008-08-19 13:16 ` [PATCH 05/28] XFS: Use the inode tree for finding dirty inodes V3 Dave Chinner
2008-08-19 13:16 ` [PATCH 06/28] XFS: Traverse inode trees when releasing dquots V3 Dave Chinner
2008-08-19 13:16 ` [PATCH 08/28] XFS: split out two helpers from xfs_syncsub Dave Chinner
2008-08-19 13:16 ` [PATCH 09/28] XFS: Use struct inodes instead of vnodes to kill vn_grab Dave Chinner
2008-08-19 13:16 ` [PATCH 12/28] XFS: xfssyncd: don't call xfs_sync Dave Chinner
2008-08-19 13:16 ` [PATCH 13/28] XFS: make SYNC_ATTR no longer use xfs_sync Dave Chinner
2008-08-19 13:16 ` [PATCH 14/28] XFS: make SYNC_DELWRI " Dave Chinner
2008-08-19 13:16 ` [PATCH 16/28] XFS: Kill xfs_sync() Dave Chinner
2008-08-19 13:16 ` [PATCH 17/28] XFS: Move remaining quiesce code Dave Chinner
2008-08-19 13:16 ` [PATCH 20/28] XFS: Never call mark_inode_dirty_sync() directly Dave Chinner
2008-08-19 13:16 ` [PATCH 21/28] Inode: Allow external initialisers Dave Chinner
2008-08-19 13:16 ` [PATCH 23/28] XFS: Combine the XFS and Linux inodes Dave Chinner
2008-08-19 13:16 ` [PATCH 24/28] XFS: move inode reclaim functions to xfs_sync.c Dave Chinner
2008-08-19 13:16 ` [PATCH 25/28] XFS: mark inodes for reclaim via a tag in the inode radix tree Dave Chinner
2008-08-19 13:16 ` [PATCH 26/28] XFS: rename inode reclaim functions Dave Chinner
2008-08-19 23:11 ` Mark Goodwin [this message]
2008-08-19 23:39 ` [PATCH 0/28] XFS: sync and reclaim rework Dave Chinner
2008-08-19 23:59 ` Dave Chinner
2008-08-22 1:44 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48AB5335.4030900@sgi.com \
--to=markgw@sgi.com \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox