• Chao Yu's avatar
    f2fs: combine nat_bits and free_nid_bitmap cache · 7041d5d2
    Chao Yu authored
    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:
      4ac91242 ("f2fs: introduce free nid bitmap")
      d00030cf9cd0bb96fdccc41e33d3c91dcbb672ba ("f2fs: use __set{__clear}_bit_le")
      1382c0f3f9d3f936c8bc42ed1591cf7a593ef9f7 ("f2fs: combine nat_bits and free_nid_bitmap cache")
    
    4ac91242 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: default avatarChao Yu <yuchao0@huawei.com>
    Tested-by: default avatarXiaolong Ye <xiaolong.ye@intel.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    7041d5d2
node.c 66 KB