Skip to content
  • Andrey Sidorov's avatar
    ext4: speed up truncate/unlink by not using bforget() unless needed · 18888cf0
    Andrey Sidorov authored
    
    
    Do not iterate over data blocks scanning for bh's to forget as they're
    never exist. This improves time taken by unlink / truncate syscall.
    Tested by continuously truncating file that is being written by dd.
    Another test is rm -rf of linux tree while tar unpacks it. With
    ordered data mode condition unlikely(!tbh) was always met in
    ext4_free_blocks. With journal data mode tbh was found only few times,
    so optimisation is also possible.
    
    Unlinking fallocated 60G file after doing sync && echo 3 >
    /proc/sys/vm/drop_caches && time rm --help
    
    X86 before (linux 3.6-rc4):
    # time rm -f test1
    real    0m2.710s
    user    0m0.000s
    sys     0m1.530s
    
    X86 after:
    # time rm -f test1
    real    0m0.644s
    user    0m0.003s
    sys     0m0.060s
    
    MIPS before (linux 2.6.37):
    # time rm -f test1
    real    0m 4.93s
    user    0m 0.00s
    sys     0m 4.61s
    
    MIPS after:
    # time rm -f test1
    real    0m 0.16s
    user    0m 0.00s
    sys     0m 0.06s
    
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Signed-off-by: default avatarAndrey Sidorov <qrxd43@motorola.com>
    18888cf0