android_kernel_samsung_univ.../fs
liubo 8e531cdfeb Btrfs: do not flush csum items of unchanged file data during treelog
The current code relogs the entire inode every time during fsync log,
and it is much better suited to small files rather than large ones.

During my performance test, the fsync performace of large files sucks,
and we can ascribe this to the tremendous amount of csum infos of the
large ones, cause we have to flush all of these csum infos into log trees
even when there are only _one_ change in the whole file data.  Apparently,
to optimize fsync, we need to create a filter to skip the unnecessary csum
ones, that is, the corresponding file data remains unchanged before this fsync.

Here I have some test results to show, I use sysbench to do "random write + fsync".

===
sysbench --test=fileio --num-threads=1 --file-num=2 --file-block-size=4K --file-total-size=8G --file-test-mode=rndwr --file-io-mode=sync --file-extra-flags=  [prepare, run]
===

Sysbench args:
  - Number of threads: 1
  - Extra file open flags: 0
  - 2 files, 4Gb each
  - Block size 4Kb
  - Number of random requests for random IO: 10000
  - Read/Write ratio for combined random IO test: 1.50
  - Periodic FSYNC enabled, calling fsync() each 100 requests.
  - Calling fsync() at the end of test, Enabled.
  - Using synchronous I/O mode
  - Doing random write test

Sysbench results:
===
   Operations performed:  0 Read, 10000 Write, 200 Other = 10200 Total
   Read 0b  Written 39.062Mb  Total transferred 39.062Mb
===
a) without patch:  (*SPEED* : 451.01Kb/sec)
   112.75 Requests/sec executed

b) with patch:     (*SPEED* : 4.7533Mb/sec)
   1216.84 Requests/sec executed

PS: I've made a _sub transid_ stuff patch, but it does not perform as effectively as this patch,
and I'm wanderring where the problem is and trying to improve it more.

Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2011-05-23 10:13:16 -04:00
..
9p
adfs
affs
afs
autofs4
befs
bfs
btrfs Btrfs: do not flush csum items of unchanged file data during treelog 2011-05-23 10:13:16 -04:00
cachefiles
ceph ceph: do not use i_wrbuffer_ref as refcount for Fb cap 2011-05-11 10:44:48 -07:00
cifs cifs: fix cifsConvertToUCS() for the mapchars case 2011-05-17 20:54:04 +00:00
coda
configfs configfs: Fix race between configfs_readdir() and configfs_d_iput() 2011-05-18 04:08:16 -07:00
cramfs
debugfs
devpts
dlm
ecryptfs
efs
exofs
exportfs
ext2
ext3
ext4
fat
freevxfs
fscache
fuse fuse: fix oops in revalidate when called with NULL nameidata 2011-05-10 17:35:58 +02:00
gfs2
hfs
hfsplus
hostfs
hpfs HPFS: Remove unused variable 2011-05-09 09:04:24 -07:00
hppfs
hugetlbfs
isofs
jbd
jbd2
jffs2 Fix common misspellings 2011-03-31 11:26:23 -03:00
jfs
lockd
logfs logfs: initialize superblock entries earlier 2011-05-03 16:10:25 -07:00
minix Merge branch 'for-2.6.39/core' of git://git.kernel.dk/linux-2.6-block 2011-03-24 10:16:26 -07:00
ncpfs
nfs NFSv4.1: Ensure that layoutget uses the correct gfp modes 2011-05-11 22:52:13 -04:00
nfs_common
nfsd
nilfs2 nilfs2: fix infinite loop in nilfs_palloc_freev function 2011-05-10 22:19:50 +09:00
nls
notify
ntfs
ocfs2 ocfs2/dlm: Target node death during resource migration leads to thread spin 2011-05-13 11:27:30 -07:00
omfs
openpromfs
partitions Validate size of EFI GUID partition entries. 2011-05-06 07:46:37 -07:00
proc Don't lock guardpage if the stack is growing up 2011-05-09 16:22:07 -07:00
pstore
qnx4
quota
ramfs
reiserfs
romfs
squashfs
sysfs
sysv
ubifs UBIFS: seek journal heads to the latest bud in replay 2011-05-02 19:23:48 +03:00
udf
ufs
xfs xfs: fix race condition in AIL push trigger 2011-05-09 18:35:04 -05:00
aio.c
anon_inodes.c sanitize vfsmount refcounting changes 2011-01-16 13:47:07 -05:00
attr.c
bad_inode.c
binfmt_aout.c
binfmt_elf_fdpic.c
binfmt_elf.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c convert get_sb_single() users 2010-10-29 04:16:28 -04:00
binfmt_script.c
binfmt_som.c
bio-integrity.c
bio.c
block_dev.c block: rescan partitions on invalidated devices on -ENOMEDIA too 2011-04-29 10:17:26 +02:00
buffer.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 2011-03-24 19:01:30 -07:00
char_dev.c
compat_binfmt_elf.c
compat_ioctl.c
compat.c
dcache.c
dcookies.c
direct-io.c
drop_caches.c
eventfd.c
eventpoll.c Fix common misspellings 2011-03-31 11:26:23 -03:00
exec.c
fcntl.c
fhandle.c
fifo.c
file_table.c
file.c vfs: avoid large kmalloc()s for the fdtable 2011-04-28 11:28:20 -07:00
filesystems.c
fs_struct.c
fs-writeback.c
generic_acl.c
inode.c
internal.h
ioctl.c
ioprio.c
Kconfig
Kconfig.binfmt
libfs.c
locks.c
Makefile
mbcache.c
mpage.c
namei.c vfs: micro-optimize acl_permission_check() 2011-05-13 11:51:01 -07:00
namespace.c
nfsctl.c
no-block.c
open.c
pipe.c
pnode.c
pnode.h
posix_acl.c
read_write.c
read_write.h
readdir.c vfs: fix warning: 'dirent' is used uninitialized in this function 2010-08-09 20:45:05 -07:00
select.c
seq_file.c
signalfd.c
splice.c
stack.c
stat.c
statfs.c
super.c
sync.c
timerfd.c
utimes.c
xattr_acl.c
xattr.c