• Vivek Haldar's avatar
    ext4: do not normalize block requests from fallocate() · 556b27ab
    Vivek Haldar authored
    Currently, an fallocate request of size slightly larger than a power of
    2 is turned into two block requests, each a power of 2, with the extra
    blocks pre-allocated for future use. When an application calls
    fallocate, it already has an idea about how large the file may grow so
    there is usually little benefit to reserve extra blocks on the
    preallocation list. This reduces disk fragmentation.
    
    Tested: fsstress. Also verified manually that fallocat'ed files are
    contiguously laid out with this change (whereas without it they begin at
    power-of-2 boundaries, leaving blocks in between). CPU usage of
    fallocate is not appreciably higher.  In a tight fallocate loop, CPU
    usage hovers between 5%-8% with this change, and 5%-7% without it.
    
    Using a simulated file system aging program which the file system to
    70%, the percentage of free extents larger than 8MB (as measured by
    e2freefrag) increased from 38.8% without this change, to 69.4% with
    this change.
    Signed-off-by: default avatarVivek Haldar <haldar@google.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    556b27ab
ext4.h 77.5 KB