From: Andrew Morton <akpm@osdl.org>
To: James Bottomley <James.Bottomley@SteelEye.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@vger.kernel.org
Subject: Re: [PATCH] make radix tree gang lookup faster by using a bitmap search
Date: Sat, 27 Aug 2005 10:53:55 -0700 [thread overview]
Message-ID: <20050827105355.360bd26a.akpm@osdl.org> (raw)
In-Reply-To: <1125159996.5159.8.camel@mulgrave>
James Bottomley <James.Bottomley@SteelEye.com> wrote:
>
> The current gang lookup is rather naive and slow.
I'd say the main naivety in gang lookup is the awkward top-level iteration
algorithm. The way it bales out all the way to the top level of the tree
once __lookup() hits the end of the slots[] array, even though results[]
isn't full yet. It's surely possible to go back up the tree just a
sufficient distance to resume the iteration, rather than all the way to the
top. But it's hard, and it's all in CPU cache anyway there.
It would be much simpler if it was using recursion, of course.
> This patch replaces
> the integer count with an unsigned long representing the bitmap of
> occupied elements. We then use that bitmap to find the first occupied
> entry instead of looping over all the entries from the beginning of the
> radix node.
But only in __lookup(). I think most gang lookups use
radix_tree_gang_lookup_tag() -> __lookup_tag().
And __lookup_tag() could use find_next_bit() on the tags anyway, as the
comment says. I spent a bit of time doing that, had some bug, shelved it,
never got on to fixing it up.
There's a userspace test/devel setup at
http://www.zip.com.au/~akpm/linux/patches/stuff/rtth.tar.gz, btw.
> The penalty of doing this is that on 32 bit machines, the size of the
> radix tree array is reduced from 64 to 32 (so an unsigned long can
> represent the bitmap).
If we did the bitmap lookup in __lookup_tag() we wouldn't have this
restriction.
Maybe we can
a) fix radix_tree_gang_lookup() to use find_next_bit()
b) remove radix_tree_node.count
c) Add a new tag field which simply means "present"
d) remove radix_tree_gang_lookup() and __lookup() altogether
e) Implement radix_tree_gang_lookup() via radix_tree_gang_lookup_tag()
That would involve setting and clearing bit in the "present" tag field when
adding and removing items.
> I also exported radix_tree_preload() so modules can make use of radix
> trees.
uh, OK. Note that radix_tree_preload() uses prempt_disable() protection.
So it has the limitation that the guarantee which it provides will become
unreliable, kernel-wide, if anyone anywhere tries to do a
radix_tree_insert() from interrupt context.
next prev parent reply other threads:[~2005-08-27 17:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-27 16:26 [PATCH] make radix tree gang lookup faster by using a bitmap search James Bottomley
2005-08-27 17:53 ` Andrew Morton [this message]
2005-08-28 19:43 ` James Bottomley
2005-08-28 20:00 ` Linus Torvalds
2005-08-28 20:39 ` Andrew Morton
2005-08-29 0:45 ` James Bottomley
2005-08-29 0:52 ` Andrew Morton
2005-08-29 1:19 ` James Bottomley
2005-08-29 1:35 ` Andrew Morton
2005-08-29 3:26 ` James Bottomley
2005-08-29 3:37 ` Nick Piggin
2005-08-29 3:54 ` Trond Myklebust
2005-08-29 13:16 ` Luben Tuikov
2005-08-29 15:01 ` James Bottomley
[not found] ` <20050829164144.GC9508@localhost.localdomain>
2005-08-30 0:56 ` Nick Piggin
2005-08-30 1:54 ` Andrew Morton
2005-08-30 2:46 ` James Bottomley
2005-08-30 2:53 ` Nick Piggin
[not found] ` <20050830052405.GB20843@localhost.localdomain>
2005-08-30 13:06 ` Nick Piggin
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=20050827105355.360bd26a.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=James.Bottomley@SteelEye.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox