From: "H. Peter Anvin" <hpa@zytor.com>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Andi Kleen <andi@firstfloor.org>,
jbaron@redhat.com, rostedt@goodmis.com,
linux-kernel@vger.kernel.org, mingo@elte.hu, tglx@linutronix.de,
roland@redhat.com, rth@redhat.com, mhiramat@redhat.com,
fweisbec@gmail.com, avi@redhat.com, davem@davemloft.net,
vgoyal@redhat.com, sam@ravnborg.org, tony@bakeyournoodle.com,
Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH 2/2] Rewrite jump_label.c to use binary search
Date: Wed, 22 Sep 2010 13:54:23 -0700 [thread overview]
Message-ID: <4C9A6CFF.5040803@zytor.com> (raw)
In-Reply-To: <20100922204101.GA3012@Krystal>
On 09/22/2010 01:41 PM, Mathieu Desnoyers wrote:
>>
>> In the case of multiple instances of the same key you want the perfect
>> hash to point to the cluster of solutions -- a list. Since this is by
>> simply be an array.
>
> Yep, and sorting the section seems like a very natural way to create
> these arrays. So to summarize:
>
> - We add a post-linking step to core image and module build in
> modpost.c.
> - This step accesses exception tables, tracepoint and static jump
> sections.
> - Both tracepoint and static jump need to be sorted.
> - For each of the 3 sections, a perfect hash is computed (creation
> must have the property to always succeed). The perfect hash creation
> should only take into account the first entry of duplicate keys.
> - Each of these perfect hash would translate into C code that would
> need to be compiled in a post-link phase.
> - Then we can link the perfect hash objects with the rest of the code,
> filling in one symbol per considered section (function pointer to
> the perfect hash function) and setting function pointers in struct
> module for modules.
>
> I'm mostly writing this down as food for thoughts, since my own
> implementation time is currently focused on other things.
>
For what it's worth, here is a working (verified and in use) perfect
hash generator written in Perl:
http://repo.or.cz/w/nasm.git/tree/HEAD:/perllib
Like most other perfect hash generators it needs a prehash: the prehash
should be parameterizable (seedable) and produce 2 ceil(log n) bits of
hash material and cannot have collisions. The actual phash algorithm
compresses it down to a perfect hash. The prehash is typically
generated via a pseudorandom algorithm: the particular implementation
pointed to uses one based on CRC64 because it's fast to compute but has
a finite probability of not existing; a universal prehash is guaranteed
to exist but is much more expensive. In practice a very simple prehash
is usually sufficient, and one goes for speed.
For binary numbers being input, an even simpler prehash based on
multiplies or rotates is generally more than sufficient.
-hpa
next prev parent reply other threads:[~2010-09-22 20:55 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-22 10:08 [PATCH 1/2] Add for_each_module iterator function Andi Kleen
2010-09-22 10:08 ` [PATCH 2/2] Rewrite jump_label.c to use binary search Andi Kleen
2010-09-22 11:31 ` Mathieu Desnoyers
2010-09-22 11:56 ` Andi Kleen
2010-09-22 12:04 ` Andi Kleen
2010-09-22 15:02 ` Mathieu Desnoyers
2010-09-22 15:07 ` Mathieu Desnoyers
2010-09-22 15:43 ` Jason Baron
2010-09-22 15:28 ` Jason Baron
2010-09-22 19:19 ` Mathieu Desnoyers
2010-09-22 13:46 ` Jason Baron
2010-09-22 18:14 ` Jason Baron
2010-09-22 11:57 ` Frederic Weisbecker
2010-09-22 16:12 ` H. Peter Anvin
2010-09-22 19:43 ` Mathieu Desnoyers
2010-09-22 20:06 ` H. Peter Anvin
2010-09-22 20:41 ` Mathieu Desnoyers
2010-09-22 20:54 ` H. Peter Anvin [this message]
2010-09-22 12:25 ` [PATCH 1/2] Add for_each_module iterator function Thomas Gleixner
2010-09-22 12:52 ` Andi Kleen
2010-09-22 14:03 ` Mathieu Desnoyers
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=4C9A6CFF.5040803@zytor.com \
--to=hpa@zytor.com \
--cc=ak@linux.intel.com \
--cc=andi@firstfloor.org \
--cc=avi@redhat.com \
--cc=davem@davemloft.net \
--cc=fweisbec@gmail.com \
--cc=jbaron@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=roland@redhat.com \
--cc=rostedt@goodmis.com \
--cc=rth@redhat.com \
--cc=sam@ravnborg.org \
--cc=tglx@linutronix.de \
--cc=tony@bakeyournoodle.com \
--cc=vgoyal@redhat.com \
/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.