On Thu, 15 Mar 2007, Davide Libenzi wrote: > 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 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html