xfs
[Top] [All Lists]

Re: [FAQ] XFS speculative preallocation

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [FAQ] XFS speculative preallocation
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Sat, 22 Mar 2014 10:18:01 +1100
Cc: Florian Weimer <fw@xxxxxxxxxxxxx>, Brian Foster <bfoster@xxxxxxxxxx>, xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <532CC79A.8050908@xxxxxxxxxxx>
References: <20140321162920.GA3087@xxxxxxxxxxxxxx> <87eh1vuxam.fsf@xxxxxxxxxxxxxxxxx> <20140321231032.GC1389@dastard> <532CC79A.8050908@xxxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Fri, Mar 21, 2014 at 06:13:30PM -0500, Eric Sandeen wrote:
> On 3/21/14, 6:10 PM, Dave Chinner wrote:
> > On Fri, Mar 21, 2014 at 09:11:29PM +0100, Florian Weimer wrote:
> >> * Brian Foster:
> >>
> >>> Although speculative preallocation can lead to reports of excess space
> >>> usage, the preallocated space is not permanent unless explicitly made so
> >>> via fallocate or a similar interface.
> >>
> >> How does an explicit allocation with posix_fallocate interact with
> >> speculative preallocation?  Does it disable it?
> > 
> > fallocate is permanent preallocation using unwritten extents.
> > Speculative preallocation is an extension of delayed allocation that
> > is done when extending the file and the EOF falls into a hole. If
> > there is unwritten extents beyond EOF, speulative preallocation is
> > not performed.
> > 
> >> I see rather dramatic fragmentation of the systemd journal when it is
> >> stored on XFS, and it calls posix_fallocate before writing data to the
> >> file.
> > 
> > There's your problem - systemd is preventing delayed allocation, and
> > so it fragmenting the file itself with it's write pattern.
> > Basically, that's a bug in systemd, and not something the filesystem
> > can avoid because userspace is directly controlling block
> > allocation.
> 
> hohum, I guess we should look into this.
> 
> OTOH: nothing wrong with calling posix_fallocate() if you need the space
> guarantees it provides for proper operation...

Right, but it's something that the filesystem has no real control
over. We've been asked to allocate blocks immediately by
fallocate(), and so we get what we get....

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>