• T
    ext4: Speed up FITRIM by recording flags in ext4_group_info · 3d56b8d2
    Tao Ma 提交于
    In ext4, when FITRIM is called every time, we iterate all the
    groups and do trim one by one. It is a bit time wasting if the
    group has been trimmed and there is no change since the last
    trim.
    
    So this patch adds a new flag in ext4_group_info->bb_state to
    indicate that the group has been trimmed, and it will be cleared
    if some blocks is freed(in release_blocks_on_commit). Another
    trim_minlen is added in ext4_sb_info to record the last minlen
    we use to trim the volume, so that if the caller provide a small
    one, we will go on the trim regardless of the bb_state.
    
    A simple test with my intel x25m ssd:
    df -h shows:
    /dev/sdb1              40G   21G   17G  56% /mnt/ext4
    Block size:               4096
    
    run the FITRIM with the following parameter:
    range.start = 0;
    range.len = UINT64_MAX;
    range.minlen = 1048576;
    
    without the patch:
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m5.505s
    user	0m0.000s
    sys	0m1.224s
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m5.359s
    user	0m0.000s
    sys	0m1.178s
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m5.228s
    user	0m0.000s
    sys	0m1.151s
    
    with the patch:
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m5.625s
    user	0m0.000s
    sys	0m1.269s
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m0.002s
    user	0m0.000s
    sys	0m0.001s
    [root@boyu-tm linux-2.6]# time ./ftrim /mnt/ext4/a
    real	0m0.002s
    user	0m0.000s
    sys	0m0.001s
    
    A big improvement for the 2nd and 3rd run.
    
    Even after I delete some big image files, it is still much
    faster than iterating the whole disk.
    
    [root@boyu-tm test]# time ./ftrim /mnt/ext4/a
    real	0m1.217s
    user	0m0.000s
    sys	0m0.196s
    
    Cc: Lukas Czerner <lczerner@redhat.com>
    Reviewed-by: NAndreas Dilger <adilger.kernel@dilger.ca>
    Signed-off-by: NTao Ma <boyu.mt@taobao.com>
    Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
    3d56b8d2
ext4.h 78.9 KB