f2fs: enable rb-tree extent cache
authorChao Yu <chao2.yu@samsung.com>
Thu, 5 Feb 2015 09:57:31 +0000 (17:57 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 3 Mar 2015 17:58:47 +0000 (09:58 -0800)
commit1dcc336b02bff3d38f173feac55a2b6c25a5fb54
tree65224e862473f315da2817ca8f1c08202a8d5fdb
parent8967215954a50947fbd9c2996232548bf6dd9062
f2fs: enable rb-tree extent cache

This patch enables rb-tree based extent cache in f2fs.

When we mount with "-o extent_cache", f2fs will try to add recently accessed
page-block mappings into rb-tree based extent cache as much as possible, instead
of original one extent info cache.

By this way, f2fs can support more effective cache between dnode page cache and
disk. It will supply high hit ratio in the cache with fewer memory when dnode
page cache are reclaimed in environment of low memory.

Storage: Sandisk sd card 64g
1.append write file (offset: 0, size: 128M);
2.override write file (offset: 2M, size: 1M);
3.override write file (offset: 4M, size: 1M);
...
4.override write file (offset: 48M, size: 1M);
...
5.override write file (offset: 112M, size: 1M);
6.sync
7.echo 3 > /proc/sys/vm/drop_caches
8.read file (size:128M, unit: 4k, count: 32768)
(time dd if=/mnt/f2fs/128m bs=4k count=32768)

Extent Hit Ratio:
before patched
Hit Ratio 121 / 1071 1071 / 1071

Performance:
before patched
real     0m37.051s 0m35.556s
user     0m0.040s 0m0.026s
sys      0m2.990s 0m2.251s

Memory Cost:
before patched
Tree Count: 0 1 (size: 24 bytes)
Node Count: 0 45 (size: 1440 bytes)

v3:
 o retest and given more details of test result.

Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c
fs/f2fs/inode.c
fs/f2fs/segment.c
fs/f2fs/super.c