f2fs: support in batch multi blocks preallocation
This patch introduces reserve_new_blocks to make preallocation of multi blocks as in batch operation, so it can avoid lots of redundant operation, result in better performance. In virtual machine, with rotational device: time fallocate -l 32G /mnt/f2fs/file Before: real 0m4.584s user 0m0.000s sys 0m4.580s After: real 0m0.292s user 0m0.000s sys 0m0.272s In x86, with SSD: time fallocate -l 500G $MNT/testfile Before : 24.758 s After : 1.604 s Signed-off-by: Chao Yu <yuchao0@huawei.com> [Jaegeuk Kim: fix bugs and add performance numbers measured in x86.] Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
@@ -694,28 +694,32 @@ TRACE_EVENT(f2fs_direct_IO_exit,
|
||||
__entry->ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(f2fs_reserve_new_block,
|
||||
TRACE_EVENT(f2fs_reserve_new_blocks,
|
||||
|
||||
TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node),
|
||||
TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node,
|
||||
blkcnt_t count),
|
||||
|
||||
TP_ARGS(inode, nid, ofs_in_node),
|
||||
TP_ARGS(inode, nid, ofs_in_node, count),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(nid_t, nid)
|
||||
__field(unsigned int, ofs_in_node)
|
||||
__field(blkcnt_t, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = nid;
|
||||
__entry->ofs_in_node = ofs_in_node;
|
||||
__entry->count = count;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u",
|
||||
TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u, count = %llu",
|
||||
show_dev(__entry),
|
||||
(unsigned int)__entry->nid,
|
||||
__entry->ofs_in_node)
|
||||
__entry->ofs_in_node,
|
||||
(unsigned long long)__entry->count)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(f2fs__submit_page_bio,
|
||||
|
Reference in New Issue
Block a user