Hi Chao, On Mon, Mar 15, 2021 at 02:12:44PM +0800, Chao Yu wrote: > Sahitya, > > On 2021/3/15 12:56, Sahitya Tummala wrote: > >When f2fs is heavily utilized over 80%, the current discard policy > >sets the max sleep timeout of discard thread as 50ms > >(DEF_MIN_DISCARD_ISSUE_TIME). But this is set even when there are > >no pending discard commands to be issued. This results into > >unnecessary frequent and periodic wake ups of the discard thread. > >This patch adds check for pending discard commands in addition > >to heavy utilization condition to prevent those wake ups. > > Could this commit fix your issue? > > https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/commit/?h=dev&id=43f8c47ea7d59c7b2270835f1d7c4618a1ea27b6 > I don't think it will help because we are changing the max timeout of the dpolicy itself in __init_discard_policy() when util > 80% as below -
dpolicy->max_interval = DEF_MIN_DISCARD_ISSUE_TIME; And issue_discard_thread() uses this value as wait_ms, when there are no more pending discard commands to be issued. <snip> } else { wait_ms = dpolicy.max_interval; } <snip> The new patch posted above is not changing anything related to the max_interval. Hence, I think it won't help the uncessary wakeup problem I am trying to solve for this condition - util > 80% and when there are no pending discards. Please let me know if i am missing something. Thanks, Sahitya. > Thanks, > > > > >Signed-off-by: Sahitya Tummala <stumm...@codeaurora.org> > >--- > > fs/f2fs/segment.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > >diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > >index dced46c..df30220 100644 > >--- a/fs/f2fs/segment.c > >+++ b/fs/f2fs/segment.c > >@@ -1112,6 +1112,8 @@ static void __init_discard_policy(struct f2fs_sb_info > >*sbi, > > struct discard_policy *dpolicy, > > int discard_type, unsigned int granularity) > > { > >+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; > >+ > > /* common policy */ > > dpolicy->type = discard_type; > > dpolicy->sync = true; > >@@ -1129,7 +1131,8 @@ static void __init_discard_policy(struct f2fs_sb_info > >*sbi, > > dpolicy->io_aware = true; > > dpolicy->sync = false; > > dpolicy->ordered = true; > >- if (utilization(sbi) > DEF_DISCARD_URGENT_UTIL) { > >+ if (utilization(sbi) > DEF_DISCARD_URGENT_UTIL && > >+ atomic_read(&dcc->discard_cmd_cnt)) { > > dpolicy->granularity = 1; > > dpolicy->max_interval = DEF_MIN_DISCARD_ISSUE_TIME; > > } > > -- -- Sent by a consultant of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.