aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/segment.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk.kim@samsung.com>2014-01-07 20:09:51 -0500
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2014-01-07 21:16:20 -0500
commitfb5566da9181d33ecdd9892e44f90320e7d4cc9f (patch)
treed3b1656ec7e454ea2d831f673a538f2f78d1f85a /fs/f2fs/segment.c
parent04a17fb17fafada39f96bfb41ceb2dc1c11b2af6 (diff)
f2fs: improve write performance under frequent fsync calls
When considering a bunch of data writes with very frequent fsync calls, we are able to think the following performance regression. N: Node IO, D: Data IO, IO scheduler: cfq Issue pending IOs D1 D2 D3 D4 D1 D2 D3 D4 N1 D2 D3 D4 N1 N2 N1 D3 D4 N2 D1 --> N1 can be selected by cfq becase of the same priority of N and D. Then D3 and D4 would be delayed, resuling in performance degradation. So, when processing the fsync call, it'd better give higher priority to data IOs than node IOs by assigning WRITE and WRITE_SYNC respectively. This patch improves the random wirte performance with frequent fsync calls by up to 10%. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/segment.c')
-rw-r--r--fs/f2fs/segment.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 555ae7693ea0..5f84639354e3 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -924,16 +924,12 @@ void write_meta_page(struct f2fs_sb_info *sbi, struct page *page)
924} 924}
925 925
926void write_node_page(struct f2fs_sb_info *sbi, struct page *page, 926void write_node_page(struct f2fs_sb_info *sbi, struct page *page,
927 struct f2fs_io_info *fio,
927 unsigned int nid, block_t old_blkaddr, block_t *new_blkaddr) 928 unsigned int nid, block_t old_blkaddr, block_t *new_blkaddr)
928{ 929{
929 struct f2fs_summary sum; 930 struct f2fs_summary sum;
930 struct f2fs_io_info fio = {
931 .type = NODE,
932 .rw = WRITE_SYNC,
933 };
934
935 set_summary(&sum, nid, 0, 0); 931 set_summary(&sum, nid, 0, 0);
936 do_write_page(sbi, page, old_blkaddr, new_blkaddr, &sum, &fio); 932 do_write_page(sbi, page, old_blkaddr, new_blkaddr, &sum, fio);
937} 933}
938 934
939void write_data_page(struct page *page, struct dnode_of_data *dn, 935void write_data_page(struct page *page, struct dnode_of_data *dn,