linux/fs/f2fs
Chao Yu 7041d5d286 f2fs: combine nat_bits and free_nid_bitmap cache
Both nat_bits cache and free_nid_bitmap cache provide same functionality
as a intermediate cache between free nid cache and disk, but with
different granularity of indicating free nid range, and different
persistence policy. nat_bits cache provides better persistence ability,
and free_nid_bitmap provides better granularity.

In this patch we combine advantage of both caches, so finally policy of
the intermediate cache would be:
- init: load free nid status from nat_bits into free_nid_bitmap
- lookup: scan free_nid_bitmap before load NAT blocks
- update: update free_nid_bitmap in real-time
- persistence: udpate and persist nat_bits in checkpoint

This patch also resolves performance regression reported by lkp-robot.

commit:
  4ac912427c ("f2fs: introduce free nid bitmap")
  d00030cf9cd0bb96fdccc41e33d3c91dcbb672ba ("f2fs: use __set{__clear}_bit_le")
  1382c0f3f9d3f936c8bc42ed1591cf7a593ef9f7 ("f2fs: combine nat_bits and free_nid_bitmap cache")

4ac912427c d00030cf9cd0bb96fdccc41e33 1382c0f3f9d3f936c8bc42ed15
---------------- -------------------------- --------------------------
         %stddev     %change         %stddev     %change         %stddev
             \          |                \          |                \
     77863 ±  0%      +2.1%      79485 ±  1%     +50.8%     117404 ±  0%  aim7.jobs-per-min
    231.63 ±  0%      -2.0%     227.01 ±  1%     -33.6%     153.80 ±  0%  aim7.time.elapsed_time
    231.63 ±  0%      -2.0%     227.01 ±  1%     -33.6%     153.80 ±  0%  aim7.time.elapsed_time.max
    896604 ±  0%      -0.8%     889221 ±  3%     -20.2%     715260 ±  1%  aim7.time.involuntary_context_switches
      2394 ±  1%      +4.6%       2503 ±  1%      +3.7%       2481 ±  2%  aim7.time.maximum_resident_set_size
      6240 ±  0%      -1.5%       6145 ±  1%     -14.1%       5360 ±  1%  aim7.time.system_time
   1111357 ±  3%      +1.9%    1132509 ±  2%      -6.2%    1041932 ±  2%  aim7.time.voluntary_context_switches
...

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Tested-by: Xiaolong Ye <xiaolong.ye@intel.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-03-20 10:00:18 -04:00
..
Kconfig
Makefile
acl.c
acl.h
checkpoint.c f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint 2017-02-27 10:07:47 -08:00
data.c sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h> 2017-03-02 08:42:32 +01:00
debug.c f2fs: skip scanning free nid bitmap of full NAT blocks 2017-03-20 10:00:17 -04:00
dir.c f2fs: use __set{__clear}_bit_le 2017-03-20 10:00:16 -04:00
extent_cache.c f2fs: kill __is_extent_same 2017-02-27 10:07:43 -08:00
f2fs.h f2fs: skip scanning free nid bitmap of full NAT blocks 2017-03-20 10:00:17 -04:00
file.c statx: Add a system call to make enhanced file info available 2017-03-02 20:51:15 -05:00
gc.c f2fs: fix a plint compile warning 2017-02-27 10:51:21 -08:00
gc.h
hash.c
inline.c for-f2fs-4.10 2016-12-14 09:07:36 -08:00
inode.c f2fs: show simple call stack in fault injection message 2017-02-27 09:59:55 -08:00
namei.c for-f2fs-4.11 2017-03-01 15:55:04 -08:00
node.c f2fs: combine nat_bits and free_nid_bitmap cache 2017-03-20 10:00:18 -04:00
node.h f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint 2017-02-27 10:07:47 -08:00
recovery.c f2fs: change recovery policy of xattr node block 2017-02-23 10:10:52 -08:00
segment.c f2fs: don't overwrite node block by SSR 2017-03-20 10:00:14 -04:00
segment.h f2fs: update the comment of default nr_pages to skipping 2017-02-27 10:07:46 -08:00
shrinker.c
super.c for-f2fs-4.11 2017-03-01 15:55:04 -08:00
trace.c
trace.h
xattr.c f2fs: drop the duplicate pval in f2fs_getxattr 2017-02-27 10:07:45 -08:00
xattr.h f2fs: enhance lookup xattr 2017-02-22 20:24:51 -08:00