Proposition: use a hashtable instead of bsearch to locate applets

Denys Vlasenko vda.linux at googlemail.com
Mon Jun 2 00:10:57 UTC 2014


On Thursday 29 May 2014 13:18, Bartosz Golaszewski wrote:
> Hi!
> 
> Busybox uses bsearch() to locate the applet's main function in
> find_applet_by_name(). Running 'make defconfig' results in 355 applets
> being built and this in turn results in 8-9 calls to strcmp() on average
> per busybox execution.
> 
> Maybe we should switch to using a simple static hashtable? The following
> patch is a simple & dirty proof of concept to show what I mean. It modifies
> applet_tables.c to generate a static hashtable containing indicies of fields
> in applet_nameofs. I used a simple and fast hash function taken from
> Robert Jenkins.
> 
> With this patch, on each execution and after the hash computation, the
> number of calls to strcmp() has been limited to four at most, and mostly
> it's just one or two. There are no calls to applet_name_compare() too.
> 
> The patch results in bigger code,

+2944 bytes in my test.

> but there's room for improvement as 
> we could probably get rid of some of the arrays generated by applet_tables
> and unify the hashtables used in busybox applets.
>
> If there's any interest, I can prepare a better, more memory-wise optimized
> version.

Yes, this must not result in such significant growth.




More information about the busybox mailing list