[Top] [All Lists]

RE: [FAQ] XFS speculative preallocation

To: Brian Foster <bfoster@xxxxxxxxxx>, "xfs@xxxxxxxxxxx" <xfs@xxxxxxxxxxx>
Subject: RE: [FAQ] XFS speculative preallocation
From: Shaun Gosse <sgosse@xxxxxxx>
Date: Fri, 21 Mar 2014 16:54:32 +0000
Accept-language: en-US
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <20140321162920.GA3087@xxxxxxxxxxxxxx>
References: <20140321162920.GA3087@xxxxxxxxxxxxxx>
Thread-index: AQHPRSK8afI9uR9/hESmv87xWTG+sprrwbKw
Thread-topic: [FAQ] XFS speculative preallocation

FWIW, from my perspective as a newcomer to XFS that is quite clear and 
understandable and informative. Looks like a valuable addition.

I've got no idea how to get write access on the wiki personally, but hopefully 
that answer will arrive for you 'soon(tm)'.


-----Original Message-----
From: xfs-bounces@xxxxxxxxxxx [mailto:xfs-bounces@xxxxxxxxxxx] On Behalf Of 
Brian Foster
Sent: Friday, March 21, 2014 11:29 AM
To: xfs@xxxxxxxxxxx
Subject: [FAQ] XFS speculative preallocation

Hi all,

Eric had suggested we add an FAQ entry for speculative preallocation since it 
seems to be a common question, so I offered to write something up. I started 
with a single entry but split it into a couple Q's when it turned into TL;DR 
fodder. ;)

The text is embedded below for review. Thoughts on the questions or content is 
appreciated. Also, once folks are Ok with this... how does one gain edit access 
to the wiki?



Q: Why do files on XFS use more data blocks than expected?


The XFS speculative preallocation algorithm allocates extra blocks beyond end 
of file (EOF) to combat fragmentation under parallel sequential write 
workloads. This post-EOF block allocation is included in 'st_blocks' counts via 
stat() system calls and is accounted as globally allocated space by the 
filesystem. This is reported by various userspace utilities (stat, du, df, ls) 
and thus provides a common source of confusion for administrators. Post-EOF 
blocks are temporary in most situations and are usually reclaimed via several 
possible mechanisms in XFS.

See the FAQ entry on speculative preallocation for details.

Q: What is speculative preallocation? How can I manage it?


XFS speculatively preallocates post-EOF blocks on file extending writes in 
anticipation of future extending writes. The size of a preallocation is dynamic 
and depends on the size of the previous extent in the file (starting from 0 
again if the write extends past a hole). As files grow larger, so do the size 
of preallocations. Speculative preallocation is not enabled for files smaller 
than a minimum size (64k by default, but can vary depending on filesystem 
geometry and/or mount options).
Preallocations are capped at a maximum of 8GB on 4k block filesystems.
Preallocation is throttled automatically as the filesystem approaches low free 
space conditions or other allocation limits on a file (such as a quota).
In most cases, speculative preallocation is automatically reclaimed when a file 
is closed. The preallocation may persist after file close if an open, write, 
close pattern is repeated on a file. In this scenario, post-EOF preallocation 
is trimmed once the inode is reclaimed from cache or the filesystem unmounted.

Linux 3.8 (and later) includes a scanner to perform background trimming of 
files with lingering post-EOF preallocations. The scanner bypasses files that 
have been recently modified to not interfere with ongoing writes. A 5 minute 
scan interval is used by default and can be adjusted via the following file 
(value in seconds):


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. Preallocated space can also be encoded permanently in 
situations where file size is extended beyond a range of post-EOF blocks (i.e., 
via truncate). Otherwise, preallocated blocks are reclaimed on file close, 
inode reclaim, unmount or in the background once file write activity subsides.

Finally, the XFS block allocation algorithm can be configured to use a fixed 
allocation size with the 'allocsize=' mount option. Note that speculative 
preallocation does not occur when a fixed allocation size is set and thus 
increases the potential for fragmentation via parallel writes.

xfs mailing list

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