From d3f50ede127df338f575e188566035b2a46cf6c6 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Mon, 2 Jan 2023 15:55:55 +0100 Subject: [PATCH] Add compile-time option to enable 4-way tries instead of 16-way ones In some cases 16-way tries are too memory-heavy, while 4-way are almost as efficient as the original 2-way ones. --- configure.ac | 11 +++++++++++ filter/data.h | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/configure.ac b/configure.ac index a326d8ad..f8ab1537 100644 --- a/configure.ac +++ b/configure.ac @@ -36,6 +36,12 @@ AC_ARG_ENABLE([memcheck], [enable_memcheck=yes] ) +AC_ARG_ENABLE([compact-tries], + [AS_HELP_STRING([--enable-compact-tries], [use 4-way tries instead of 16-way ones @<:@no@:>@])], + [], + [enable_compact_tries=no] +) + AC_ARG_ENABLE([pthreads], [AS_HELP_STRING([--enable-pthreads], [enable POSIX threads support @<:@try@:>@])], [], @@ -409,6 +415,10 @@ if test "$enable_debug" = yes ; then fi fi +if test "$enable_compact_tries" = yes ; then + AC_DEFINE([ENABLE_COMPACT_TRIES], [1], [Define to 1 if you want 4-way tries instead of 16-way ones.]) +fi + CLIENT=birdcl CLIENT_LIBS= if test "$enable_client" = yes ; then @@ -469,6 +479,7 @@ AC_MSG_RESULT([ Object directory: $objdir]) AC_MSG_RESULT([ Iproute2 directory: $iproutedir]) AC_MSG_RESULT([ System configuration: $sysdesc]) AC_MSG_RESULT([ Debugging: $enable_debug]) +AC_MSG_RESULT([ Compact tries: $enable_compact_tries]) AC_MSG_RESULT([ POSIX threads: $enable_pthreads]) AC_MSG_RESULT([ Routing protocols: $protocols]) AC_MSG_RESULT([ LibSSH support in RPKI: $enable_libssh]) diff --git a/filter/data.h b/filter/data.h index 051f0932..5edeaedb 100644 --- a/filter/data.h +++ b/filter/data.h @@ -141,8 +141,15 @@ struct f_tree { void *data; }; +#ifdef ENABLE_COMPACT_TRIES +/* Compact 4-way tries */ +#define TRIE_STEP 2 +#define TRIE_STACK_LENGTH 65 +#else +/* Faster 16-way tries */ #define TRIE_STEP 4 #define TRIE_STACK_LENGTH 33 +#endif struct f_trie_node4 {