diff options
| author | 2020-06-28 10:58:44 +0800 | |
|---|---|---|
| committer | 2020-07-07 21:51:45 -0700 | |
| commit | 0759e2c151f47b1362b15d544aca903d4ed74f88 (patch) | |
| tree | 5a5f0a03587c944663eee58972c348683b425e1e | |
| parent | f2fs: add f2fs_gc exception handle in f2fs_ioc_gc_range (diff) | |
| download | wireguard-linux-0759e2c151f47b1362b15d544aca903d4ed74f88.tar.xz wireguard-linux-0759e2c151f47b1362b15d544aca903d4ed74f88.zip  | |
f2fs: show more debug info for per-temperature log
- Add to account and show per-log dirty_seg, full_seg and valid_blocks
in debugfs.
- reformat printed info.
    TYPE            segno    secno   zoneno  dirty_seg   full_seg  valid_blk
  - COLD   data:     1523     1523     1523          1          0        399
  - WARM   data:      769      769      769         20        255     133098
  - HOT    data:      767      767      767          9          0        167
  - Dir   dnode:       22       22       22          3          0         70
  - File  dnode:      722      722      722         14         10       6505
  - Indir nodes:        2        2        2          1          0          3
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
| -rw-r--r-- | fs/f2fs/debug.c | 64 | ||||
| -rw-r--r-- | fs/f2fs/f2fs.h | 3 | 
2 files changed, 55 insertions, 12 deletions
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index 0dbcb0f9c019..4276c0f79beb 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c @@ -174,6 +174,26 @@ static void update_general_status(struct f2fs_sb_info *sbi)  	for (i = META_CP; i < META_MAX; i++)  		si->meta_count[i] = atomic_read(&sbi->meta_count[i]); +	for (i = 0; i < NO_CHECK_TYPE; i++) { +		si->dirty_seg[i] = 0; +		si->full_seg[i] = 0; +		si->valid_blks[i] = 0; +	} + +	for (i = 0; i < MAIN_SEGS(sbi); i++) { +		int blks = get_seg_entry(sbi, i)->valid_blocks; +		int type = get_seg_entry(sbi, i)->type; + +		if (!blks) +			continue; + +		if (blks == sbi->blocks_per_seg) +			si->full_seg[type]++; +		else +			si->dirty_seg[type]++; +		si->valid_blks[type] += blks; +	} +  	for (i = 0; i < 2; i++) {  		si->segment_count[i] = sbi->segment_count[i];  		si->block_count[i] = sbi->block_count[i]; @@ -329,30 +349,50 @@ static int stat_show(struct seq_file *s, void *v)  		seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n",  			   si->main_area_segs, si->main_area_sections,  			   si->main_area_zones); -		seq_printf(s, "  - COLD  data: %d, %d, %d\n", +		seq_printf(s, "    TYPE         %8s %8s %8s %10s %10s %10s\n", +			   "segno", "secno", "zoneno", "dirty_seg", "full_seg", "valid_blk"); +		seq_printf(s, "  - COLD   data: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_COLD_DATA],  			   si->cursec[CURSEG_COLD_DATA], -			   si->curzone[CURSEG_COLD_DATA]); -		seq_printf(s, "  - WARM  data: %d, %d, %d\n", +			   si->curzone[CURSEG_COLD_DATA], +			   si->dirty_seg[CURSEG_COLD_DATA], +			   si->full_seg[CURSEG_COLD_DATA], +			   si->valid_blks[CURSEG_COLD_DATA]); +		seq_printf(s, "  - WARM   data: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_WARM_DATA],  			   si->cursec[CURSEG_WARM_DATA], -			   si->curzone[CURSEG_WARM_DATA]); -		seq_printf(s, "  - HOT   data: %d, %d, %d\n", +			   si->curzone[CURSEG_WARM_DATA], +			   si->dirty_seg[CURSEG_WARM_DATA], +			   si->full_seg[CURSEG_WARM_DATA], +			   si->valid_blks[CURSEG_WARM_DATA]); +		seq_printf(s, "  - HOT    data: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_HOT_DATA],  			   si->cursec[CURSEG_HOT_DATA], -			   si->curzone[CURSEG_HOT_DATA]); -		seq_printf(s, "  - Dir   dnode: %d, %d, %d\n", +			   si->curzone[CURSEG_HOT_DATA], +			   si->dirty_seg[CURSEG_HOT_DATA], +			   si->full_seg[CURSEG_HOT_DATA], +			   si->valid_blks[CURSEG_HOT_DATA]); +		seq_printf(s, "  - Dir   dnode: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_HOT_NODE],  			   si->cursec[CURSEG_HOT_NODE], -			   si->curzone[CURSEG_HOT_NODE]); -		seq_printf(s, "  - File   dnode: %d, %d, %d\n", +			   si->curzone[CURSEG_HOT_NODE], +			   si->dirty_seg[CURSEG_HOT_NODE], +			   si->full_seg[CURSEG_HOT_NODE], +			   si->valid_blks[CURSEG_HOT_NODE]); +		seq_printf(s, "  - File  dnode: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_WARM_NODE],  			   si->cursec[CURSEG_WARM_NODE], -			   si->curzone[CURSEG_WARM_NODE]); -		seq_printf(s, "  - Indir nodes: %d, %d, %d\n", +			   si->curzone[CURSEG_WARM_NODE], +			   si->dirty_seg[CURSEG_WARM_NODE], +			   si->full_seg[CURSEG_WARM_NODE], +			   si->valid_blks[CURSEG_WARM_NODE]); +		seq_printf(s, "  - Indir nodes: %8d %8d %8d %10u %10u %10u\n",  			   si->curseg[CURSEG_COLD_NODE],  			   si->cursec[CURSEG_COLD_NODE], -			   si->curzone[CURSEG_COLD_NODE]); +			   si->curzone[CURSEG_COLD_NODE], +			   si->dirty_seg[CURSEG_COLD_NODE], +			   si->full_seg[CURSEG_COLD_NODE], +			   si->valid_blks[CURSEG_COLD_NODE]);  		seq_printf(s, "\n  - Valid: %d\n  - Dirty: %d\n",  			   si->main_area_segs - si->dirty_count -  			   si->prefree_count - si->free_segs, diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 397cf813b527..2c6646d1976e 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -3536,6 +3536,9 @@ struct f2fs_stat_info {  	int curseg[NR_CURSEG_TYPE];  	int cursec[NR_CURSEG_TYPE];  	int curzone[NR_CURSEG_TYPE]; +	unsigned int dirty_seg[NR_CURSEG_TYPE]; +	unsigned int full_seg[NR_CURSEG_TYPE]; +	unsigned int valid_blks[NR_CURSEG_TYPE];  	unsigned int meta_count[META_MAX];  	unsigned int segment_count[2];  | 
