> -----Original Message-----
> From: changfeng...@vivo.com <changfeng...@vivo.com> On Behalf Of
> Chao Yu
> Sent: Monday, November 15, 2021 11:29 AM
> To: 常凤楠 <changfeng...@vivo.com>; jaeg...@kernel.org
> Cc: linux-f2fs-devel@lists.sourceforge.net
> Subject: Re: Do we need serial io for compress file?
> 
> On 2021/11/15 10:56, 常凤楠 wrote:
> >
> >
> >> -----Original Message-----
> >> From: changfeng...@vivo.com <changfeng...@vivo.com> On Behalf
> Of Chao
> >> Yu
> >> Sent: Monday, November 15, 2021 10:47 AM
> >> To: 常凤楠 <changfeng...@vivo.com>; jaeg...@kernel.org
> >> Cc: linux-f2fs-devel@lists.sourceforge.net
> >> Subject: Re: Do we need serial io for compress file?
> >>
> >> On 2021/11/15 10:25, 常凤楠 wrote:
> >>>> -----Original Message-----
> >>>> From: changfeng...@vivo.com <changfeng...@vivo.com> On
> Behalf
> >> Of Chao
> >>>> Yu
> >>>> Sent: Saturday, November 13, 2021 2:21 PM
> >>>> To: 常凤楠 <changfeng...@vivo.com>; jaeg...@kernel.org
> >>>> Cc: linux-f2fs-devel@lists.sourceforge.net
> >>>> Subject: Re: Do we need serial io for compress file?
> >>>>
> >>>> On 2021/11/10 9:49, 常凤楠 wrote:
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: changfeng...@vivo.com <changfeng...@vivo.com> On
> >> Behalf
> >>>> Of Chao
> >>>>>> Yu
> >>>>>> Sent: Tuesday, November 9, 2021 9:41 PM
> >>>>>> To: 常凤楠 <changfeng...@vivo.com>; jaeg...@kernel.org
> >>>>>> Cc: linux-f2fs-devel@lists.sourceforge.net
> >>>>>> Subject: Re: Do we need serial io for compress file?
> >>>>>>
> >>>>>> On 2021/11/9 9:59, 常凤楠 wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: changfeng...@vivo.com <changfeng...@vivo.com> On
> >>>> Behalf
> >>>>>> Of Chao
> >>>>>>>> Yu
> >>>>>>>> Sent: Monday, November 8, 2021 10:21 PM
> >>>>>>>> To: 常凤楠 <changfeng...@vivo.com>; jaeg...@kernel.org
> >>>>>>>> Cc: linux-f2fs-devel@lists.sourceforge.net
> >>>>>>>> Subject: Re: Do we need serial io for compress file?
> >>>>>>>>
> >>>>>>>> On 2021/11/8 11:54, Fengnan Chang wrote:
> >>>>>>>>> In my test, serial io for compress file will make multithread
> >>>>>>>>> small write performance drop a lot.
> >>>>>>>>>
> >>>>>>>>> I'm try to fingure out why we need __should_serialize_io, IMO,
> >>>>>>>>> we use __should_serialize_io to avoid deadlock or try to
> >>>>>>>>> improve sequential performance, but I don't understand why
> we
> >>>>>>>>> should
> >> do
> >>>>>>>>> this for
> >>>>>>>>
> >>>>>>>> It was introduced to avoid fragmentation of file blocks.
> >>>>>>>
> >>>>>>> So, for small write on compress file, is this still necessary? I
> >>>>>>> think we
> >>>>>> should treat compress file as regular file.
> >>>>>>
> >>>>>> Any real scenario there? let me know if I missed any cases, as I
> >>>>>> saw, most compressible files are not small...
> >>>>>
> >>>>> Maybe my description is incorrect, small write means write with
> >>>>> small
> >>>> block size, for example 4K.
> >>>>> When write multi compress file with bs=4k in multithread,  the
> >>>>> serialize
> >>>> io make performance drop a lot.
> >>>>
> >>>> Got it, but I mean what the real usercase is... rather than
> >>>> benchmark scenario.
> >>>
> >>> I think it’s quite common user case if we take compress file as
> >>> normal file to use,
> >>
> >> Well, I mean what's the type of file that you want to compress, and
> >> which apps will use them? and what's the IO model runs on
> compressed file?
> > For now, I haven't test this on normal app, I test compress file on a test
> app, it's try to simulate IO type of actual user case.
> > This case is try to simulate multithread SQL performance and random
> write, the test file is db and no extension name file.
> 
> Oh, IMO, SQLite is not target application scenario of f2fs compression
> functionality.
> 
> It may suffer performance regression due to write amplification during
> SQLite's random write.

