mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-24 17:29:05 +00:00
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
Signed-off-by: Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Felix Blyakher <felixb@sgi.com>
|
||
|---|---|---|
| .. | ||
| kmem.c | ||
| kmem.h | ||
| mrlock.h | ||
| sv.h | ||
| time.h | ||
| xfs_aops.c | ||
| xfs_aops.h | ||
| xfs_buf.c | ||
| xfs_buf.h | ||
| xfs_cred.h | ||
| xfs_dmapi_priv.h | ||
| xfs_export.c | ||
| xfs_export.h | ||
| xfs_file.c | ||
| xfs_fs_subr.c | ||
| xfs_fs_subr.h | ||
| xfs_globals.c | ||
| xfs_globals.h | ||
| xfs_ioctl32.c | ||
| xfs_ioctl32.h | ||
| xfs_ioctl.c | ||
| xfs_ioctl.h | ||
| xfs_iops.c | ||
| xfs_iops.h | ||
| xfs_linux.h | ||
| xfs_lrw.c | ||
| xfs_lrw.h | ||
| xfs_quotaops.c | ||
| xfs_stats.c | ||
| xfs_stats.h | ||
| xfs_super.c | ||
| xfs_super.h | ||
| xfs_sync.c | ||
| xfs_sync.h | ||
| xfs_sysctl.c | ||
| xfs_sysctl.h | ||
| xfs_version.h | ||
| xfs_vnode.h | ||
| xfs_xattr.c | ||