• Filipe Manana's avatar
    Btrfs: less fs tree lock contention when using autodefrag · f094c9bd
    Filipe Manana authored
    When finding new extents during an autodefrag, don't do so many fs tree
    lookups to find an extent with a size smaller then the target treshold.
    Instead, after each fs tree forward search immediately unlock upper
    levels and process the entire leaf while holding a read lock on the leaf,
    since our leaf processing is very fast.
    This reduces lock contention, allowing for higher concurrency when other
    tasks want to write/update items related to other inodes in the fs tree,
    as we're not holding read locks on upper tree levels while processing the
    leaf and we do less tree searches.
    
    Test:
    
        sysbench --test=fileio --file-num=512 --file-total-size=16G \
           --file-test-mode=rndrw --num-threads=32 --file-block-size=32768 \
           --file-rw-ratio=3 --file-io-mode=sync --max-time=1800 \
           --max-requests=10000000000 [prepare|run]
    
    (fileystem mounted with -o autodefrag, averages of 5 runs)
    
    Before this change: 58.852Mb/sec throughtput, read 77.589Gb, written 25.863Gb
    After this change:  63.034Mb/sec throughtput, read 83.102Gb, written 27.701Gb
    
    Test machine: quad core intel i5-3570K, 32Gb of RAM, SSD.
    Signed-off-by: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    f094c9bd
ioctl.c 118 KB