Um, for now it's may not worthy enough , maybe it will become bottleneck in 
future, I still think fix this is necessary if we can avoid fragment at same 
time.
Maybe we should discuss this later.

Thanks.
> 
> Thanks,
> 
> >>
> >> Thanks,
> >>
> >>> write multi file with bs < cluster size at same time will be
> >>> bothered by
> >> this issue.
> >>>
> >>>>
> >>>>>
> >>>>>>
> >>>>>>>>
> >>>>>>>>> compressed file. In my test, if we just remove this, write
> >>>>>>>>> same file in multithread will have problem, but parallel write
> >>>>>>>>> different files in multithread
> >>>>>>>>
> >>>>>>>> What do you mean by "write same file in multithread will have
> >>>>>> problem"?
> >>>>>>>
> >>>>>>> If just remove compress file in __should_serialize_io()
> >>>>>>>
> >>>>>>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index
> >>>>>>> f4fd6c246c9a..7bd429b46429 100644
> >>>>>>> --- a/fs/f2fs/data.c
> >>>>>>> +++ b/fs/f2fs/data.c
> >>>>>>> @@ -3165,8 +3165,8 @@ static inline bool
> >>>>>>> __should_serialize_io(struct
> >>>>>> inode *inode,
> >>>>>>>             if (IS_NOQUOTA(inode))
> >>>>>>>                     return false;
> >>>>>>>
> >>>>>>> -       if (f2fs_need_compress_data(inode))
> >>>>>>> -               return true;
> >>>>>>> +       //if (f2fs_need_compress_data(inode))
> >>>>>>> +       //      return true;
> >>>>>>>             if (wbc->sync_mode != WB_SYNC_ALL)
> >>>>>>>                     return true;
> >>>>>>>             if (get_dirty_pages(inode) >=
> >>>>>>> SM_I(F2FS_I_SB(inode))->min_seq_blocks)
> >>>>>>>
> >>>>>>> and use fio to start multi thread to write same file, fio will hung.
> >>>>>>
> >>>>>> Any potential hangtask issue there? did you get any stack
> >>>>>> backtrace
> >> log?
> >>>>>>
> >>>>> Yes, it's quite easy to reproduce in my test.
> >>>>
> >>>> What's your testcase? and filesystem configuration?
> >>>
> >>> The test case as below fio conf. filesystem configure, the whole
> >>> kernel
> >> config as attached config.rar file.
> >>> CONFIG_F2FS_FS=y
> >>> CONFIG_F2FS_STAT_FS=y
> >>> CONFIG_F2FS_FS_XATTR=y
> >>> CONFIG_F2FS_FS_POSIX_ACL=y
> >>> CONFIG_F2FS_FS_SECURITY=y
> >>> CONFIG_F2FS_CHECK_FS=y
> >>> CONFIG_F2FS_FAULT_INJECTION=y
> >>> CONFIG_F2FS_FS_COMPRESSION=y
> >>> CONFIG_F2FS_FS_LZO=y
> >>> CONFIG_F2FS_FS_LZORLE=y
> >>> CONFIG_F2FS_FS_LZ4=y
> >>> CONFIG_F2FS_FS_LZ4HC=y
> >>> CONFIG_F2FS_FS_ZSTD=y
> >>> CONFIG_F2FS_IOSTAT=y
> >>>>
> >>>> Thanks,
> >>>>
> >>>>> Backtrace:
> >>>>> [  493.915408] INFO: task fio:479 blocked for more than 122
> seconds.
> >>>>> [  493.915729]       Not tainted 5.15.0-rc1+ #516
> >>>>> [  493.915845] "echo 0 >
> /proc/sys/kernel/hung_task_timeout_secs"
> >>>> disables this message.
> >>>>> [  493.916265] task:fio             state:D stack:13008 pid:  479
> >> ppid:
> >>>> 474 flags:0x00004000
> >>>>> [  493.916686] Call Trace:
> >>>>> [  493.917310]  __schedule+0x317/0x920 [  493.917560]  ?
> >>>>> rcu_read_lock_sched_held+0x23/0x80
> >>>>> [  493.917705]  schedule+0x59/0xc0 [  493.917798]
> >>>>> io_schedule+0x12/0x40 [  493.917895]
> >>>>> __lock_page+0x141/0x230 [  493.924703]  ?
> >>>>> filemap_invalidate_unlock_two+0x40/0x40
> >>>>> [  493.926404]  f2fs_write_multi_pages+0x1a7/0x9c0
> >>>>> [  493.926579]  f2fs_write_cache_pages+0x711/0x840
> >>>>> [  493.926771]  f2fs_write_data_pages+0x20e/0x3f0
> >> [  493.926906]  ?
> >>>>> rcu_read_lock_held_common+0xe/0x40
> >>>>> [  493.928305]  ? do_writepages+0xd1/0x190 [  493.928439]
> >>>>> do_writepages+0xd1/0x190 [  493.928551]
> >>>>> file_write_and_wait_range+0xa3/0xe0
> >>>>> [  493.928690]  f2fs_do_sync_file+0x10f/0x910 [  493.928823]
> >>>>> do_fsync+0x38/0x60 [  493.928924]  __x64_sys_fsync+0x10/0x20 [
> >>>>> 493.929208]  do_syscall_64+0x3a/0x90 [  493.929327]
> >>>>> entry_SYSCALL_64_after_hwframe+0x44/0xae
> >>>>> [  493.929486] RIP: 0033:0x7f64cb26ca97 [  493.929636] RSP:
> >>>>> 002b:00007ffe3863d180 EFLAGS: 00000293 ORIG_RAX:
> >>>> 000000000000004a [
> >>>>> 493.929816] RAX: ffffffffffffffda RBX: 0000000000000005 RCX:
> >>>>> 00007f64cb26ca97 [  493.929975] RDX: 0000000000000000 RSI:
> >>>>> 000056378a8ad540 RDI: 0000000000000005 [  493.931164] RBP:
> >>>>> 00007f647e23f000 R08: 0000000000000000 R09: 00007ffe387e6170 [
> >>>>> 493.931347] R10: 00007ffe387e61b0 R11: 0000000000000293 R12:
> >>>>> 0000000000000003 [  493.931517] R13: 00007f647e2836d8 R14:
> >>>> 0000000000000000 R15: 000056378a8ad568 [  493.931802] INFO:
> task
> >>>> fio:480 blocked for more than 122 seconds.
> >>>>> [  493.931946]       Not tainted 5.15.0-rc1+ #516
> >>>>> [  493.932202] "echo 0 >
> /proc/sys/kernel/hung_task_timeout_secs"
> >>>> disables this message.
> >>>>> [  493.932382] task:fio             state:D stack:13216 pid:  480
> >> ppid:
> >>>> 474 flags:0x00000000
> >>>>> [  493.932596] Call Trace:
> >>>>> [  493.932681]  __schedule+0x317/0x920 [  493.932796]  ?
> >>>>> rcu_read_lock_sched_held+0x23/0x80
> >>>>> [  493.932939]  schedule+0x59/0xc0 [  493.933180]
> >>>>> io_schedule+0x12/0x40 [  493.933285]
> >>>>> __lock_page+0x141/0x230 [  493.933391]  ?
> >>>>> filemap_invalidate_unlock_two+0x40/0x40
> >>>>> [  493.933539]  f2fs_write_cache_pages+0x38a/0x840
> >>>>> [  493.933708]  ? do_writepages+0xd1/0x190 [  493.933821]  ?
> >>>>> do_writepages+0xd1/0x190 [  493.933939]
> >>>>> f2fs_write_data_pages+0x20e/0x3f0 [  493.935516]  ?
> >>>>> rcu_read_lock_held_common+0xe/0x40
> >>>>> [  493.935682]  ? do_writepages+0xd1/0x190 [  493.935790]
> >>>>> do_writepages+0xd1/0x190 [  493.935895]
> >>>>> file_write_and_wait_range+0xa3/0xe0
> >>>>> [  493.938074]  f2fs_do_sync_file+0x10f/0x910 [  493.938225]
> >>>>> do_fsync+0x38/0x60 [  493.938328]  __x64_sys_fsync+0x10/0x20 [
> >>>>> 493.938430]  do_syscall_64+0x3a/0x90 [  493.938548]
> >>>>> entry_SYSCALL_64_after_hwframe+0x44/0xae
> >>>>> [  493.938683] RIP: 0033:0x7f64cb26ca97 [  493.938783] RSP:
> >>>>> 002b:00007ffe3863d180 EFLAGS: 00000293 ORIG_RAX:
> >>>> 000000000000004a [
> >>>>> 493.938969] RAX: ffffffffffffffda RBX: 0000000000000005 RCX:
> >>>>> 00007f64cb26ca97 [  493.940413] RDX: 0000000000000000 RSI:
> >>>>> 000056378a8ad540 RDI: 0000000000000005 [  493.940591] RBP:
> >>>>> 00007f647e283a10 R08: 0000000000000000 R09: 00007ffe387e6170 [
> >>>>> 493.940759] R10: 00007ffe387e61b0 R11: 0000000000000293 R12:
> >>>>> 0000000000000003 [  493.940924] R13: 00007f647e2c80e8 R14:
> >>>> 0000000000000000 R15: 000056378a8ad568 [  493.941341] INFO:
> >> lockdep
> >>>> is turned off.
> >>>>> [  616.796413] INFO: task fio:479 blocked for more than 245
> seconds.
> >>>>> [  616.796706]       Not tainted 5.15.0-rc1+ #516
> >>>>> [  616.796824] "echo 0 >
> /proc/sys/kernel/hung_task_timeout_secs"
> >>>> disables this message.
> >>>>> [  616.827081] task:fio             state:D stack:13008 pid:  479
> >> ppid:
> >>>> 474 flags:0x00004000
> >>>>> [  616.841373] Call Trace:
> >>>>> [  616.841492]  __schedule+0x317/0x920 [  616.841635]  ?
> >>>>> rcu_read_lock_sched_held+0x23/0x80
> >>>>> [  616.841767]  schedule+0x59/0xc0 [  616.841858]
> >>>>> io_schedule+0x12/0x40 [  616.841952]
> >>>>> __lock_page+0x141/0x230 [  616.852135]  ?
> >>>>> filemap_invalidate_unlock_two+0x40/0x40
> >>>>> [  616.852305]  f2fs_write_multi_pages+0x1a7/0x9c0
> >>>>> [  616.852455]  f2fs_write_cache_pages+0x711/0x840
> >>>>> [  616.852661]  f2fs_write_data_pages+0x20e/0x3f0
> >> [  616.852785]  ?
> >>>>> rcu_read_lock_held_common+0xe/0x40
> >>>>> [  616.852924]  ? do_writepages+0xd1/0x190 [  616.853281]
> >>>>> do_writepages+0xd1/0x190 [  616.853409]
> >>>>> file_write_and_wait_range+0xa3/0xe0
> >>>>> [  616.853537]  f2fs_do_sync_file+0x10f/0x910 [  616.853670]
> >>>>> do_fsync+0x38/0x60 [  616.853773]  __x64_sys_fsync+0x10/0x20 [
> >>>>> 616.853869]  do_syscall_64+0x3a/0x90 [  616.853971]
> >>>>> entry_SYSCALL_64_after_hwframe+0x44/0xae
> >>>>> [  616.863145] RIP: 0033:0x7f64cb26ca97 [  616.863273] RSP:
> >>>>> 002b:00007ffe3863d180 EFLAGS: 00000293 ORIG_RAX:
> >>>> 000000000000004a [
> >>>>> 616.863468] RAX: ffffffffffffffda RBX: 0000000000000005 RCX:
> >>>>> 00007f64cb26ca97 [  616.863635] RDX: 0000000000000000 RSI:
> >>>>> 000056378a8ad540 RDI: 0000000000000005 [  616.863803] RBP:
> >>>>> 00007f647e23f000 R08: 0000000000000000 R09: 00007ffe387e6170 [
> >>>>> 616.863975] R10: 00007ffe387e61b0 R11: 0000000000000293 R12:
> >>>>> 0000000000000003 [  616.870147] R13: 00007f647e2836d8 R14:
> >>>> 0000000000000000 R15: 000056378a8ad568 [  616.870388] INFO:
> task
> >>>> fio:480 blocked for more than 245 seconds.
> >>>>> [  616.870537]       Not tainted 5.15.0-rc1+ #516
> >>>>> [  616.870650] "echo 0 >
> /proc/sys/kernel/hung_task_timeout_secs"
> >>>> disables this message.
> >>>>> [  616.870833] task:fio             state:D stack:13216 pid:  480
> >> ppid:
> >>>> 474 flags:0x00000000
> >>>>> [  616.872161] Call Trace:
> >>>>> [  616.872257]  __schedule+0x317/0x920 [  616.872366]  ?
> >>>>> rcu_read_lock_sched_held+0x23/0x80
> >>>>> [  616.872503]  schedule+0x59/0xc0 [  616.872596]
> >>>>> io_schedule+0x12/0x40 [  616.872694]
> >>>>> __lock_page+0x141/0x230 [  616.872803]  ?
> >>>>> filemap_invalidate_unlock_two+0x40/0x40
> >>>>> [  616.872945]  f2fs_write_cache_pages+0x38a/0x840
> >>>>> [  616.873331]  ? do_writepages+0xd1/0x190 [  616.873448]  ?
> >>>>> do_writepages+0xd1/0x190 [  616.873569]
> >>>>> f2fs_write_data_pages+0x20e/0x3f0 [  616.873694]  ?
> >>>>> rcu_read_lock_held_common+0xe/0x40
> >>>>> [  616.873833]  ? do_writepages+0xd1/0x190 [  616.873936]
> >>>>> do_writepages+0xd1/0x190 [  616.874272]
> >>>>> file_write_and_wait_range+0xa3/0xe0
> >>>>> [  616.874424]  f2fs_do_sync_file+0x10f/0x910 [  616.874560]
> >>>>> do_fsync+0x38/0x60 [  616.874660]  __x64_sys_fsync+0x10/0x20 [
> >>>>> 616.874759]  do_syscall_64+0x3a/0x90 [  616.874863]
> >>>>> entry_SYSCALL_64_after_hwframe+0x44/0xae
> >>>>> [  616.875792] RIP: 0033:0x7f64cb26ca97 [  616.875905] RSP:
> >>>>> 002b:00007ffe3863d180 EFLAGS: 00000293 ORIG_RAX:
> >>>> 000000000000004a [
> >>>>> 616.876345] RAX: ffffffffffffffda RBX: 0000000000000005 RCX:
> >>>>> 00007f64cb26ca97 [  616.876515] RDX: 0000000000000000 RSI:
> >>>>> 000056378a8ad540 RDI: 0000000000000005 [  616.876692] RBP:
> >>>>> 00007f647e283a10 R08: 0000000000000000 R09: 00007ffe387e6170 [
> >>>>> 616.876859] R10: 00007ffe387e61b0 R11: 0000000000000293 R12:
> >>>>> 0000000000000003 [  616.877231] R13: 00007f647e2c80e8 R14:
> >>>> 0000000000000000 R15: 000056378a8ad568 [  616.877456] INFO:
> >> lockdep
> >>>> is turned off.
> >>>>>> If there is, it needs to figure out the root cause.
> >>>>>>
> >>>>>> Thanks,
> >>>>>>
> >>>>>>> fio.conf:
> >>>>>>> [global]
> >>>>>>> direct=1
> >>>>>>> numjobs=8
> >>>>>>> time_based
> >>>>>>> runtime=30
> >>>>>>> ioengine=sync
> >>>>>>> iodepth=16
> >>>>>>> buffer_pattern="ZZZZ"
> >>>>>>> fsync=1
> >>>>>>>
> >>>>>>> [file0]
> >>>>>>> name=fio-rand-RW
> >>>>>>> filename=fio-rand-RW
> >>>>>>> rw=rw
> >>>>>>> rwmixread=60
> >>>>>>> rwmixwrite=40
> >>>>>>> bs=1M
> >>>>>>> size=64M
> >>>>>>>
> >>>>>>> [file1]
> >>>>>>> name=fio-rand-RW
> >>>>>>> filename=fio-rand-RW
> >>>>>>> rw=randrw
> >>>>>>> rwmixread=60
> >>>>>>> rwmixwrite=40
> >>>>>>> bs=4K
> >>>>>>> size=64M
> >>>>>>>
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>>
> >>>>>>>>> is ok. So I think maybe we should use another lock to allow
> >>>>>>>>> write
> >>>>>>>> different files in multithread.
> >>>>>>>>>

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

Reply via email to