ocfs2: Pagecache usage optimization on ocfs2
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. Signed-off-by: Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
committed by
Mark Fasheh
parent
6ca497a83e
commit
1fca3a05ef
@@ -1956,15 +1956,16 @@ static int ocfs2_write_end(struct file *file, struct address_space *mapping,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const struct address_space_operations ocfs2_aops = {
|
const struct address_space_operations ocfs2_aops = {
|
||||||
.readpage = ocfs2_readpage,
|
.readpage = ocfs2_readpage,
|
||||||
.readpages = ocfs2_readpages,
|
.readpages = ocfs2_readpages,
|
||||||
.writepage = ocfs2_writepage,
|
.writepage = ocfs2_writepage,
|
||||||
.write_begin = ocfs2_write_begin,
|
.write_begin = ocfs2_write_begin,
|
||||||
.write_end = ocfs2_write_end,
|
.write_end = ocfs2_write_end,
|
||||||
.bmap = ocfs2_bmap,
|
.bmap = ocfs2_bmap,
|
||||||
.sync_page = block_sync_page,
|
.sync_page = block_sync_page,
|
||||||
.direct_IO = ocfs2_direct_IO,
|
.direct_IO = ocfs2_direct_IO,
|
||||||
.invalidatepage = ocfs2_invalidatepage,
|
.invalidatepage = ocfs2_invalidatepage,
|
||||||
.releasepage = ocfs2_releasepage,
|
.releasepage = ocfs2_releasepage,
|
||||||
.migratepage = buffer_migrate_page,
|
.migratepage = buffer_migrate_page,
|
||||||
|
.is_partially_uptodate = block_is_partially_uptodate,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user