On 06/01, heyunlei wrote:
> 
> 
> >-----Original Message-----
> >From: Jaegeuk Kim [mailto:[email protected]]
> >Sent: Friday, June 01, 2018 1:56 AM
> >To: heyunlei
> >Cc: Yuchao (T); [email protected]; 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?

> 
> Thanks.
> 
> >Thanks,
> >
> >>
> >> Signed-off-by: Yunlei He <[email protected]>
> >> ---
> >>  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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to