acl: introduce config parameter for performance/space trade-off
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Tue, 20 Jan 2015 18:41:05 +0000 (18:41 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 28 Jan 2015 16:11:26 +0000 (17:11 +0100)
commit62945e029e86bba5fb833e969c3c22f84d58c1cb
tree42830f5a52626b436bac11a2ce59e3ad439af6c9
parenta0e3310e7a4f92622f7d86369c8f8e3c389edf18
acl: introduce config parameter for performance/space trade-off

If at build phase we don't make any trie splitting,
then temporary build structures and resulting RT structure might be
much bigger than current.
>From other side - having just one trie instead of multiple can speedup
search quite significantly.
>From my measurements on rule-sets with ~10K rules:
RT table up to 8 times bigger, classify() up to 80% faster
than current implementation.
To make it possible for the user to decide about performance/space trade-off -
new parameter for build config structure (max_size) is introduced.
Setting it to the value greater than zero, instructs  rte_acl_build() to:
- make sure that size of RT table wouldn't exceed given value.
- attempt to minimise number of tries in the table.
Setting it to zero maintains current behaviour.
That introduces a minor change in the public API, but I think the possible
performance gain is too big to ignore it.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
app/test-acl/main.c
examples/l3fwd-acl/main.c
lib/librte_acl/acl.h
lib/librte_acl/acl_bld.c
lib/librte_acl/acl_gen.c
lib/librte_acl/rte_acl.c
lib/librte_acl/rte_acl.h