[PATCH 3/4] xfs: limit speculative prealloc near ENOSPC thresholds
Brian Foster
bfoster at redhat.com
Tue Jan 22 08:33:10 CST 2013
On 01/21/2013 07:53 AM, Dave Chinner wrote:
> From: Dave Chinner <dchinner at redhat.com>
>
> There is a window on small filesytsems where specualtive
> preallocation can be larger than that ENOSPC throttling thresholds,
> resulting in specualtive preallocation trying to reserve more space
> than there is space available. This causes immediate ENOSPC to be
> triggered, prealloc to be turned off and flushing to occur. One the
> next write (i.e. next 4k page), we do exactly the same thing, and so
> effective drive into synchronous 4k writes by triggering ENOSPC
> flushing on every page while in the window between the prealloc size
> and the ENOSPC prealloc throttle threshold.
>
> Fix this by checking to see if the prealloc size would consume all
> free space, and throttle it appropriately to avoid premature
> ENOSPC...
>
Would this alternatively be resolved by the updated throttling code that
is part of my quota prealloc throttling set? I'm referring to the
following patch in particular:
http://oss.sgi.com/archives/xfs/2013-01/msg00003.html
Brian
> Signed-off-by: Dave Chinner <dchinner at redhat.com>
> ---
> fs/xfs/xfs_iomap.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 3587772..de3bad5 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -395,6 +395,15 @@ xfs_iomap_prealloc_size(
> }
> if (shift)
> alloc_blocks >>= shift;
> +
> + /*
> + * If we are still trying to allocate more space than is
> + * available, squash the prealloc hard. This can happen if we
> + * have a large file on a small filesystem and the above
> + * lowspace thresholds are smaller than MAXEXTLEN.
> + */
> + while (alloc_blocks >= freesp)
> + alloc_blocks >>= 4;
> }
>
> if (alloc_blocks < mp->m_writeio_blocks)
>
More information about the xfs
mailing list