Skip to content

Commit

Permalink
f2fs: add stat info for moved blocks by background gc
Browse files Browse the repository at this point in the history
This patch is for looking into gc performance of f2fs in detail.

Signed-off-by: Changman Lee <cm224.lee@samsung.com>
[Jaegeuk Kim: fix build errors]
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
  • Loading branch information
Changman Lee authored and Jaegeuk Kim committed Apr 10, 2015
1 parent b28c3f9 commit e123598
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 16 deletions.
15 changes: 10 additions & 5 deletions fs/f2fs/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,11 +265,16 @@ static int stat_show(struct seq_file *s, void *v)
seq_printf(s, "CP calls: %d\n", si->cp_count);
seq_printf(s, "GC calls: %d (BG: %d)\n",
si->call_count, si->bg_gc);
seq_printf(s, " - data segments : %d\n", si->data_segs);
seq_printf(s, " - node segments : %d\n", si->node_segs);
seq_printf(s, "Try to move %d blocks\n", si->tot_blks);
seq_printf(s, " - data blocks : %d\n", si->data_blks);
seq_printf(s, " - node blocks : %d\n", si->node_blks);
seq_printf(s, " - data segments : %d (%d)\n",
si->data_segs, si->bg_data_segs);
seq_printf(s, " - node segments : %d (%d)\n",
si->node_segs, si->bg_node_segs);
seq_printf(s, "Try to move %d blocks (BG: %d)\n", si->tot_blks,
si->bg_data_blks + si->bg_node_blks);
seq_printf(s, " - data blocks : %d (%d)\n", si->data_blks,
si->bg_data_blks);
seq_printf(s, " - node blocks : %d (%d)\n", si->node_blks,
si->bg_node_blks);
seq_printf(s, "\nExtent Hit Ratio: %d / %d\n",
si->hit_ext, si->total_ext);
seq_printf(s, "\nExtent Tree Count: %d\n", si->ext_tree);
Expand Down
23 changes: 15 additions & 8 deletions fs/f2fs/f2fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1634,7 +1634,9 @@ struct f2fs_stat_info {
int dirty_count, node_pages, meta_pages;
int prefree_count, call_count, cp_count;
int tot_segs, node_segs, data_segs, free_segs, free_secs;
int bg_node_segs, bg_data_segs;
int tot_blks, data_blks, node_blks;
int bg_data_blks, bg_node_blks;
int curseg[NR_CURSEG_TYPE];
int cursec[NR_CURSEG_TYPE];
int curzone[NR_CURSEG_TYPE];
Expand Down Expand Up @@ -1683,31 +1685,36 @@ static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
((sbi)->block_count[(curseg)->alloc_type]++)
#define stat_inc_inplace_blocks(sbi) \
(atomic_inc(&(sbi)->inplace_count))
#define stat_inc_seg_count(sbi, type) \
#define stat_inc_seg_count(sbi, type, gc_type) \
do { \
struct f2fs_stat_info *si = F2FS_STAT(sbi); \
(si)->tot_segs++; \
if (type == SUM_TYPE_DATA) \
if (type == SUM_TYPE_DATA) { \
si->data_segs++; \
else \
si->bg_data_segs += (gc_type == BG_GC) ? 1 : 0; \
} else { \
si->node_segs++; \
si->bg_node_segs += (gc_type == BG_GC) ? 1 : 0; \
} \
} while (0)

#define stat_inc_tot_blk_count(si, blks) \
(si->tot_blks += (blks))

#define stat_inc_data_blk_count(sbi, blks) \
#define stat_inc_data_blk_count(sbi, blks, gc_type) \
do { \
struct f2fs_stat_info *si = F2FS_STAT(sbi); \
stat_inc_tot_blk_count(si, blks); \
si->data_blks += (blks); \
si->bg_data_blks += (gc_type == BG_GC) ? (blks) : 0; \
} while (0)

#define stat_inc_node_blk_count(sbi, blks) \
#define stat_inc_node_blk_count(sbi, blks, gc_type) \
do { \
struct f2fs_stat_info *si = F2FS_STAT(sbi); \
stat_inc_tot_blk_count(si, blks); \
si->node_blks += (blks); \
si->bg_node_blks += (gc_type == BG_GC) ? (blks) : 0; \
} while (0)

int f2fs_build_stats(struct f2fs_sb_info *);
Expand All @@ -1729,10 +1736,10 @@ void f2fs_destroy_root_stats(void);
#define stat_inc_seg_type(sbi, curseg)
#define stat_inc_block_count(sbi, curseg)
#define stat_inc_inplace_blocks(sbi)
#define stat_inc_seg_count(si, type)
#define stat_inc_seg_count(sbi, type, gc_type)
#define stat_inc_tot_blk_count(si, blks)
#define stat_inc_data_blk_count(si, blks)
#define stat_inc_node_blk_count(sbi, blks)
#define stat_inc_data_blk_count(sbi, blks, gc_type)
#define stat_inc_node_blk_count(sbi, blks, gc_type)

static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
Expand Down
6 changes: 3 additions & 3 deletions fs/f2fs/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ static void gc_node_segment(struct f2fs_sb_info *sbi,
set_page_dirty(node_page);
}
f2fs_put_page(node_page, 1);
stat_inc_node_blk_count(sbi, 1);
stat_inc_node_blk_count(sbi, 1, gc_type);
}

if (initial) {
Expand Down Expand Up @@ -622,7 +622,7 @@ static void gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
if (IS_ERR(data_page))
continue;
move_data_page(inode, data_page, gc_type);
stat_inc_data_blk_count(sbi, 1);
stat_inc_data_blk_count(sbi, 1, gc_type);
}
}

Expand Down Expand Up @@ -680,7 +680,7 @@ static void do_garbage_collect(struct f2fs_sb_info *sbi, unsigned int segno,
}
blk_finish_plug(&plug);

stat_inc_seg_count(sbi, GET_SUM_TYPE((&sum->footer)));
stat_inc_seg_count(sbi, GET_SUM_TYPE((&sum->footer)), gc_type);
stat_inc_call_count(sbi->stat_info);

f2fs_put_page(sum_page, 1);
Expand Down

0 comments on commit e123598

Please sign in to comment.