> -----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.

> 
> >>
> >>> 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.
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