• Johannes Thumshirn's avatar
    btrfs: reduce kmap_atomic time for checksumming · 443c8e2a
    Johannes Thumshirn authored
    Since commit c40a3d38 ("Btrfs: Compute and look up csums based on
    sectorsized blocks") we do a kmap_atomic() on the contents of a bvec.
    The code before c40a3d38 had the kmap region just around the
    checksumming too.
    
    kmap_atomic() in turn does a preempt_disable() and pagefault_disable(),
    so we shouldn't map the data for too long. Reduce the time the bvec's
    page is mapped to when we actually need it.
    
    Performance wise it doesn't seem to make a huge difference with a 2 vcpu VM
    on a /dev/zram device:
    
           vanilla      patched      delta
    write  17.4MiB/s    17.8MiB/s	+0.4MiB/s (+2%)
    read   40.6MiB/s    41.5MiB/s   +0.9MiB/s (+2%)
    
    The following fio job profile was used in the comparision:
    
    [global]
    ioengine=libaio
    direct=1
    sync=1
    norandommap
    time_based
    runtime=10m
    size=100m
    group_reporting
    numjobs=2
    
    [test]
    filename=/mnt/test/fio
    rw=randrw
    rwmixread=70
    Signed-off-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    443c8e2a
file-item.c 26.4 KB