diff options
Diffstat (limited to 'fs/f2fs/debug.c')
-rw-r--r-- | fs/f2fs/debug.c | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index 91e8f699ab30..e671373cc8ab 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c | |||
@@ -40,6 +40,7 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
40 | si->ndirty_dirs = sbi->n_dirty_dirs; | 40 | si->ndirty_dirs = sbi->n_dirty_dirs; |
41 | si->ndirty_meta = get_pages(sbi, F2FS_DIRTY_META); | 41 | si->ndirty_meta = get_pages(sbi, F2FS_DIRTY_META); |
42 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); | 42 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); |
43 | si->wb_pages = get_pages(sbi, F2FS_WRITEBACK); | ||
43 | si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg; | 44 | si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg; |
44 | si->rsvd_segs = reserved_segments(sbi); | 45 | si->rsvd_segs = reserved_segments(sbi); |
45 | si->overp_segs = overprovision_segments(sbi); | 46 | si->overp_segs = overprovision_segments(sbi); |
@@ -57,7 +58,9 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
57 | si->node_pages = NODE_MAPPING(sbi)->nrpages; | 58 | si->node_pages = NODE_MAPPING(sbi)->nrpages; |
58 | si->meta_pages = META_MAPPING(sbi)->nrpages; | 59 | si->meta_pages = META_MAPPING(sbi)->nrpages; |
59 | si->nats = NM_I(sbi)->nat_cnt; | 60 | si->nats = NM_I(sbi)->nat_cnt; |
60 | si->sits = SIT_I(sbi)->dirty_sentries; | 61 | si->dirty_nats = NM_I(sbi)->dirty_nat_cnt; |
62 | si->sits = MAIN_SEGS(sbi); | ||
63 | si->dirty_sits = SIT_I(sbi)->dirty_sentries; | ||
61 | si->fnids = NM_I(sbi)->fcnt; | 64 | si->fnids = NM_I(sbi)->fcnt; |
62 | si->bg_gc = sbi->bg_gc; | 65 | si->bg_gc = sbi->bg_gc; |
63 | si->util_free = (int)(free_user_blocks(sbi) >> sbi->log_blocks_per_seg) | 66 | si->util_free = (int)(free_user_blocks(sbi) >> sbi->log_blocks_per_seg) |
@@ -79,6 +82,8 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
79 | si->segment_count[i] = sbi->segment_count[i]; | 82 | si->segment_count[i] = sbi->segment_count[i]; |
80 | si->block_count[i] = sbi->block_count[i]; | 83 | si->block_count[i] = sbi->block_count[i]; |
81 | } | 84 | } |
85 | |||
86 | si->inplace_count = atomic_read(&sbi->inplace_count); | ||
82 | } | 87 | } |
83 | 88 | ||
84 | /* | 89 | /* |
@@ -137,6 +142,7 @@ static void update_mem_info(struct f2fs_sb_info *sbi) | |||
137 | si->base_mem += MAIN_SEGS(sbi) * sizeof(struct seg_entry); | 142 | si->base_mem += MAIN_SEGS(sbi) * sizeof(struct seg_entry); |
138 | si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); | 143 | si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); |
139 | si->base_mem += 2 * SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); | 144 | si->base_mem += 2 * SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); |
145 | si->base_mem += SIT_VBLOCK_MAP_SIZE; | ||
140 | if (sbi->segs_per_sec > 1) | 146 | if (sbi->segs_per_sec > 1) |
141 | si->base_mem += MAIN_SECS(sbi) * sizeof(struct sec_entry); | 147 | si->base_mem += MAIN_SECS(sbi) * sizeof(struct sec_entry); |
142 | si->base_mem += __bitmap_size(sbi, SIT_BITMAP); | 148 | si->base_mem += __bitmap_size(sbi, SIT_BITMAP); |
@@ -159,20 +165,32 @@ static void update_mem_info(struct f2fs_sb_info *sbi) | |||
159 | si->base_mem += sizeof(struct f2fs_nm_info); | 165 | si->base_mem += sizeof(struct f2fs_nm_info); |
160 | si->base_mem += __bitmap_size(sbi, NAT_BITMAP); | 166 | si->base_mem += __bitmap_size(sbi, NAT_BITMAP); |
161 | 167 | ||
168 | get_cache: | ||
169 | si->cache_mem = 0; | ||
170 | |||
162 | /* build gc */ | 171 | /* build gc */ |
163 | si->base_mem += sizeof(struct f2fs_gc_kthread); | 172 | if (sbi->gc_thread) |
173 | si->cache_mem += sizeof(struct f2fs_gc_kthread); | ||
174 | |||
175 | /* build merge flush thread */ | ||
176 | if (SM_I(sbi)->cmd_control_info) | ||
177 | si->cache_mem += sizeof(struct flush_cmd_control); | ||
164 | 178 | ||
165 | get_cache: | ||
166 | /* free nids */ | 179 | /* free nids */ |
167 | si->cache_mem = NM_I(sbi)->fcnt; | 180 | si->cache_mem += NM_I(sbi)->fcnt * sizeof(struct free_nid); |
168 | si->cache_mem += NM_I(sbi)->nat_cnt; | 181 | si->cache_mem += NM_I(sbi)->nat_cnt * sizeof(struct nat_entry); |
169 | npages = NODE_MAPPING(sbi)->nrpages; | 182 | si->cache_mem += NM_I(sbi)->dirty_nat_cnt * |
170 | si->cache_mem += npages << PAGE_CACHE_SHIFT; | 183 | sizeof(struct nat_entry_set); |
171 | npages = META_MAPPING(sbi)->nrpages; | 184 | si->cache_mem += si->inmem_pages * sizeof(struct inmem_pages); |
172 | si->cache_mem += npages << PAGE_CACHE_SHIFT; | 185 | si->cache_mem += sbi->n_dirty_dirs * sizeof(struct inode_entry); |
173 | si->cache_mem += sbi->n_dirty_dirs * sizeof(struct dir_inode_entry); | ||
174 | for (i = 0; i <= UPDATE_INO; i++) | 186 | for (i = 0; i <= UPDATE_INO; i++) |
175 | si->cache_mem += sbi->im[i].ino_num * sizeof(struct ino_entry); | 187 | si->cache_mem += sbi->im[i].ino_num * sizeof(struct ino_entry); |
188 | |||
189 | si->page_mem = 0; | ||
190 | npages = NODE_MAPPING(sbi)->nrpages; | ||
191 | si->page_mem += npages << PAGE_CACHE_SHIFT; | ||
192 | npages = META_MAPPING(sbi)->nrpages; | ||
193 | si->page_mem += npages << PAGE_CACHE_SHIFT; | ||
176 | } | 194 | } |
177 | 195 | ||
178 | static int stat_show(struct seq_file *s, void *v) | 196 | static int stat_show(struct seq_file *s, void *v) |
@@ -250,16 +268,16 @@ static int stat_show(struct seq_file *s, void *v) | |||
250 | seq_printf(s, "\nExtent Hit Ratio: %d / %d\n", | 268 | seq_printf(s, "\nExtent Hit Ratio: %d / %d\n", |
251 | si->hit_ext, si->total_ext); | 269 | si->hit_ext, si->total_ext); |
252 | seq_puts(s, "\nBalancing F2FS Async:\n"); | 270 | seq_puts(s, "\nBalancing F2FS Async:\n"); |
253 | seq_printf(s, " - inmem: %4d\n", | 271 | seq_printf(s, " - inmem: %4d, wb: %4d\n", |
254 | si->inmem_pages); | 272 | si->inmem_pages, si->wb_pages); |
255 | seq_printf(s, " - nodes: %4d in %4d\n", | 273 | seq_printf(s, " - nodes: %4d in %4d\n", |
256 | si->ndirty_node, si->node_pages); | 274 | si->ndirty_node, si->node_pages); |
257 | seq_printf(s, " - dents: %4d in dirs:%4d\n", | 275 | seq_printf(s, " - dents: %4d in dirs:%4d\n", |
258 | si->ndirty_dent, si->ndirty_dirs); | 276 | si->ndirty_dent, si->ndirty_dirs); |
259 | seq_printf(s, " - meta: %4d in %4d\n", | 277 | seq_printf(s, " - meta: %4d in %4d\n", |
260 | si->ndirty_meta, si->meta_pages); | 278 | si->ndirty_meta, si->meta_pages); |
261 | seq_printf(s, " - NATs: %9d\n - SITs: %9d\n", | 279 | seq_printf(s, " - NATs: %9d/%9d\n - SITs: %9d/%9d\n", |
262 | si->nats, si->sits); | 280 | si->dirty_nats, si->nats, si->dirty_sits, si->sits); |
263 | seq_printf(s, " - free_nids: %9d\n", | 281 | seq_printf(s, " - free_nids: %9d\n", |
264 | si->fnids); | 282 | si->fnids); |
265 | seq_puts(s, "\nDistribution of User Blocks:"); | 283 | seq_puts(s, "\nDistribution of User Blocks:"); |
@@ -277,6 +295,7 @@ static int stat_show(struct seq_file *s, void *v) | |||
277 | for (j = 0; j < si->util_free; j++) | 295 | for (j = 0; j < si->util_free; j++) |
278 | seq_putc(s, '-'); | 296 | seq_putc(s, '-'); |
279 | seq_puts(s, "]\n\n"); | 297 | seq_puts(s, "]\n\n"); |
298 | seq_printf(s, "IPU: %u blocks\n", si->inplace_count); | ||
280 | seq_printf(s, "SSR: %u blocks in %u segments\n", | 299 | seq_printf(s, "SSR: %u blocks in %u segments\n", |
281 | si->block_count[SSR], si->segment_count[SSR]); | 300 | si->block_count[SSR], si->segment_count[SSR]); |
282 | seq_printf(s, "LFS: %u blocks in %u segments\n", | 301 | seq_printf(s, "LFS: %u blocks in %u segments\n", |
@@ -289,9 +308,14 @@ static int stat_show(struct seq_file *s, void *v) | |||
289 | 308 | ||
290 | /* memory footprint */ | 309 | /* memory footprint */ |
291 | update_mem_info(si->sbi); | 310 | update_mem_info(si->sbi); |
292 | seq_printf(s, "\nMemory: %u KB = static: %u + cached: %u\n", | 311 | seq_printf(s, "\nMemory: %u KB\n", |
293 | (si->base_mem + si->cache_mem) >> 10, | 312 | (si->base_mem + si->cache_mem + si->page_mem) >> 10); |
294 | si->base_mem >> 10, si->cache_mem >> 10); | 313 | seq_printf(s, " - static: %u KB\n", |
314 | si->base_mem >> 10); | ||
315 | seq_printf(s, " - cached: %u KB\n", | ||
316 | si->cache_mem >> 10); | ||
317 | seq_printf(s, " - paged : %u KB\n", | ||
318 | si->page_mem >> 10); | ||
295 | } | 319 | } |
296 | mutex_unlock(&f2fs_stat_mutex); | 320 | mutex_unlock(&f2fs_stat_mutex); |
297 | return 0; | 321 | return 0; |
@@ -331,6 +355,7 @@ int f2fs_build_stats(struct f2fs_sb_info *sbi) | |||
331 | 355 | ||
332 | atomic_set(&sbi->inline_inode, 0); | 356 | atomic_set(&sbi->inline_inode, 0); |
333 | atomic_set(&sbi->inline_dir, 0); | 357 | atomic_set(&sbi->inline_dir, 0); |
358 | atomic_set(&sbi->inplace_count, 0); | ||
334 | 359 | ||
335 | mutex_lock(&f2fs_stat_mutex); | 360 | mutex_lock(&f2fs_stat_mutex); |
336 | list_add_tail(&si->stat_list, &f2fs_stat_list); | 361 | list_add_tail(&si->stat_list, &f2fs_stat_list); |