On 06/04, Chao Yu wrote:
> On 2018/6/2 2:35, Jaegeuk Kim wrote:
> > On 06/01, heyunlei wrote:
> >>
> >>
> >>> -----Original Message-----
> >>> From: Jaegeuk Kim [mailto:jaeg...@kernel.org]
> >>> Sent: Friday, June 01, 2018 1:56 AM
> >>> To: heyunlei
> >>> Cc: Yuchao (T); linux-f2fs-devel@lists.sourceforge.net; Wangbintian; 
> >>> Zhangdianfang (Euler)
> >>> Subject: Re: [f2fs-dev][PATCH RFC] Revert "f2fs: avoid cpu lockup"
> >>>
> >>> Hi Yunlei,
> >>>
> >> Hi Jaegeuk,
> >>> On 05/31, Yunlei He wrote:
> >>>> This reverts commit 4db08d016ccedb5b97869724a096990acad59685 to
> >>>> fix hungtask problem which can be reproduced as follow:
> >>>>
> >>>> Thread 0~3:
> >>>>
> >>>> while true
> >>>> do
> >>>>  touch /xxx/test/file_xxx
> >>>> done
> >>>>
> >>>> Thread 5 write a new checkpoint every three seconds.
> >>>>
> >>>> In the meantime, fio start 16 threads for randwrite.
> >>>>
> >>>> With my debug info, cycles num will exceed 1000 in function
> >>>> f2fs_sync_dirty_inodes, and most of cycle will be dropped
> >>>> into congestion_wait() and sleep more than 20ms.
> >>>
> >>> Original patch tries to fix watchdog which sync_dirty_inodes() grabs one
> >>> cpu for a long time. Have you tried reproduce that as well?
> >>>
> >>
> >> I have test this patch with increasing touch file threads to 32,and other 
> >> remain
> >> same as previous, But I have not reproduce your problem. 
> >>
> >> Besides, I try to test the code just remove this line:
> >>            congestion_wait(BLK_RW_ASYNC, HZ/50);
> >>
> >> It's also ok to my test, and cycle num reduced to < 3
> > 
> > You may be able to add threshold here?
> 
> Hmm, if cycle exceeds threshold,  still we can encounter this issue. How about
> just removing congestion_wait, and keep cond_resched, it can switch current 
> cpu out?

Okay, let's try that and see what'll happen.

Thanks,

> 
> Thanks,
> 
> > 
> >>
> >> Thanks.
> >>
> >>> Thanks,
> >>>
> >>>>
> >>>> Signed-off-by: Yunlei He <heyun...@huawei.com>
> >>>> ---
> >>>>  fs/f2fs/checkpoint.c | 10 ----------
> >>>>  1 file changed, 10 deletions(-)
> >>>>
> >>>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> >>>> index 8eb184c..76e1856 100644
> >>>> --- a/fs/f2fs/checkpoint.c
> >>>> +++ b/fs/f2fs/checkpoint.c
> >>>> @@ -944,7 +944,6 @@ int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, 
> >>>> enum inode_type type)
> >>>>          struct inode *inode;
> >>>>          struct f2fs_inode_info *fi;
> >>>>          bool is_dir = (type == DIR_INODE);
> >>>> -        unsigned long ino = 0;
> >>>>
> >>>>          trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir,
> >>>>                                  get_pages(sbi, is_dir ?
> >>>> @@ -967,8 +966,6 @@ int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, 
> >>>> enum inode_type type)
> >>>>          inode = igrab(&fi->vfs_inode);
> >>>>          spin_unlock(&sbi->inode_lock[type]);
> >>>>          if (inode) {
> >>>> -                unsigned long cur_ino = inode->i_ino;
> >>>> -
> >>>>                  if (is_dir)
> >>>>                          F2FS_I(inode)->cp_task = current;
> >>>>
> >>>> @@ -978,13 +975,6 @@ int f2fs_sync_dirty_inodes(struct f2fs_sb_info 
> >>>> *sbi, enum inode_type type)
> >>>>                          F2FS_I(inode)->cp_task = NULL;
> >>>>
> >>>>                  iput(inode);
> >>>> -                /* We need to give cpu to another writers. */
> >>>> -                if (ino == cur_ino) {
> >>>> -                        congestion_wait(BLK_RW_ASYNC, HZ/50);
> >>>> -                        cond_resched();
> >>>> -                } else {
> >>>> -                        ino = cur_ino;
> >>>> -                }
> >>>>          } else {
> >>>>                  /*
> >>>>                   * We should submit bio, since it exists several
> >>>> --
> >>>> 1.9.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

Reply via email to