From: Chao Yu <yuchao0@huawei.com>
To: Jaegeuk Kim <jaegeuk@kernel.org>
Cc: guoweichao <guoweichao@huawei.com>,
linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [PATCH] f2fs: skip checkpoint if having a dirty segment but no prefree at BG_GC -> FG_GC
Date: Tue, 28 Feb 2017 18:51:34 +0800 [thread overview]
Message-ID: <c577a659-0c5c-56a3-0f3e-73b9fbb319ff@huawei.com> (raw)
In-Reply-To: <20170227234938.GC9644@jaegeuk.local>
On 2017/2/28 7:49, Jaegeuk Kim wrote:
> On 02/27, Jaegeuk Kim wrote:
>> On 02/27, Chao Yu wrote:
>>> On 2017/2/26 3:56, Jaegeuk Kim wrote:
>>>> On 02/25, guoweichao wrote:
>>>>> Hi Jaegeuk,
>>>>>
>>>>> I regard no enough free sections as a precondition when talking about
>>>>> BG_GC -> FG_GC. I mean that for both case a) and b) I mentioned has no enough
>>>>> free sections implicitly.
>>>>>
>>>>> On 2017/2/25 2:49, Jaegeuk Kim wrote:
>>>>>> Hi Weichao,
>>>>>>
>>>>>> On 02/25, Weichao Guo wrote:
>>>>>>> When turning to FG_GC from BG_GC, we need to write checkpoint in 2 cases:
>>>>>>> * a) BG_GC have made some progress, e.g.: some prefree segments.
>>>>>>> * b) There is no victim and no prefree segment.
>>>>>>
>>>>>> You missed
>>>>>> * c) has_not_enough_free_secs() introduced by
>>>>>> 6e17bfbc75a5cb ("f2fs: fix to overcome inline_data floods")
>>>>> As we have enabled SSR for warm node(5b6c6be2d8 ("f2fs: use SSR for warm node as well")),
>>>>> I think inline data floods should not be a problem in most cases.
>>>>>>
>>>>>> And, Yunlong pointed that we can't find a case to avoid write_checkpoint()
>>>>>> mostly due to c) condition.
>>>>> As inline data floods is an extreme case, and there is little possibility caused panic
>>>>> for inline data floods now, there should be lots of chance to skip checkpoint. I mean
>>>>> that we can make some accurate inline data floods checking before writing checkpoint.
>>>>
>>>> For now, the safest way is our first option. So, I decided to start with doing
>>>> checkpoint due to previous inline_data flooding issue even though it's an
>>>> extreme case under SSR.
>>>>
>>>> Anyway, I agree that we need to find a way to detect when to avoid checkpoint.
>>>
>>> Hi all,
>>>
>>> I proposed a approach before, can you please check that one?
>>>
>>> https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg03632.html
>>
>> Oh, right, let's take a look at this. ;)
>
> Hmm, I just read this patch again, and realized it doesn't quite address the
> current issue. This patch flushes inline_data inodes in background, which does
> not guarantee this worst case. The key idea would be how to measure the space
Hmm.. Maybe we can cover worst case by moving judgment condition and flushing
operation into f2fs_balance_fs.
> we can do SSR and use it in has_not_enough_free_secs().
We need to stat usage of slack free space accurately both for data/node, right?
Thanks,
>
> Thanks,
>
>>
>> Thanks,
>>
>>>
>>> Thanks,
>>>
>>>>
>>>> Thanks,
>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>>>
>>>>>>> For case a), previously, we also check if there is a dirty segment for
>>>>>>> infering blocks moving in last BG_GC. But dirty segments do not always
>>>>>>> indicate that, BG_GC may just start and do not move any blocks at all.
>>>>>>> Futhermore, skipping checkpoint if there are some dirty segments but no
>>>>>>> prefree segments is OK.
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Signed-off-by: Weichao Guo <guoweichao@huawei.com>
>>>>>>> ---
>>>>>>> fs/f2fs/gc.c | 7 ++++++-
>>>>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
>>>>>>> index 6c996e3..30d206a 100644
>>>>>>> --- a/fs/f2fs/gc.c
>>>>>>> +++ b/fs/f2fs/gc.c
>>>>>>> @@ -958,7 +958,12 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background)
>>>>>>> * enough free sections, we should flush dent/node blocks and do
>>>>>>> * garbage collections.
>>>>>>> */
>>>>>>> - ret = write_checkpoint(sbi, &cpc);
>>>>>>> + if (prefree_segments(sbi))
>>>>>>> + ret = write_checkpoint(sbi, &cpc);
>>>>>>> + else if (!__get_victim(sbi, &segno, gc_type) {
>>>>>>> + segno = NULL_SEGNO;
>>>>>>> + ret = write_checkpoint(sbi, &cpc);
>>>>>>> + }
>>>>>>> if (ret)
>>>>>>> goto stop;
>>>>>>> } else if (gc_type == BG_GC && !background) {
>>>>>>> --
>>>>>>> 2.10.1
>>>>>>
>>>>>> .
>>>>>>
>>>>>
>>>>> Thanks,
>>>>> Weichao
>>>>
>>>> .
>>>>
>>
>> ------------------------------------------------------------------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>> _______________________________________________
>> Linux-f2fs-devel mailing list
>> Linux-f2fs-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
>
> .
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
next prev parent reply other threads:[~2017-02-28 10:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-24 20:43 [PATCH] f2fs: skip checkpoint if having a dirty segment but no prefree at BG_GC -> FG_GC Weichao Guo
2017-02-24 18:49 ` Jaegeuk Kim
2017-02-25 8:20 ` guoweichao
2017-02-25 19:56 ` Jaegeuk Kim
2017-02-27 3:25 ` Chao Yu
2017-02-27 18:05 ` Jaegeuk Kim
2017-02-27 23:49 ` Jaegeuk Kim
2017-02-28 10:51 ` Chao Yu [this message]
2017-03-01 19:24 ` Jaegeuk Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c577a659-0c5c-56a3-0f3e-73b9fbb319ff@huawei.com \
--to=yuchao0@huawei.com \
--cc=guoweichao@huawei.com \
--cc=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).