This patch will not bring significant performance improvements, I test this on 
mobile phone, use androbench, the sequential write test case was open file with 
O_TRUNC, set write size to 4KB,  performance improved about 2%-3%. If write 
size set to 32MB, performance improved about 0.5% .


-----邮件原件-----
发件人: Chao Yu <yuch...@huawei.com> 
发送时间: 2021年5月6日 18:38
收件人: Gao Xiang <hsiang...@aol.com>
抄送: Gao Xiang <hsiang...@redhat.com>; changfeng...@vivo.com; 
jaeg...@kernel.org; linux-f2fs-devel@lists.sourceforge.net
主题: Re: [f2fs-dev] 答复: [PATCH] f2fs: compress: avoid unnecessary check in 
f2fs_prepare_compress_overwrite

Hi Xiang,

On 2021/5/6 17:58, Gao Xiang wrote:
> Hi Chao,
> 
> On Thu, May 06, 2021 at 05:15:04PM +0800, Chao Yu wrote:
>> On 2021/4/26 17:00, Gao Xiang wrote:
>>> On Mon, Apr 26, 2021 at 04:42:20PM +0800, changfeng...@vivo.com wrote:
>>>> Thank you for the reminder, I hadn't thought about fallocate before.
>>>> I have done some tests and the results are as expected.
>>>> Here is my test method, create a compressed file, and use fallocate 
>>>> with keep size, when write data to expand area, 
>>>> f2fs_prepare_compress_overwrite always return 0, the behavior is same as 
>>>> my patch , apply my patch can avoid those check.
>>>> Is there anything else I haven't thought of?
>>>
>>> Nope, I didn't look into the implementation. Just a wild guess.
>>>
>>> (I just wondered if the cluster size is somewhat large (e.g. 64k),
>>>    but with a partial fallocate (e.g. 16k), and does it behave ok?
>>>    or some other corner cases/conditions are needed.)
>>
>> Xiang, sorry for late reply.
>>
>> Now, f2fs triggers compression only if one cluster is fully written, 
>> e.g. cluster size is 16kb, isize is 8kb, then the first cluster is 
>> non-compressed one, so we don't need to prepare for compressed 
>> cluster overwrite during write_begin(). Also, blocks fallocated 
>> beyond isize should never be compressed, so we don't need to worry 
>> about that.
>>
> 
> Yeah, that could make it unnoticable. but my main concern is actually 
> not what the current runtime compression logic is, but what the 
> on-disk compresion format actually is, or there could cause 
> compatibility issue if some later kernel makes full use of this and 
> use old kernels

That's related, if there is layout v2 or we updated runtime compression policy 
later, it needs to reconsider newly introduced logic of this patch, I guess we 
need to add comments here to indicate why we can skip the preparation function.

> instead (also considering some corrupted compression indexes, which is 
> not generated by the normal runtime compression logic.)

Yes, that's good concern, but that was not done by 
f2fs_prepare_compress_overwrite(), another sanity check logic needs to be 
designed and implemented in separated patch.

> 
> My own suggestion about this is still verifying compress indexes first 
> rather than relying much on runtime logic constraint. (Except that 
> this patch can show signifiant benefit performance numbers to prove it 
> can improve performance a lot.) Just my own premature thoughts.

Fengnan, could you please give some numbers to show how that check can impact 
performance?

Thanks,

> 
> Thanks,
> Gao Xiang
> 
>> Thanks,
>>
>>>
>>> If that is fine, I have no problem about this, yet i_size here is 
>>> generally somewhat risky since after post-EOF behavior changes (e.g. 
>>> supporting FALLOC_FL_ZERO_RANGE with keep size later), it may cause 
>>> some potential regression.
>>>
>>>>
>>>> -----邮件原件-----
>>>> 发件人: Gao Xiang <hsiang...@redhat.com>
>>>> 发送时间: 2021年4月26日 11:19
>>>> 收件人: Fengnan Chang <changfeng...@vivo.com>
>>>> 抄送: c...@kernel.org; jaeg...@kernel.org; 
>>>> linux-f2fs-devel@lists.sourceforge.net
>>>> 主题: Re: [f2fs-dev] [PATCH] f2fs: compress: avoid unnecessary check 
>>>> in f2fs_prepare_compress_overwrite
>>>>
>>>> On Mon, Apr 26, 2021 at 10:11:53AM +0800, Fengnan Chang wrote:
>>>>> when write compressed file with O_TRUNC, there will be a lot of 
>>>>> unnecessary check valid blocks in f2fs_prepare_compress_overwrite, 
>>>>> especially when written in page size, remove it.
>>>>>
>>>>> Signed-off-by: Fengnan Chang <changfeng...@vivo.com>
>>>>
>>>> Even though I didn't look into the whole thing, my reaction here is 
>>>> roughly how to handle fallocate with keep size? Does it work as expected?
>>>>
>>>>> ---
>>>>>    fs/f2fs/data.c | 4 ++++
>>>>>    1 file changed, 4 insertions(+)
>>>>>
>>>>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 
>>>>> cf935474ffba..9c3b0849f35e 100644
>>>>> --- a/fs/f2fs/data.c
>>>>> +++ b/fs/f2fs/data.c
>>>>> @@ -3270,6 +3270,7 @@ static int f2fs_write_begin(struct file 
>>>>> *file, struct address_space *mapping,
>>>>>           struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
>>>>>           struct page *page = NULL;
>>>>>           pgoff_t index = ((unsigned long long) pos) >> PAGE_SHIFT;
>>>>> + pgoff_t end = (i_size_read(inode) + PAGE_SIZE - 1) >> 
>>>>> +PAGE_SHIFT;
>>>>>           bool need_balance = false, drop_atomic = false;
>>>>>           block_t blkaddr = NULL_ADDR;
>>>>>           int err = 0;
>>>>> @@ -3306,6 +3307,9 @@ static int f2fs_write_begin(struct file 
>>>>> *file, struct address_space *mapping,
>>>>>
>>>>>                   *fsdata = NULL;
>>>>>
>>>>> +         if (index >= end)
>>>>> +                 goto repeat;
>>>>> +
>>>>>                   ret = f2fs_prepare_compress_overwrite(inode, pagep,
>>>>>                                                           index, fsdata);
>>>>>                   if (ret < 0) {
>>>>> --
>>>>> 2.29.0
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Linux-f2fs-devel mailing list
>>> Linux-f2fs-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
>>>
>>
>>
>> _______________________________________________
>> Linux-f2fs-devel mailing list
>> Linux-f2fs-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
> .
> 




_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to