public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Mark Tinguely <tinguely@sgi.com>
Cc: Brian Foster <bfoster@redhat.com>, xfs@oss.sgi.com
Subject: Re: [PATCH v4 5/6] xfs: add quota-driven speculative preallocation throttling
Date: Tue, 26 Feb 2013 09:14:12 +1100	[thread overview]
Message-ID: <20130225221412.GI5551@dastard> (raw)
In-Reply-To: <512BDB2A.8080103@sgi.com>

On Mon, Feb 25, 2013 at 03:44:10PM -0600, Mark Tinguely wrote:
> On 02/20/13 09:10, Brian Foster wrote:
> >Introduce the need_throttle() and calc_throttle() functions to
> >independently check whether throttling is required for a particular
> >dquot and if so, calculate the associated throttling metrics based
> >on the state of the quota. We use the same general algorithm to
> >calculate the throttle shift as for global free space with the
> >exception of using three stages rather than five.
> >
> >Update xfs_iomap_prealloc_size() to use the smallest available
> >prealloc size based on each of the constraints and apply the
> >maximum shift to obtain the throttled preallocation size.
> >
> >Signed-off-by: Brian Foster<bfoster@redhat.com>
> >---
> 
> >  	/*
> >  	 * MAXEXTLEN is not a power of two value but we round the prealloc down
> >@@ -412,6 +472,28 @@ xfs_iomap_prealloc_size(
> >  		if (freesp<  mp->m_low_space[XFS_LOWSP_1_PCNT])
> >  			shift++;
> >  	}
> >+
> >+	/*
> >+	 * Check each quota to cap the prealloc size and provide a shift
> >+	 * value to throttle with.
> >+	 */
> >+	if (xfs_quota_need_throttle(ip, XFS_DQ_USER, alloc_blocks))
> >+		xfs_quota_calc_throttle(ip, XFS_DQ_USER,&qblocks,&qshift);
> >+	if (xfs_quota_need_throttle(ip, XFS_DQ_GROUP, alloc_blocks))
> >+		xfs_quota_calc_throttle(ip, XFS_DQ_GROUP,&qblocks,&qshift);
> >+	if (xfs_quota_need_throttle(ip, XFS_DQ_PROJ, alloc_blocks))
> >+		xfs_quota_calc_throttle(ip, XFS_DQ_PROJ,&qblocks,&qshift);
> >+
> >+	/*
> >+	 * The final prealloc size is set to the minimum of free space available
> >+	 * in each of the quotas and the overall filesystem.
> >+	 *
> >+	 * The shift throttle value is set to the maximum value as determined by
> >+	 * the global low free space values and per-quota low free space values.
> >+	 */
> >+	alloc_blocks = MIN(alloc_blocks, qblocks);
> >+	shift = MAX(shift, qshift);
> >+
> >  	if (shift)
> >  		alloc_blocks>>= shift;
> >  	/*
> 
> All the limits are applied from previous extents, quota and then the
> code from commit 055388a3 is applied:
> 	if (alloc_blocks < mp->m_writeio_blocks)
> 		alloc_blocks = mp->m_writeio_blocks;
> 
>                        ^^^^
> we may not have mp->m_writeio_blocks left in the filesytem.
> Doesn't the following make more sense?:
> 
> 	if (alloc_blocks < mp->m_writeio_blocks)
> 		alloc_blocks = 0;

No. This is for prealloc, and we alwys try to prealloc the minimum
configured. If we can't prealloc that amount, then preallocation
fails and we'll try a single block.

Remember, the freesp calculation is done unlocked and hence freesp
is only an estimate. It may change between the reading of it and the
actual allocation attempt, and so the only real determination of
ENOSPC is the failure ot the allocation attempt.....

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2013-02-25 22:14 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-20 15:10 [PATCH v4 0/6] speculative preallocation quota throttling Brian Foster
2013-02-20 15:10 ` [PATCH v4 1/6] xfs: reorganize xfs_iomap_prealloc_size to remove indentation Brian Foster
2013-02-22 17:07   ` Mark Tinguely
2013-02-22 18:08     ` Brian Foster
2013-02-22 18:22       ` Mark Tinguely
2013-02-20 15:10 ` [PATCH v4 2/6] xfs: push rounddown_pow_of_two() to after prealloc throttle Brian Foster
2013-02-20 15:10 ` [PATCH v4 3/6] xfs: pass xfs_dquot to xfs_qm_adjust_dqlimits() instead of xfs_disk_dquot_t Brian Foster
2013-02-20 15:10 ` [PATCH v4 4/6] xfs: xfs_dquot prealloc throttling watermarks and low free space Brian Foster
2013-02-20 15:10 ` [PATCH v4 5/6] xfs: add quota-driven speculative preallocation throttling Brian Foster
2013-02-25 21:44   ` Mark Tinguely
2013-02-25 22:14     ` Dave Chinner [this message]
2013-02-25 22:38       ` Mark Tinguely
2013-02-20 15:10 ` [PATCH v4 6/6] xfs: xfs_iomap_prealloc_size() tracepoint Brian Foster
2013-02-22 20:09 ` [PATCH v4 0/6] speculative preallocation quota throttling Mark Tinguely
2013-02-23  1:50   ` Dave Chinner
     [not found] ` <512BC90A.4090206@sgi.com>
2013-02-25 20:47   ` Brian Foster

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=20130225221412.GI5551@dastard \
    --to=david@fromorbit.com \
    --cc=bfoster@redhat.com \
    --cc=tinguely@sgi.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