• Bob Peterson's avatar
    GFS2: deallocation performance patch · 4c16c36a
    Bob Peterson authored
    This patch is a performance improvement to GFS2's dealloc code.
    Rather than update the quota file and statfs file for every
    single block that's stripped off in unlink function do_strip,
    this patch keeps track and updates them once for every layer
    that's stripped.  This is done entirely inside the existing
    transaction, so there should be no risk of corruption.
    The other functions that deallocate blocks will be unaffected
    because they are using wrapper functions that do the same
    thing that they do today.
    I tested this code on my roth cluster by creating 200
    files in a directory, each of which is 100MB, then on
    four nodes, I simultaneously deleted the files, thus competing
    for GFS2 resources (but different files).  The commands
    I used were:
    [root@roth-01]# time for i in `seq 1 4 200` ; do rm /mnt/gfs2/bigdir/gfs2.$i; done
    [root@roth-02]# time for i in `seq 2 4 200` ; do rm /mnt/gfs2/bigdir/gfs2.$i; done
    [root@roth-03]# time for i in `seq 3 4 200` ; do rm /mnt/gfs2/bigdir/gfs2.$i; done
    [root@roth-05]# time for i in `seq 4 4 200` ; do rm /mnt/gfs2/bigdir/gfs2.$i; done
    The performance increase was significant:
                 roth-01     roth-02     roth-03     roth-05
                 ---------   ---------   ---------   ---------
    old: real    0m34.027    0m25.021s   0m23.906s   0m35.646s
    new: real    0m22.379s   0m24.362s   0m24.133s   0m18.562s
    Total time spent deleting:
    old: 118.6s
    new:  89.4
    For this particular case, this showed a 25% performance increase for
    GFS2 unlinks.
    Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
    Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>