Re: cleaner/better zlib sources?
On Thu, 15 Mar 2007, Davide Libenzi wrote:
Show 38 quoted lines
> On Thu, 15 Mar 2007, Linus Torvalds wrote:
>
> >
> > I looked at git profiles yesterday, and some of them are pretty scary. We
> > spend about 50% of the time under some loads in just zlib uncompression,
> > and when I actually looked closer at the zlib sources I can kind of
> > understand why. That thing is horrid.
> >
> > The sad part is that it looks like it should be quite possible to make
> > zlib simply just perform better. The profiles seem to say that a lot of
> > the cost is literally in the "inflate()" state machine code (and by that I
> > mean *not* the code itself, but literally in the indirect jump generated
> > by the case-statement).
> >
> > Now, on any high-performance CPU, doing state-machines by having
> >
> > for (;;)
> > switch (data->state) {
> > ...
> > data->state = NEW_STATE;
> > continue;
> > }
> >
> > (which is what zlib seems to be doing) is just about the worst possible
> > way to code things.
>
> A quick hack would be to just define:
>
> #define SWITCH_LBL(n) \
> case n: \
> lbl_##n:
>
> #define STATE_CHANGE(s) \
> state->mode = s; \
> goto lbl_##s;
>
> Then replace all the "state->mode = STATE; break;" into STATE_CHANGE(STATE);
> I'm giving it a try as we speak ...I get about 5-6% boost with it AFAICS ...
- Davide