All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: Dave Chinner <david@fromorbit.com>, xfs@oss.sgi.com
Subject: Re: [PATCH 1/2] mkfs: default log size for small filesystems too large
Date: Thu, 27 Feb 2014 21:12:44 -0600	[thread overview]
Message-ID: <530FFEAC.6040802@sandeen.net> (raw)
In-Reply-To: <1393494344-30056-2-git-send-email-david@fromorbit.com>

On 2/27/14, 3:45 AM, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> Recent changes to the log size scaling have resulted in using the
> default size multiplier for the log size even on small filesystems.
> Commit 88cd79b ("xfs: Add xfs_log_rlimit.c") changed the calculation
> of the maximum transaction size that the kernel would issues and
> that significantly increased the minimum size of the default log.
> As such the size of the log on small filesystems was typically
> larger than the prefious default, even though the previous default
> was still larger than the minimum needed.
> 
> Rework the default log size calculation such that it will use the
> original log size default if it is larger than the minimum log size
> required, and only use a larger log if the configuration of the
> filesystem requires it.
> 
> This is especially obvious in xfs/216, where the default log size is
> 10MB all the way up to 16GB filesystems. The current mkfs selects a
> log size of 50MB for the same size filesystems and this is
> unnecessarily large.
> 
> Return the scaling of the log size for small filesystems to
> something similar to what xfs/216 expects.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>

Looks good.

Reviewed-by: Eric Sandeen <sandeen@redhat.com>

> ---
>  mkfs/xfs_mkfs.c | 48 ++++++++++++++++++++++++++++--------------------
>  1 file changed, 28 insertions(+), 20 deletions(-)
> 
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index d82128c..f7cf394 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -2366,32 +2366,40 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	} else if (!loginternal && !xi.logdev) {
>  		logblocks = 0;
>  	} else if (loginternal && !logsize) {
> -		/*
> -		 * With a 2GB max log size, default to maximum size
> -		 * at 4TB. This keeps the same ratio from the older
> -		 * max log size of 128M at 256GB fs size. IOWs,
> -		 * the ratio of fs size to log size is 2048:1.
> -		 */
> -		logblocks = (dblocks << blocklog) / 2048;
> -		logblocks = logblocks >> blocklog;
> -		logblocks = MAX(min_logblocks, logblocks);
>  
> -		/*
> -		 * If the default log size doesn't fit in the AG size, use the
> -		 * minimum log size instead. This ensures small filesystems
> -		 * don't use excessive amounts of space for the log.
> -		 */
> -		if (min_logblocks * XFS_DFL_LOG_FACTOR >= agsize) {
> +		if (dblocks < GIGABYTES(1, blocklog)) {
> +			/* tiny filesystems get minimum sized logs. */
>  			logblocks = min_logblocks;
> +		} else if (dblocks < GIGABYTES(16, blocklog)) {
> +
> +			/*
> +			 * For small filesystems, we want to use the
> +			 * XFS_MIN_LOG_BYTES for filesystems smaller than 16G if
> +			 * at all possible, ramping up to 128MB at 256GB.
> +			 */
> +			logblocks = MIN(XFS_MIN_LOG_BYTES >> blocklog,
> +					min_logblocks * XFS_DFL_LOG_FACTOR);
>  		} else {
> -			logblocks = MAX(logblocks,
> -				MAX(XFS_DFL_LOG_SIZE,
> -					min_logblocks * XFS_DFL_LOG_FACTOR));
> +			/*
> +			 * With a 2GB max log size, default to maximum size
> +			 * at 4TB. This keeps the same ratio from the older
> +			 * max log size of 128M at 256GB fs size. IOWs,
> +			 * the ratio of fs size to log size is 2048:1.
> +			 */
> +			logblocks = (dblocks << blocklog) / 2048;
> +			logblocks = logblocks >> blocklog;
> +			logblocks = MAX(min_logblocks, logblocks);
>  		}
> +
> +		/* make sure the log fits wholly within an AG */
> +		if (logblocks >= agsize)
> +			logblocks = min_logblocks;
> +
> +		/* and now clamp the size to the maximum supported size */
>  		logblocks = MIN(logblocks, XFS_MAX_LOG_BLOCKS);
> -		if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) {
> +		if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES)
>  			logblocks = XFS_MAX_LOG_BYTES >> blocklog;
> -		}
> +
>  	}
>  	validate_log_size(logblocks, blocklog, min_logblocks);
>  
> 

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

  parent reply	other threads:[~2014-02-28  3:12 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-27  9:45 [PATCH 0/2] xfsprogs: mkfs fixes Dave Chinner
2014-02-27  9:45 ` [PATCH 1/2] mkfs: default log size for small filesystems too large Dave Chinner
2014-02-27 22:29   ` Eric Sandeen
2014-02-28  1:03     ` Dave Chinner
2014-02-28  3:12   ` Eric Sandeen [this message]
2014-02-28 13:09   ` Brian Foster
2014-02-27  9:45 ` [PATCH 2/2] mkfs: proto file creation does not set ftype correctly Dave Chinner
2014-02-27 14:17   ` Eric Sandeen
2014-02-27 19:40     ` 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=530FFEAC.6040802@sandeen.net \
    --to=sandeen@sandeen.net \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.