• Eric Gouriou's avatar
    ext4: optimize ext4_ext_convert_to_initialized() · 6f91bc5f
    Eric Gouriou authored
    This patch introduces a fast path in ext4_ext_convert_to_initialized()
    for the case when the conversion can be performed by transferring
    the newly initialized blocks from the uninitialized extent into
    an adjacent initialized extent. Doing so removes the expensive
    invocations of memmove() which occur during extent insertion and
    the subsequent merge.
    
    In practice this should be the common case for clients performing
    append writes into files pre-allocated via
    fallocate(FALLOC_FL_KEEP_SIZE). In such a workload performed via
    direct IO and when using a suboptimal implementation of memmove()
    (x86_64 prior to the 2.6.39 rewrite), this patch reduces kernel CPU
    consumption by 32%.
    
    Two new trace points are added to ext4_ext_convert_to_initialized()
    to offer visibility into its operations. No exit trace point has
    been added due to the multiplicity of return points. This can be
    revisited once the upstream cleanup is backported.
    Signed-off-by: default avatarEric Gouriou <egouriou@google.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    6f91bc5f
extents.c 134 KB