kernel_optimize_test/fs/gfs2
Bob Peterson 4c16c36ad6 GFS2: deallocation performance patch
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: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
2011-02-24 12:13:48 +00:00
..
acl.c GFS2: Post-VFS scale update for RCU path walk 2011-01-21 09:39:24 +00:00
acl.h fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
aops.c fs: kill block_prepare_write 2010-10-25 21:18:20 -04:00
bmap.c GFS2: deallocation performance patch 2011-02-24 12:13:48 +00:00
bmap.h GFS2: New truncate sequence 2010-09-20 11:18:16 +01:00
dentry.c fs: rcu-walk aware d_revalidate method 2011-01-07 17:50:29 +11:00
dir.c GFS2: Make . and .. qstrs constant 2010-09-20 11:21:09 +01:00
dir.h GFS2: Make . and .. qstrs constant 2010-09-20 11:21:09 +01:00
export.c switch gfs2, close races 2011-01-12 20:02:46 -05:00
file.c GFS2: Improve cluster mmap scalability 2011-02-02 14:48:10 +00:00
gfs2.h
glock.c GFS2: Fix glock queue trace point 2011-01-31 09:38:12 +00:00
glock.h GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
glops.c GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
glops.h
incore.h GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
inode.c GFS2: Fix error path in gfs2_lookup_by_inum() 2011-01-18 14:49:08 +00:00
inode.h GFS2: Fix error path in gfs2_lookup_by_inum() 2011-01-18 14:49:08 +00:00
Kconfig GFS2: No longer experimental 2010-09-20 11:18:46 +01:00
lock_dlm.c GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
log.c Merge branch 'v2.6.36-rc8' into for-2.6.37/barrier 2010-10-19 09:13:04 +02:00
log.h GFS2: Rework reclaiming unlinked dinodes 2010-05-21 16:11:36 +01:00
lops.c GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
lops.h
main.c GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
Makefile
meta_io.c writeback: remove nonblocking/encountered_congestion references 2010-10-26 16:52:05 -07:00
meta_io.h
ops_fstype.c GFS2: Use RCU for glock hash table 2011-01-21 09:39:08 +00:00
ops_inode.c GFS2: Post-VFS scale update for RCU path walk 2011-01-21 09:39:24 +00:00
quota.c GFS2: panics on quotacheck update 2011-02-07 20:00:44 +00:00
quota.h mm: add context argument to shrinker callback 2010-07-19 14:56:17 +10:00
recovery.c GFS2: Fix spectator umount issue 2010-09-29 14:20:52 +01:00
recovery.h gfs2: use workqueue instead of slow-work 2010-07-23 13:14:25 +02:00
rgrp.c GFS2: deallocation performance patch 2011-02-24 12:13:48 +00:00
rgrp.h GFS2: deallocation performance patch 2011-02-24 12:13:48 +00:00
super.c GFS2: remove iopen glocks from cache on failed deletes 2011-01-18 14:28:29 +00:00
super.h gfs: constify xattr_handler 2010-05-21 18:31:20 -04:00
sys.c GFS2: Fix type mapping for demote_rq interface 2010-10-06 09:58:44 +01:00
sys.h
trace_gfs2.h GFS2: Don't enforce min hold time when two demotes occur in rapid succession 2010-09-20 11:19:50 +01:00
trans.c GFS2: Various gfs2_logd improvements 2010-05-05 09:39:18 +01:00
trans.h GFS2: reserve more blocks for transactions 2010-09-28 09:44:24 +01:00
util.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
util.h
xattr.c GFS2: Clean up duplicated setattr code 2010-11-30 10:30:19 +00:00
xattr.h