For XFS, in normal operation, an extent is only allocated when
data has to be written to disk. This is called delayed
allocation. If we are extending a file by 50MB - that space is
deducted from the total free space on the filesystem, but no
decision on where to place that data is made until we start
writing it out - due to memory pressure or the kernel
automatically starts writing the dirty pages out (the sync once
every 5 seconds on linux).
When an extent needs to be allocated, XFS looks it up in one of
two b+trees it has of free space. There is one sorted by starting
block number (so you can search for “an extent near here”) and
one by size (so you can search for “an extent of x size”).
The ideal situation being that you want as large an extent as
possible as close to the tail end of the file as possible (i.e.
just making the current extent bigger).
The worst-case scenario is having to allocate extents to …
[Read more]