[PATCH] XFS: Pagecache usage optimization on XFS
Hisashi Hifumi
hifumi.hisashi at oss.ntt.co.jp
Tue Mar 3 20:50:06 CST 2009
Hi.
I introduced "is_partially_uptodate" aops for XFS.
A page can have multiple buffers and even if a page is not uptodate, some buffers
can be uptodate on pagesize != blocksize environment.
This aops checks that all buffers which correspond to a part of a file
that we want to read are uptodate. If so, we do not have to issue actual
read IO to HDD even if a page is not uptodate because the portion we
want to read are uptodate.
"block_is_partially_uptodate" function is already used by ext2/3/4.
With the following patch random read/write mixed workloads or random read after
random write workloads can be optimized and we can get performance improvement.
I did a performance test using the sysbench.
#sysbench --num-threads=4 --max-requests=100000 --test=fileio --file-num=1
--file-block-size=8K --file-total-size=1G --file-test-mode=rndrw --file-fsync-freq=0
--file-rw-ratio=0.5 run
-2.6.29-rc6
Test execution summary:
total time: 123.8645s
total number of events: 100000
total time taken by event execution: 442.4994
per-request statistics:
min: 0.0000s
avg: 0.0044s
max: 0.3387s
approx. 95 percentile: 0.0118s
-2.6.29-rc6-patched
Test execution summary:
total time: 108.0757s
total number of events: 100000
total time taken by event execution: 417.7505
per-request statistics:
min: 0.0000s
avg: 0.0042s
max: 0.3217s
approx. 95 percentile: 0.0118s
arch: ia64
pagesize: 16k
blocksize: 4k
Please merge following patch.
Thanks.
Signed-off-by: Hisashi Hifumi <hifumi.hisashi at oss.ntt.co.jp>
diff -Nrup linux-2.6.29-rc6.org/fs/xfs/linux-2.6/xfs_aops.c linux-2.6.29-rc6.xfs/fs/xfs/linux-2.6/xfs_aops.c
--- linux-2.6.29-rc6.org/fs/xfs/linux-2.6/xfs_aops.c 2009-03-02 09:26:08.000000000 +0900
+++ linux-2.6.29-rc6.xfs/fs/xfs/linux-2.6/xfs_aops.c 2009-03-04 10:26:21.000000000 +0900
@@ -1623,4 +1623,5 @@ const struct address_space_operations xf
.bmap = xfs_vm_bmap,
.direct_IO = xfs_vm_direct_IO,
.migratepage = buffer_migrate_page,
+ .is_partially_uptodate = block_is_partially_uptodate,
};
More information about the xfs
mailing list