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
