]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Add compile-time option to enable 4-way tries instead of 16-way ones
authorOndrej Zajicek <santiago@crfreenet.org>
Mon, 2 Jan 2023 14:55:55 +0000 (15:55 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Mon, 2 Jan 2023 14:55:55 +0000 (15:55 +0100)
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
filter/data.h

index a326d8adfd5ebe0b6577c1781b925332e463cedd..f8ab15375b5cea659bb2c2c186abf27be107deea 100644 (file)
@@ -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])
index 051f0932e2d1bb24c030a00e53593bc014cec080..5edeaedb7220590ede59676ff3ddd86ab2ad26e6 100644 (file)
@@ -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
 {