xfs: increase prealloc size to double that of the previous extent
authorBrian Foster <bfoster@redhat.com>
Tue, 19 Feb 2013 15:24:41 +0000 (10:24 -0500)
committerBen Myers <bpm@sgi.com>
Thu, 7 Mar 2013 18:28:25 +0000 (12:28 -0600)
The updated speculative preallocation algorithm for handling sparse
files can becomes less effective in situations with a high number of
concurrent, sequential writers. The number of writers and amount of
available RAM affect the writeback bandwidth slicing algorithm,
which in turn affects the block allocation pattern of XFS. For
example, running 32 sequential writers on a system with 32GB RAM,
preallocs become fixed at a value of around 128MB (instead of
steadily increasing to the 8GB maximum as sequential writes
proceed).

Update the speculative prealloc heuristic to base the size of the
next prealloc on double the size of the preceding extent. This
preserves the original aggressive speculative preallocation
behavior and continues to accomodate sparse files at a slight cost
of increasing the size of preallocated data regions following holes
of sparse files.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_iomap.c

index b0b0f448e8434a08ccaf6fc4f75b9b23a2ad6c51..5cfc0992bd11580cfe9f648e775ca12d9a4d5968 100644 (file)
@@ -362,7 +362,7 @@ xfs_iomap_eof_prealloc_initial_size(
        if (imap[0].br_startblock == HOLESTARTBLOCK)
                return 0;
        if (imap[0].br_blockcount <= (MAXEXTLEN >> 1))
-               return imap[0].br_blockcount;
+               return imap[0].br_blockcount << 1;
        return XFS_B_TO_FSB(mp, offset);
 }