From: Alex Elder <aelder@sgi.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 4/8] xfs: limit extent length for allocation to AG size
Date: Wed, 26 Jan 2011 15:22:48 -0600 [thread overview]
Message-ID: <1296076968.1980.941.camel@doink> (raw)
In-Reply-To: <1295945444-29488-5-git-send-email-david@fromorbit.com>
On Tue, 2011-01-25 at 19:50 +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> Delayed allocation extents can be larger than AGs, so when trying to
> convert a large range we may scan every AG inside
> xfs_bmap_alloc_nullfb() trying to find an AG with a size larger than
> an AG. We should stop when we find the first AG with a maximum
> possible allocation size. This causes excessive CPU usage when there
> are lots of AGs.
>
> The same problem occurs when doing preallocation of a range larger
> than an AG.
>
> Fix the problem by limiting real allocation lengths to the maximum
> that an AG can support. This means if we have empty AGs, we'll stop
> the search at the first of them. If there are no empty AGs, we'll
> still scan them all, but that is a different problem....
Maybe I'm wrong but I think you need to change a "+"
to a "-" (shown below).
And I have a few really minor suggestions:
- You should update a comment (which I point
out below) to match your change.
- Maybe make use of a local variable, at least
in xfs_bmap_btalloc_nullfb(), such as:
xfs_extlen_t requested = args->maxlen;
Otherwise it looks good to me.
Reviewed-by: Alex Elder <aelder@sgi.com>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/xfs_alloc.h | 16 ++++++++++++++++
> fs/xfs/xfs_bmap.c | 16 +++++++++-------
> 2 files changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/fs/xfs/xfs_alloc.h b/fs/xfs/xfs_alloc.h
> index 0ab56b3..6ad45b9 100644
> --- a/fs/xfs/xfs_alloc.h
> +++ b/fs/xfs/xfs_alloc.h
> @@ -75,6 +75,22 @@ typedef unsigned int xfs_alloctype_t;
> #define XFS_ALLOC_SET_ASIDE(mp) (4 + ((mp)->m_sb.sb_agcount * 4))
>
> /*
> + * When deciding how much space to allocate out of an AG, we limit the
> + * allocation maximum size to the size the AG. However, we cannot use all the
> + * blocks in the AG - some are permanently used by metadata. These
> + * blocks are generally:
> + * - the AG superblock, AGF, AGI and AGFL
> + * - the AGF (bno and cnt) and AGI btree root blocks
> + * - 4 blocks on the AGFL according to XFS_ALLOC_SET_ASIDE() limits
> + *
> + * The AG headers are sector sized, so the amount of space they take up is
> + * dependent on filesystem geometry. The others are all single blocks.
> + */
> +#define XFS_ALLOC_AG_MAX_USABLE(mp) \
> + ((mp)->m_sb.sb_agblocks - XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)) + 7)
Is this right? Shouldn't the 7 be subtracted (or combined using
parentheses with the 4 FS sectors)?
> +
> +
> +/*
> * Argument structure for xfs_alloc routines.
> * This is turned into a structure to avoid having 20 arguments passed
> * down several levels of the stack.
> diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
> index 4111cd3..74861c6 100644
> --- a/fs/xfs/xfs_bmap.c
> +++ b/fs/xfs/xfs_bmap.c
. . .
> @@ -2498,14 +2498,14 @@ xfs_bmap_btalloc_nullfb(
> * If the best seen length is less than the request
> * length, use the best as the minimum.
> */
> - else if (*blen < ap->alen)
> + else if (*blen < args->maxlen)
> args->minlen = *blen;
> /*
> * Otherwise we've seen an extent as big as alen,
Ought to adjust this comment to better reflect your updated
code ("alen" doesn't really fit any more).
> * use that as the minimum.
> */
> else
> - args->minlen = ap->alen;
> + args->minlen = args->maxlen;
>
> /*
> * set the failure fallback case to look in the selected
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2011-01-26 21:20 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-25 8:50 [PATCH 0/8] xfs: 2.6.38-rc candidate fixes V2 Dave Chinner
2011-01-25 8:50 ` [PATCH 1/8] xfs: fix log ticket leak on forced shutdown Dave Chinner
2011-01-26 21:22 ` Alex Elder
2011-01-25 8:50 ` [PATCH 2/8] xfs: fix efi item " Dave Chinner
2011-01-25 23:53 ` Christoph Hellwig
2011-01-27 0:35 ` Dave Chinner
2011-01-26 21:22 ` Alex Elder
2011-01-25 8:50 ` [PATCH 3/8] xfs: speculative delayed allocation uses rounddown_power_of_2 badly Dave Chinner
2011-01-26 21:22 ` Alex Elder
2011-01-25 8:50 ` [PATCH 4/8] xfs: limit extent length for allocation to AG size Dave Chinner
2011-01-26 21:22 ` Alex Elder [this message]
2011-01-27 0:38 ` Dave Chinner
2011-01-25 8:50 ` [PATCH 5/8] xfs: prevent extsize alignment from exceeding maximum extent size Dave Chinner
2011-01-25 9:49 ` Christoph Hellwig
2011-01-26 21:22 ` Alex Elder
2011-01-27 0:50 ` Dave Chinner
2011-01-25 8:50 ` [PATCH 6/8] xfs: limit extsize to size of AGs and/or MAXEXTLEN Dave Chinner
2011-01-26 21:23 ` Alex Elder
2011-01-25 8:50 ` [PATCH 7/8] xfs: handle CIl transaction commit failures correctly Dave Chinner
2011-01-25 9:53 ` Christoph Hellwig
2011-01-26 21:23 ` Alex Elder
2011-01-25 8:50 ` [PATCH 8/8] xfs: fix dquot shaker deadlock Dave Chinner
2011-01-25 9:52 ` Christoph Hellwig
2011-01-27 1:54 ` Dave Chinner
2011-01-27 2:24 ` Dave Chinner
2011-01-26 21:23 ` Alex Elder
2011-01-25 9:20 ` [PATCH 0/8] xfs: 2.6.38-rc candidate fixes V2 Christoph Hellwig
2011-01-26 21:23 ` Alex Elder
-- strict thread matches above, loose matches on Subject: below --
2011-01-27 3:53 [PATCH 0/8] xfs: candidate 2.6.38-rc fixes V3 Dave Chinner
2011-01-27 3:53 ` [PATCH 4/8] xfs: limit extent length for allocation to AG size Dave Chinner
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=1296076968.1980.941.camel@doink \
--to=aelder@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