Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933901AbbLWJxt (ORCPT ); Wed, 23 Dec 2015 04:53:49 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:55819 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753360AbbLWJxp (ORCPT ); Wed, 23 Dec 2015 04:53:45 -0500 X-AuditID: cbfee61a-f79266d000003652-a9-567a6f288deb From: Chao Yu To: "'He YunLei'" Cc: "'Jaegeuk Kim'" , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net References: <1450755521-20015-1-git-send-email-jaegeuk@kernel.org> <1450755521-20015-2-git-send-email-jaegeuk@kernel.org> <00bd01d13c78$8a2afc30$9e80f490$@samsung.com> <56794358.8030801@huawei.com> In-reply-to: <56794358.8030801@huawei.com> Subject: RE: [f2fs-dev] [PATCH 2/2] f2fs: speed up shrinking extent tree entries Date: Wed, 23 Dec 2015 17:52:56 +0800 Message-id: <010e01d13d67$cfc2a1e0$6f47e5a0$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-index: AQK1cPONvsTjEMskIgHpFaLccC8I+AFp8NjVAidB4oICF1aPVpziqOzQ Content-language: zh-cn X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrALMWRmVeSWpSXmKPExsVy+t9jQV2N/Kowg6tLeS22Ho+xeLJ+FrPF pUXuFnv2nmSxuLxrDpsDq0fLkbesHptWdbJ57F7wmcnj8ya5AJYoLpuU1JzMstQifbsErowH HfcZC85rVfxcGtbA2KvUxcjJISFgIrFr/3F2CFtM4sK99WxdjBwcQgKzGCXeG3UxcgGZrxgl Grd2sIDUsAmoSCzv+M8EYosIqEqcOnqYCaSIWaCXUWLu4rtgCSGBk4wS+7ZpgNicAloSf7d+ YQWxhQUCJF5/OsEGYrMANe+d9oAZxOYVsJQ4e6uNHcIWlPgx+R7YMmag3vU7jzNB2PISm9e8 ZYY4VEFix9nXjBBHuEn07PzHCFEjLrHxyC2WCYxCs5CMmoVk1Cwko2YhaVnAyLKKUSK1ILmg OCk91zAvtVyvODG3uDQvXS85P3cTIzgenkntYDy4y/0QowAHoxIPr0NbZZgQa2JZcWXuIUYJ DmYlEd70d0Ah3pTEyqrUovz4otKc1OJDjNIcLErivLWXIsOEBNITS1KzU1MLUotgskwcnFIN jNvijk/9uFLP+0jijcMLf6UxeupzZGrsZAnOmTXl9KIV66dU6X3POP7SwHym0nRTs52qHxQb b+fvmN1WMfEoa4hBjcJCje/SNuGrJMNebV6R1tI7QazCYK1Ay8m5O2Lfaefq2K8/xGU5qyoq T79r7vO5O/MvC2wS5pKft8GpZaubcuDqL+y2IUosxRmJhlrMRcWJAFcPx6CDAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5536 Lines: 169 > -----Original Message----- > From: He YunLei [mailto:heyunlei@huawei.com] > Sent: Tuesday, December 22, 2015 8:35 PM > To: Chao Yu > Cc: 'Jaegeuk Kim'; linux-fsdevel@vger.kernel.org; linux-kernel@vger.kernel.org; > linux-f2fs-devel@lists.sourceforge.net > Subject: Re: [f2fs-dev] [PATCH 2/2] f2fs: speed up shrinking extent tree entries > > On 2015/12/22 13:20, Chao Yu wrote: > > Hi Jaegeuk, > > > > We should update &total_zombie_tree whenever removing unreferenced > > extent tree during shrinking: > > - f2fs_shrink_extent_tree > > if (!atomic_read(&et->refcount)) { > > ... > > atomic_dec(&sbi->total_ext_tree); > > atomic_dec(&sbi->total_zombie_tree); > > ... > > } > > > > Other parts look good to me. :) > > > > Reviewed-by: Chao Yu > > > > Thanks, > > > >> -----Original Message----- > >> From: Jaegeuk Kim [mailto:jaegeuk@kernel.org] > >> Sent: Tuesday, December 22, 2015 11:39 AM > >> To: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; > >> linux-f2fs-devel@lists.sourceforge.net > >> Cc: Jaegeuk Kim > >> Subject: [f2fs-dev] [PATCH 2/2] f2fs: speed up shrinking extent tree entries > >> > >> If there is no candidates for shrinking slab entries, we don't need to traverse > >> any trees at all. > >> > >> Signed-off-by: Jaegeuk Kim > >> --- > >> fs/f2fs/extent_cache.c | 12 ++++++++++++ > >> fs/f2fs/f2fs.h | 1 + > >> fs/f2fs/shrinker.c | 2 +- > >> 3 files changed, 14 insertions(+), 1 deletion(-) > >> > >> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c > >> index 0e97d6af..32693af 100644 > >> --- a/fs/f2fs/extent_cache.c > >> +++ b/fs/f2fs/extent_cache.c > >> @@ -71,6 +71,8 @@ static struct extent_tree *__grab_extent_tree(struct inode *inode) > >> atomic_set(&et->refcount, 0); > >> et->count = 0; > >> atomic_inc(&sbi->total_ext_tree); > >> + } else { > >> + atomic_dec(&sbi->total_zombie_tree); > >> } > >> atomic_inc(&et->refcount); > >> up_write(&sbi->extent_tree_lock); > >> @@ -547,10 +549,14 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int > >> nr_shrink) > >> unsigned int found; > >> unsigned int node_cnt = 0, tree_cnt = 0; > >> int remained; > >> + bool do_free = false; > >> > >> if (!test_opt(sbi, EXTENT_CACHE)) > >> return 0; > >> > >> + if (!atomic_read(&sbi->total_zombie_tree)) > >> + goto free_node; > >> + > >> if (!down_write_trylock(&sbi->extent_tree_lock)) > >> goto out; > >> > >> @@ -580,6 +586,7 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int > >> nr_shrink) > >> } > >> up_write(&sbi->extent_tree_lock); > >> > >> +free_node: > >> /* 2. remove LRU extent entries */ > >> if (!down_write_trylock(&sbi->extent_tree_lock)) > >> goto out; > >> @@ -591,9 +598,13 @@ unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int > >> nr_shrink) > >> if (!remained--) > >> break; > >> list_del_init(&en->list); > >> + do_free = true; > >> } > >> spin_unlock(&sbi->extent_lock); > >> > >> + if (do_free == false) > >> + goto unlock_out; > >> + > >> /* > >> * reset ino for searching victims from beginning of global extent tree. > >> */ > >> @@ -651,6 +662,7 @@ void f2fs_destroy_extent_tree(struct inode *inode) > >> > >> if (inode->i_nlink && !is_bad_inode(inode) && et->count) { > >> atomic_dec(&et->refcount); > >> + atomic_dec(&sbi->total_zombie_tree); > >> return; > >> } > Hi,all > here, sbi->total_ext_tree-- also should change to > atomic_dec(&sbi->total_ext_tree); Yunlei, Seems not right. Thanks, > Thanks, > > >> > >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > >> index a7f6191..90fb970 100644 > >> --- a/fs/f2fs/f2fs.h > >> +++ b/fs/f2fs/f2fs.h > >> @@ -763,6 +763,7 @@ struct f2fs_sb_info { > >> struct list_head extent_list; /* lru list for shrinker */ > >> spinlock_t extent_lock; /* locking extent lru list */ > >> atomic_t total_ext_tree; /* extent tree count */ > >> + atomic_t total_zombie_tree; /* extent zombie tree count */ > >> atomic_t total_ext_node; /* extent info count */ > >> > >> /* basic filesystem units */ > >> diff --git a/fs/f2fs/shrinker.c b/fs/f2fs/shrinker.c > >> index a11e099..93606f2 100644 > >> --- a/fs/f2fs/shrinker.c > >> +++ b/fs/f2fs/shrinker.c > >> @@ -32,7 +32,7 @@ static unsigned long __count_free_nids(struct f2fs_sb_info *sbi) > >> > >> static unsigned long __count_extent_cache(struct f2fs_sb_info *sbi) > >> { > >> - return atomic_read(&sbi->total_ext_tree) + > >> + return atomic_read(&sbi->total_zombie_tree) + > >> atomic_read(&sbi->total_ext_node); > >> } > >> > >> -- > >> 2.5.4 (Apple Git-61) > >> > >> > >> ------------------------------------------------------------------------------ > >> _______________________________________________ > >> Linux-f2fs-devel mailing list > >> Linux-f2fs-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > > Linux-f2fs-devel mailing list > > Linux-f2fs-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > > > . > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/