|
|
Message-ID: <alpine.LNX.2.11.1506240919060.9758@monopod.intra.ispras.ru>
Date: Wed, 24 Jun 2015 09:29:25 +0300 (MSK)
From: Alexander Monakov <amonakov@...ras.ru>
To: musl@...ts.openwall.com
Subject: Re: [PATCH 1/5] dynlink.c: use bloom filter in gnu hash
lookup
> > diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
> > index b77c6f6..fa91b39 100644
> > --- a/src/ldso/dynlink.c
> > +++ b/src/ldso/dynlink.c
> > @@ -54,6 +54,7 @@ struct dso {
> > Sym *syms;
> > uint32_t *hashtab;
> > uint32_t *ghashtab;
> > + uint32_t ghashmask;
> > int16_t *versym;
> > char *strings;
> > unsigned char *map;
> > @@ -200,6 +201,19 @@ static Sym *gnu_lookup(const char *s, uint32_t h1, struct dso *dso)
> > return 0;
> > }
> >
> > +static Sym *gnu_lookup_filtered(const char *s, uint32_t h1, struct dso *dso, uint32_t fofs, size_t fmask)
> > +{
> > + uint32_t *hashtab = dso->ghashtab;
> > + size_t *bloomwords = hashtab+4;
> > + size_t f = bloomwords[fofs & dso->ghashmask];
>
> Is this measurably faster than fofs & hashtab[2]-1 ?
It seems to give a small improvement for me, but with the other patches, too
small to measure reliably. As I'm using a big testcase, the impact on typical
libraries should be really tiny.
> If suspect not, in which case it seems desirable not to increase the
> size of struct dso. If it is worthwhile, at least don't sandwich a
> uint32_t between two pointers where it might incur another 32 bits of
> padding.
I wanted it to be nearby the hashtab pointer, which needs to be loaded anyway.
If ghashmask needs to move so that loading it will access a different cache
line, it's likely to diminish an already small improvement, at which point
it's easier to drop this patch :)
Would be nice if someone could test on a platform with slower caches.
Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.