aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/acl/acl.h
diff options
context:
space:
mode:
authorAndrew Yourtchenko <ayourtch@gmail.com>2018-06-20 10:44:19 +0200
committerDave Barach <openvpp@barachs.net>2018-06-27 11:46:28 +0000
commit2e0798f90d9672b1c8dc702a2bdae485a6771ff8 (patch)
treeaa49d107ea0525e4e0c55fb660cb054bb470d3e0 /src/plugins/acl/acl.h
parentb26743d093141a2aef19bdf8a7fe06dcaa81329a (diff)
acl-plugin: tm: add tuplemerge algorithm for relaxing the hashtable masks
Slightly refactored from the initial implementation of the TupleMerge [1] algorithm by Valerio Bruschi (valerio.bruschi@telecom-paristech.fr) [1] James Daly, Eric Torng "TupleMerge: Building Online Packet Classifiers by Omitting Bits", In Proc. IEEE ICCCN 2017, pp. 1-10 Also add startup parameters to turn on/off the algorithm ("use tuple merge 1/0"), and a startup parameter to be able to tweak the split threshold ("tuple merge split threshold N"), the default value of the split threshold is 39 as per paper, but some more tuning might be necessary to find the best value. This change, alongside with the optimizations which avoid extra lookups, significantly reduces the slowdown on the ClassBench generated ACLs, which are supposed to resemble realistic ACLs seen in use in the field. Change-Id: I9713e4673970e9a62d4d9e9718365293375fab7b Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Diffstat (limited to 'src/plugins/acl/acl.h')
-rw-r--r--src/plugins/acl/acl.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/plugins/acl/acl.h b/src/plugins/acl/acl.h
index 733d785d886..b994b8506b7 100644
--- a/src/plugins/acl/acl.h
+++ b/src/plugins/acl/acl.h
@@ -194,6 +194,13 @@ typedef struct {
/* Do we use hash-based ACL matching or linear */
int use_hash_acl_matching;
+ /* Do we use the TupleMerge for hash ACLs or not */
+ int use_tuple_merge;
+
+ /* Max collision vector length before splitting the tuple */
+#define TM_SPLIT_THRESHOLD 39
+ int tuple_merge_split_threshold;
+
/* a pool of all mask types present in all ACEs */
ace_mask_type_entry_t *ace_mask_type_pool;