f2fs: delay awaking discard thread
Chao Yu
maintainerPATCH 1/2 f2fs: delay awaking discard thread
From: Chao Yu <[email protected]>
It's better to delay awaking discard thread while queuing discard commands in checkpoint, it will help to give more chances for merging big and small discard.
Signed-off-by Chao Yu <[email protected]>
--- fs/f2fs/segment.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/f2fs/segment.c +2 -1
@@ -971,7 +971,6 @@ static int __queue_discard_cmd(struct f2fs_sb_info *sbi, blkstart -=FDEV (devi).start_blk; }__update_discard_tree_range (sbi, bdev, lblkstart, blkstart, blklen); -wake_up (&SM_I (sbi)->dcc_info->discard_wait_queue);return 0 ; }
@@ -1338,6 +1337,8 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)SM_I (sbi)->dcc_info->nr_discards -= total_len;kmem_cache_free (discard_entry_slab, entry); } + +wake_up (&SM_I (sbi)->dcc_info->discard_wait_queue); }static int create_discard_cmd_control (struct f2fs_sb_info *sbi)
Signature · 6 lines
2.12.2.575.gb14f27f ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Chao Yu
maintainerPATCH 2/2 f2fs: enable small discard by default
From: Chao Yu <[email protected]>
This patch start to enable 4K granularity small discard by default when realtime discard is on, so, in seriously fragmented space, small size discard can be issued in time to avoid useless storage space occupying of invalid filesystem's data, then performance of flash storage can be recovered.
Signed-off-by Chao Yu <[email protected]>
--- fs/f2fs/f2fs.h | 4 ++-- fs/f2fs/segment.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
fs/f2fs/f2fs.h +2 -2
@@ -230,8 +230,8 @@ struct discard_cmd_control {struct list_head wait_list;/* store on-flushing entries */ wait_queue_head_t discard_wait_queue;/* waiting queue for wake-up */ struct mutex cmd_lock; -int nr_discards;/* # of discards in the list */ -int max_discards;/* max. discards to be issued */ +unsigned int nr_discards;/* # of discards in the list */ +unsigned int max_discards;/* max. discards to be issued */ unsigned int undiscard_blks;/* # of undiscard blocks */ atomic_t issued_discard;/* # of issued discard */ atomic_t issing_discard;/* # of issing discard */
fs/f2fs/segment.c +1 -1
@@ -1365,7 +1365,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi)atomic_set (&dcc->issing_discard,0 );atomic_set (&dcc->discard_cmd_cnt,0 ); dcc->nr_discards =0 ; - dcc->max_discards =0 ; + dcc->max_discards =MAIN_SEGS (sbi) << sbi->log_blocks_per_seg; dcc->undiscard_blks =0 ; dcc->root =RB_ROOT ;
Signature · 6 lines
2.12.2.575.gb14f27f ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot