All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hou Pengyang <houpengyang@huawei.com>
To: Chao Yu <yuchao0@huawei.com>
Cc: Jaegeuk Kim <jaegeuk@kernel.org>, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [PATCH 2/2] f2fs:use fggc_set_cold_data instead of set_cold_data in fggc
Date: Fri, 24 Feb 2017 11:04:41 +0800	[thread overview]
Message-ID: <58AFA2C9.70602@huawei.com> (raw)
In-Reply-To: <8078d244-cb7b-90af-855f-6169d608f084@huawei.com>

On 2017/2/24 10:07, Chao Yu wrote:
> On 2017/2/23 10:04, Hou Pengyang wrote:
>> On 2017/2/23 8:39, Jaegeuk Kim wrote:
>>> Hi Pengyang,
Hi Chao,
>>>
>>> On 02/22, Hou Pengyang wrote:
>>>> When no dirty colde segment for fggc ssr, we do NOT set_cold_data.
>>>
>>> The get_ssr_segment() finds a victim segment across all the hot/warm/cold data
>>> logs. When does this happen?
>>>
>> Oh, I miss the travel across hot/warm/cold, sorry.
>> how about the following filter in get_victim_segment, which can avoid
>> unnecessary afterwards bitmap scanning.
>>
>> Thanks,
>>
>> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
>> index a0eed23..00791d2 100644
>> --- a/fs/f2fs/gc.c
>> +++ b/fs/f2fs/gc.c
>> @@ -290,9 +290,16 @@ static int get_victim_by_default(struct
>> f2fs_sb_info *sbi,
>>           unsigned int secno, last_victim;
>>           unsigned int last_segment = MAIN_SEGS(sbi);
>>           unsigned int nsearched = 0;
>> +       int nr_dirty;
>>
>>           mutex_lock(&dirty_i->seglist_lock);
>>
>> +       if (alloc_mode == SSR) {
>> +               nr_dirty = dirty_i->nr_dirty[type];
>> +               if (!nr_dirty)
>
> Needs to clean up.
>
> if (!dirty_i->nr_dirty[type])

As Jaegeuk explained, p.max_search has skipped no # of victims scenario

	if (p.max_search == 0)
		goto out;
Thanks,
>
> Reviewed-by: Chao Yu <yuchao0@huawei.com>
>
> Thanks,
>
>> +                       goto out;
>> +       }
>> +
>>           p.alloc_mode = alloc_mode;
>>           select_policy(sbi, gc_type, type, &p);
>>
>>
>>> Thanks,
>>>
>>>>
>>>> Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
>>>> ---
>>>>    fs/f2fs/gc.c | 21 ++++++++++++++++++++-
>>>>    1 file changed, 20 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
>>>> index 4ee749f..a0eed23 100644
>>>> --- a/fs/f2fs/gc.c
>>>> +++ b/fs/f2fs/gc.c
>>>> @@ -666,6 +666,25 @@ static void move_encrypted_block(struct inode *inode, block_t bidx,
>>>>    	f2fs_put_page(page, 1);
>>>>    }
>>>>
>>>> +/*
>>>> + * If NOT enough dirty cold data segments for fggc, fggc would consume
>>>> + * a valuable free segment, which would slow down the fggc procedure,
>>>> + * If there are NO COLD dirty segment, we do not set_cold_page.
>>>> + */
>>>> +static void fggc_set_cold_data(struct page *page)
>>>> +{
>>>> +	struct f2fs_sb_info *sbi = F2FS_P_SB(page);
>>>> +	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
>>>> +	int nr_cold_dirties;
>>>> +
>>>> +	mutex_lock(&dirty_i->seglist_lock);
>>>> +	nr_cold_dirties = dirty_i->nr_dirty[DIRTY_COLD_DATA];
>>>> +	mutex_unlock(&dirty_i->seglist_lock);
>>>> +
>>>> +	if (nr_cold_dirties)
>>>> +		set_cold_data(page);
>>>> +
>>>> +}
>>>>    static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
>>>>    							unsigned int segno, int off)
>>>>    {
>>>> @@ -706,7 +725,7 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
>>>>    			remove_dirty_inode(inode);
>>>>    		}
>>>>
>>>> -		set_cold_data(page);
>>>> +		fggc_set_cold_data(page);
>>>>
>>>>    		err = do_write_data_page(&fio);
>>>>    		if (err == -ENOMEM && is_dirty) {
>>>> --
>>>> 2.10.1
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> 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

  reply	other threads:[~2017-02-24  3:05 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-22 10:28 [PATCH 1/2] f2fs fg_gc: node segment is prior to data segment selected victim Hou Pengyang
2017-02-22 10:29 ` [PATCH 2/2] f2fs:use fggc_set_cold_data instead of set_cold_data in fggc Hou Pengyang
2017-02-23  0:39   ` Jaegeuk Kim
2017-02-23  2:04     ` Hou Pengyang
2017-02-23  2:14       ` Jaegeuk Kim
2017-02-24  2:07       ` Chao Yu
2017-02-24  3:04         ` Hou Pengyang [this message]
2017-02-24  2:03 ` [PATCH 1/2] f2fs fg_gc: node segment is prior to data segment selected victim Chao Yu

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=58AFA2C9.70602@huawei.com \
    --to=houpengyang@huawei.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=yuchao0@huawei.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.