summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2023-01-02 15:55:55 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2023-01-02 15:55:55 +0100
commitd3f50ede127df338f575e188566035b2a46cf6c6 (patch)
tree8560a05ed8d35746a91a252e98ee212c722866b0
parent6d1ae197d189d50e60279796441c6e74272ddc54 (diff)
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.
-rw-r--r--configure.ac11
-rw-r--r--filter/data.h7
2 files changed, 18 insertions, 0 deletions
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
{