Re: [PATCH 2/3] netfilter : 3 patches to boost ip_tables performance

Eric Dumazet
2005-09-22T13:05:55Z

Harald Welte a écrit :
> On Wed, Sep 21, 2005 at 11:32:24PM +0200, Eric Dumazet wrote:
>
>>Patch 2/3 (please apply after Patch 1/3)
>>
>>2) Loop unrolling
>
>
> First of all, thanks for your performance analysis and patches. I'm
> very inclined of merging them.
>
>
>>It seems that with current compilers and CFLAGS, the code from
>>ip_packet_match() is very bad, using lot of mispredicted conditional branches I made some patches
>>and generated code on i386 and x86_64
>>is much better.
>
>
> This only describes your "compare_if_lstrings()" changes, and I'm happy
> to merge them.
>
> However, you also removed the use of the FWINV macro and replaced it by
> explicit code (including the bool1/bool2 variables, which are not really
> named intuitively). Why was this neccessary?
>

It was necessary to get the best code with gcc-3.4.4 on i386 and gcc-4.0.1 on
x86_64

For example :

bool1 = FWINV(ret != 0, IPT_INV_VIA_OUT);
if (bool1) {

gives a better code than :

if (FWINV(ret != 0, IPT_INV_VIA_OUT)) {

(one less conditional branch)

Dont ask me why, it is shocking but true :(

Eric