From: Chao Yu <chao2.yu@samsung.com>
To: 'Changman Lee' <cm224.lee@samsung.com>,
'Jaegeuk Kim' <jaegeuk@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: RE: [f2fs-dev] [PATCH V2] f2fs: more fast lookup for gc_inode list
Date: Tue, 02 Dec 2014 17:25:24 +0800 [thread overview]
Message-ID: <005f01d00e12$02e49780$08adc680$@samsung.com> (raw)
In-Reply-To: <20141202003817.GB7824@lcm>
Hi Changman,
> -----Original Message-----
> From: Changman Lee [mailto:cm224.lee@samsung.com]
> Sent: Tuesday, December 02, 2014 8:38 AM
> To: Jaegeuk Kim
> Cc: linux-fsdevel@vger.kernel.org; linux-f2fs-devel@lists.sourceforge.net
> Subject: Re: [f2fs-dev] [PATCH V2] f2fs: more fast lookup for gc_inode list
>
> Hi Jaeguek,
>
> Thansk for review.
>
> Changes from V2
> o rename iradix to iroot
> o declare gc_inode_list in gc.h
>
> Changes from V1
> o introduce gc_inode_list containing ilist and iradix
> o use local variable
> o call radix_tree_delete before iput
> o retry to add inode into radix_tree
> o call list_del explicitly
>
> Regards,
> Changman
>
> --> 8 --
> >From 6c32edfc00aa784c47f5018d10fb8f9b5ab54c8b Mon Sep 17 00:00:00 2001
> From: Changman Lee <cm224.lee@samsung.com>
> Date: Fri, 28 Nov 2014 15:49:40 +0000
> Subject: [PATCH] f2fs: more fast lookup for gc_inode list
>
> If there are many inodes that have data blocks in victim segment,
> it takes long time to find a inode in gc_inode list.
> Let's use radix_tree to reduce lookup time.
>
> Signed-off-by: Changman Lee <cm224.lee@samsung.com>
> ---
> fs/f2fs/gc.c | 51 ++++++++++++++++++++++++++++++---------------------
> fs/f2fs/gc.h | 5 +++++
> 2 files changed, 35 insertions(+), 21 deletions(-)
>
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index 29fc7e5..92f706c 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -338,34 +338,41 @@ static const struct victim_selection default_v_ops = {
> .get_victim = get_victim_by_default,
> };
>
> -static struct inode *find_gc_inode(nid_t ino, struct list_head *ilist)
> +static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino)
> {
> struct inode_entry *ie;
>
> - list_for_each_entry(ie, ilist, list)
> - if (ie->inode->i_ino == ino)
> - return ie->inode;
> + ie = radix_tree_lookup(&gc_list->iroot, ino);
> + if (ie)
> + return ie->inode;
> return NULL;
> }
>
> -static void add_gc_inode(struct inode *inode, struct list_head *ilist)
> +static void add_gc_inode(struct gc_inode_list *gc_list, struct inode *inode)
> {
> struct inode_entry *new_ie;
> + int ret;
> +retry:
> + new_ie = f2fs_kmem_cache_alloc(winode_slab, GFP_NOFS);
> + new_ie->inode = inode;
>
> - if (inode == find_gc_inode(inode->i_ino, ilist)) {
How about keeping the original code structure like below?
if find_gc_inode succ
iput and return;
else
alloc and insert a new item;
So we can avoid invoking many unneeded kmem_cache_{alloc, free} when most data blocks
in victim section are belong to the same inode.
Thanks,
Yu
> + ret = radix_tree_insert(&gc_list->iroot, inode->i_ino, new_ie);
> + if (ret == -EEXIST) {
> + kmem_cache_free(winode_slab, new_ie);
> iput(inode);
> return;
> + } else if (ret) {
> + kmem_cache_free(winode_slab, new_ie);
> + goto retry;
> }
> -
[snip]
next prev parent reply other threads:[~2014-12-02 9:25 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-27 9:11 [PATCH] f2fs: more fast lookup for gc_inode list Changman Lee
2014-11-28 4:24 ` [f2fs-dev] " Jaegeuk Kim
2014-11-28 6:00 ` Changman Lee
2014-11-28 7:12 ` [f2fs-dev] [PATCH V2] " Changman Lee
2014-12-01 21:55 ` Jaegeuk Kim
2014-12-02 0:38 ` Changman Lee
2014-12-02 9:25 ` Chao Yu [this message]
2014-12-02 9:56 ` Changman Lee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='005f01d00e12$02e49780$08adc680$@samsung.com' \
--to=chao2.yu@samsung.com \
--cc=cm224.lee@samsung.com \
--cc=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.