Le lundi 01 août 2011 à 20:16 +0200, Hagen Paul Pfeifer a écrit :
* Rui Ueyama | 2011-07-29 01:10:26 [-0700]:
quoted
Convert the BPF VM to threaded code to improve performance.
The BPF VM is basically a big for loop containing a switch statement. That is
slow because for each instruction it checks the for loop condition and does the
conditional branch of the switch statement.
This patch eliminates the conditional branch, by replacing it with jump table
using GCC's labels-as-values feature. The for loop condition check can also be
removed, because the filter code always end with a RET instruction.
With commit 01f2f3f6ef4d076c I reworked the BPF code so that gcc is in the
ability to generate a jump table, I double checked this. Not sure what happened
in the meantime.
A switch() always generates one conditional branch, catching values not
enumerated in the "case ..." clauses.