linux/fs/f2fs
Jaegeuk Kim 423e95ccbe f2fs: merge more bios of node block writes
Previously, we experience bio traces as follows when running simple sequential
write test.

 f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500104928, size = 4K
 f2fs_do_submit_bio: type = NODE, io = no sync, sector = 499922208, size = 368K
 f2fs_do_submit_bio: type = NODE, io = no sync, sector = 499914752, size = 140K

 -> total 512K

The first one is to write an indirect node block, and the others are to write
direct node blocks.

The reason why there are two separate bios for direct node blocks is:
0. initial state
------------------    ------------------
|                |    |xxxxxxxx        |
------------------    ------------------

1. write 368K
------------------    ------------------
|                |    |xxxxxxxxWWWWWWWW|
------------------    ------------------

2. write 140K
------------------    ------------------
|WWWWWWW         |    |xxxxxxxxWWWWWWWW|
------------------    ------------------

This is because f2fs_write_node_pages tries to write just 512K totally, so that
we can lose the chance to merge more bios nicely.

After this patch is applied, we can get the following bio traces.

  f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500103168, size = 8K
  f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500111368, size = 4K
  f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500107272, size = 512K
  f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500108296, size = 512K
  f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500109320, size = 500K

And finally, we can improve the sequential write performance,
    from 458.775 MB/s to 479.945 MB/s on SSD.

Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
2013-09-05 10:17:19 +09:00
..
acl.c f2fs: support xattr security labels 2013-06-11 16:01:03 +09:00
acl.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
checkpoint.c f2fs: introduce cur_cp_version function to reduce code size 2013-08-09 15:25:37 +09:00
data.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
debug.c f2fs: use seq_puts()/seq_putc() rather than seq_printf() where possible 2013-07-30 15:17:03 +09:00
dir.c f2fs: fix handling orphan inodes 2013-07-30 15:17:03 +09:00
f2fs.h f2fs: support the inline xattrs 2013-08-26 20:15:23 +09:00
file.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
gc.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
gc.h f2fs: add sysfs entries to select the gc policy 2013-08-06 22:00:18 +09:00
hash.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
inode.c f2fs: add flags for inline xattrs 2013-08-26 20:02:12 +09:00
Kconfig f2fs: support xattr security labels 2013-06-11 16:01:03 +09:00
Makefile f2fs: update Kconfig and Makefile 2012-12-11 13:43:42 +09:00
namei.c f2fs: use strncasecmp() simplify the string comparison 2013-08-27 21:50:12 +09:00
node.c f2fs: merge more bios of node block writes 2013-09-05 10:17:19 +09:00
node.h f2fs: fix the use of XATTR_NODE_OFFSET 2013-08-09 14:57:56 +09:00
recovery.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
segment.c f2fs: fix a compound statement label error 2013-08-19 11:51:08 +09:00
segment.h f2fs: avoid an overflow during utilization calculation 2013-09-03 13:41:37 +09:00
super.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
xattr.c f2fs: support the inline xattrs 2013-08-26 20:15:23 +09:00
xattr.h f2fs: support the inline xattrs 2013-08-26 20:15:23 +09:00