Hi Vladimir, On Tue, Mar 31, 2026 at 11:41 PM Maxime Leroy <[email protected]> wrote: > > This RFC proposes an optional shared tbl8 pool for FIB/FIB6, > to address the difficulty of sizing num_tbl8 upfront. > > In practice, tbl8 usage depends on prefix distribution and > evolves over time. In multi-VRF environments, some VRFs are > elephants (full table, thousands of tbl8 groups) while others > consume very little (mostly /24 or shorter). Per-FIB sizing > forces each instance to provision for its worst case, leading > to significant memory waste. > > A shared pool solves this: all FIBs draw from the same tbl8 > memory, so elephant VRFs use what they need while light VRFs > cost almost nothing. The sharing granularity is flexible: one pool per > VRF, per address family, a global pool, or no sharing at all. > > This series adds: > > - A shared tbl8 pool, replacing per-backend allocation > (bitmap in dir24_8, stack in trie) with a common > refcounted O(1) stack allocator. > - An optional resizable mode (grow via alloc + copy + QSBR > synchronize), removing the need to guess peak usage at > creation time. > - A stats API (rte_fib_tbl8_pool_get_stats()) exposing > used/total/max counters. > > All features are opt-in: > > - Existing per-FIB allocation remains the default. > - Shared pool is enabled via the tbl8_pool config field. > - Resize is enabled by setting max_tbl8 > 0 with QSBR. > > Shrinking (reducing pool capacity after usage drops) is not > part of this series. It would always be best-effort since > there is no compaction: if any tbl8 group near the end of the > pool is still in use, the pool cannot shrink. The current LIFO > free-list makes this less likely by immediately reusing freed > high indices, which prevents a contiguous free tail from > forming. A different allocation strategy (e.g. a min-heap > favoring low indices) could improve shrink opportunities, but > is better addressed separately. > > A working integration in Grout is available: > https://github.com/DPDK/grout/pull/581 (still a draft) > > Maxime Leroy (5): > test/fib6: zero-initialize config struct > fib: share tbl8 definitions between fib and fib6 > fib: add shared tbl8 pool > fib: add resizable tbl8 pool > fib: add tbl8 pool stats API > > app/test/test_fib6.c | 10 +- > lib/fib/dir24_8.c | 234 ++++++++++--------------- > lib/fib/dir24_8.h | 17 +- > lib/fib/fib_tbl8.h | 50 ++++++ > lib/fib/fib_tbl8_pool.c | 337 ++++++++++++++++++++++++++++++++++++ > lib/fib/fib_tbl8_pool.h | 113 ++++++++++++ > lib/fib/meson.build | 5 +- > lib/fib/rte_fib.h | 3 + > lib/fib/rte_fib6.h | 3 + > lib/fib/rte_fib_tbl8_pool.h | 149 ++++++++++++++++ > lib/fib/trie.c | 230 +++++++++--------------- > lib/fib/trie.h | 15 +- > 12 files changed, 844 insertions(+), 322 deletions(-) > create mode 100644 lib/fib/fib_tbl8.h > create mode 100644 lib/fib/fib_tbl8_pool.c > create mode 100644 lib/fib/fib_tbl8_pool.h > create mode 100644 lib/fib/rte_fib_tbl8_pool.h >
I’m following up on this RFC, which I sent at the end of March. Could you please review it and let me know whether you have any feedback or concerns? Thanks, ------------------------------- Maxime Leroy [email protected]

