• F
    Btrfs: faster and more efficient extent map insertion · 32193c14
    Filipe David Borba Manana 提交于
    Before this change, adding an extent map to the extent map tree of an
    inode required 2 tree nevigations:
    
    1) doing a tree navigation to search for an existing extent map starting
       at the same offset or an extent map that overlaps the extent map we
       want to insert;
    
    2) Another tree navigation to add the extent map to the tree (if the
       former tree search didn't found anything).
    
    This change just merges these 2 steps into a single one.
    While running first few btrfs xfstests I had noticed these trees easily
    had a few hundred elements, and then with the following sysbench test it
    reached over 1100 elements very often.
    
    Test:
    
      sysbench --test=fileio --file-num=32 --file-total-size=10G \
        --file-test-mode=seqwr --num-threads=512 --file-block-size=8192 \
        --max-requests=1000000 --file-io-mode=sync [prepare|run]
    
    (fs created with mkfs.btrfs -l 4096 -f /dev/sdb3 before each sysbench
    prepare phase)
    
    Before this patch:
    
    run 1 - 41.894Mb/sec
    run 2 - 40.527Mb/sec
    run 3 - 40.922Mb/sec
    run 4 - 49.433Mb/sec
    run 5 - 40.959Mb/sec
    
    average - 42.75Mb/sec
    
    After this patch:
    
    run 1 - 48.036Mb/sec
    run 2 - 50.21Mb/sec
    run 3 - 50.929Mb/sec
    run 4 - 46.881Mb/sec
    run 5 - 53.192Mb/sec
    
    average - 49.85Mb/sec
    Signed-off-by: NFilipe David Borba Manana <fdmanana@gmail.com>
    Signed-off-by: NJosef Bacik <jbacik@fb.com>
    Signed-off-by: NChris Mason <clm@fb.com>
    32193c14
extent_map.c 11.0 KB