f2fs: speed up gc_urgent mode with SSR
Subsystems (2)
Jaegeuk Kim
maintainerPATCH 1/2 f2fs: speed up gc_urgent mode with SSR
From: Jaegeuk Kim <[email protected]>
This patch activates SSR in gc_urgent mode.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fs/f2fs/f2fs.h | 1 + fs/f2fs/segment.c | 15 +++++++++++++++ fs/f2fs/segment.h | 13 ------------- 3 files changed, 16 insertions(+), 13 deletions(-)
fs/f2fs/f2fs.h +1 -0
@@ -2511,6 +2511,7 @@ void destroy_node_manager_caches(void);/* * segment.c */ +bool need_SSR (struct f2fs_sb_info *sbi);void register_inmem_page (struct inode *inode,struct page *page);void drop_inmem_pages (struct inode *inode);void drop_inmem_page (struct inode *inode,struct page *page);
fs/f2fs/segment.c +15 -0
@@ -168,6 +168,21 @@ static unsigned long __find_rev_next_zero_bit(const unsigned long *addr,return result - size +__reverse_ffz (tmp); } +bool need_SSR (struct f2fs_sb_info *sbi) +{ +int node_secs =get_blocktype_secs (sbi,F2FS_DIRTY_NODES ); +int dent_secs =get_blocktype_secs (sbi,F2FS_DIRTY_DENTS ); +int imeta_secs =get_blocktype_secs (sbi,F2FS_DIRTY_IMETA ); + +if (test_opt (sbi,LFS )) +return false; +if (sbi->gc_thread && sbi->gc_thread->gc_urgent) +return true; + +return free_sections (sbi) <= (node_secs +2 * dent_secs + imeta_secs + +2 *reserved_sections (sbi)); +} +void register_inmem_page (struct inode *inode,struct page *page) {struct f2fs_inode_info *fi =F2FS_I (inode);
fs/f2fs/segment.h +0 -13
@@ -497,19 +497,6 @@ static inline int reserved_sections(struct f2fs_sb_info *sbi)return GET_SEC_FROM_SEG (sbi, (unsigned int )reserved_segments (sbi)); } -static inline bool need_SSR (struct f2fs_sb_info *sbi) -{ -int node_secs =get_blocktype_secs (sbi,F2FS_DIRTY_NODES ); -int dent_secs =get_blocktype_secs (sbi,F2FS_DIRTY_DENTS ); -int imeta_secs =get_blocktype_secs (sbi,F2FS_DIRTY_IMETA ); - -if (test_opt (sbi,LFS )) -return false; - -return free_sections (sbi) <= (node_secs +2 * dent_secs + imeta_secs + -2 *reserved_sections (sbi)); -} -static inline bool has_not_enough_free_secs (struct f2fs_sb_info *sbi,int freed,int needed) {
Signature · 1 line
2.14.0.rc1.383.gd1ce394fe2-goog
Jaegeuk Kim
maintainerPATCH 2/2 f2fs: better to wait for fstrim completion
In android, we'd better wait for fstrim completion instead of issuing the discard commands asynchronous.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fs/f2fs/segment.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
fs/f2fs/segment.c +5 -1
@@ -1076,6 +1076,9 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)if (dcc->pend_list_tag[i] &P_TRIM ) {__submit_discard_cmd (sbi, dc); issued++; + +if (fatal_signal_pending (current)) +break ;continue ; }
@@ -1192,7 +1195,7 @@ void stop_discard_thread(struct f2fs_sb_info *sbi) } } -/* This comes from f2fs_put_super */ +/* This comes from f2fs_put_super and f2fs_trim_fs */ void f2fs_wait_discard_bios (struct f2fs_sb_info *sbi) {__issue_discard_cmd (sbi, false);
@@ -2227,6 +2230,7 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range) }/* It's time to issue all the filed discards */ mark_discard_range_all (sbi); +f2fs_wait_discard_bios (sbi); out: range->len =F2FS_BLK_TO_BYTES (cpc.trimmed);return err;
Signature · 1 line
2.14.0.rc1.383.gd1ce394fe2-goog
Re: [f2fs-dev] [PATCH 2/2] f2fs: better to wait for fstrim completion
Quoted 4 lines · Jaegeuk Kim
In android, we'd better wait for fstrim completion instead of issuing the discard commands asynchronous.
Signed-off-by Jaegeuk Kim <[email protected]>
Reviewed-by Chao Yu <[email protected]>
Quoted 36 lines
--- fs/f2fs/segment.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)fs/f2fs/segment.c +5
-1@@ -1076,6 +1076,9 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)if (dcc->pend_list_tag[i] &P_TRIM ) {__submit_discard_cmd (sbi, dc); issued++; + +if (fatal_signal_pending (current)) +break ;continue ; }@@ -1192,7 +1195,7 @@ void stop_discard_thread(struct f2fs_sb_info *sbi) } } -/* This comes from f2fs_put_super */ +/* This comes from f2fs_put_super and f2fs_trim_fs */ void f2fs_wait_discard_bios (struct f2fs_sb_info *sbi) {__issue_discard_cmd (sbi, false);@@ -2227,6 +2230,7 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range) }/* It's time to issue all the filed discards */ mark_discard_range_all (sbi); +f2fs_wait_discard_bios (sbi); out: range->len =F2FS_BLK_TO_BYTES (cpc.trimmed);return err;
Quoted 5 lines · Jaegeuk Kim
From: Jaegeuk Kim <[email protected]>
This patch activates SSR in
gc_urgentmode.Signed-off-by Jaegeuk Kim <[email protected]>
Reviewed-by Chao Yu <[email protected]>
Quoted 69 lines
--- fs/f2fs/f2fs.h | 1 + fs/f2fs/segment.c | 15 +++++++++++++++ fs/f2fs/segment.h | 13 ------------- 3 files changed, 16 insertions(+), 13 deletions(-)fs/f2fs/f2fs.h +1
-0@@ -2511,6 +2511,7 @@ void destroy_node_manager_caches(void);/* * segment.c */ +bool need_SSR (struct f2fs_sb_info *sbi);void register_inmem_page (struct inode *inode,struct page *page);void drop_inmem_pages (struct inode *inode);void drop_inmem_page (struct inode *inode,struct page *page);fs/f2fs/segment.c +15
-0@@ -168,6 +168,21 @@ static unsigned long __find_rev_next_zero_bit(const unsigned long *addr,return result - size +__reverse_ffz (tmp); } +bool need_SSR (struct f2fs_sb_info *sbi) +{ +int node_secs =get_blocktype_secs (sbi,F2FS_DIRTY_NODES ); +int dent_secs =get_blocktype_secs (sbi,F2FS_DIRTY_DENTS ); +int imeta_secs =get_blocktype_secs (sbi,F2FS_DIRTY_IMETA ); + +if (test_opt (sbi,LFS )) +return false; +if (sbi->gc_thread && sbi->gc_thread->gc_urgent) +return true; + +return free_sections (sbi) <= (node_secs +2 * dent_secs + imeta_secs + +2 *reserved_sections (sbi)); +} +void register_inmem_page (struct inode *inode,struct page *page) {struct f2fs_inode_info *fi =F2FS_I (inode);fs/f2fs/segment.h +0
-13@@ -497,19 +497,6 @@ static inline int reserved_sections(struct f2fs_sb_info *sbi)return GET_SEC_FROM_SEG (sbi, (unsigned int )reserved_segments (sbi)); } -static inline bool need_SSR (struct f2fs_sb_info *sbi) -{ -int node_secs =get_blocktype_secs (sbi,F2FS_DIRTY_NODES ); -int dent_secs =get_blocktype_secs (sbi,F2FS_DIRTY_DENTS ); -int imeta_secs =get_blocktype_secs (sbi,F2FS_DIRTY_IMETA ); - -if (test_opt (sbi,LFS )) -return false; - -return free_sections (sbi) <= (node_secs +2 * dent_secs + imeta_secs + -2 *reserved_sections (sbi)); -} -static inline bool has_not_enough_free_secs (struct f2fs_sb_info *sbi,int freed,int needed) {