From 4f7899e3cb17ee67875e53512db25ba5aa1dc236 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Tue, 24 Dec 2024 13:22:56 +0100 Subject: [PATCH] BGP: TX bucket storage moved to Stonehenge --- proto/bgp/attrs.c | 11 +++++++---- proto/bgp/bgp.h | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index a2feaef5..725c469f 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -1734,13 +1734,16 @@ bgp_get_bucket(struct bgp_ptx_private *c, ea_list *new) uint size = sizeof(struct bgp_bucket) + ea_size; /* Allocate the bucket */ - b = mb_alloc(c->pool, size); + sth_block blk = sth_alloc(c->sth, size); + b = blk.block; *b = (struct bgp_bucket) { }; init_list(&b->prefixes); b->hash = hash; /* Copy the ea_list */ ea_list_copy(b->eattrs, new, ea_size); + if (blk.large) + b->eattrs->flags |= EALF_HUGE; /* Insert the bucket to bucket hash */ HASH_INSERT2(c->bucket_hash, RBH, c->pool, b); @@ -1764,7 +1767,7 @@ static void bgp_free_bucket(struct bgp_ptx_private *c, struct bgp_bucket *b) { HASH_REMOVE2(c->bucket_hash, RBH, c->pool, b); - mb_free(b); + sth_free((sth_block) { b, !!(b->eattrs->flags & EALF_HUGE) }); } int @@ -2086,6 +2089,7 @@ bgp_init_pending_tx(struct bgp_channel *c) bpp->lock = dom; bpp->pool = p; + bpp->sth = sth_new(p); bpp->c = c; bgp_init_bucket_table(bpp); @@ -2160,8 +2164,7 @@ bgp_free_pending_tx(struct bgp_channel *bc) HASH_WALK_END; HASH_FREE(c->bucket_hash); - sl_delete(c->bucket_slab); - c->bucket_slab = NULL; + sth_delete(c->sth); rp_free(c->pool); diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h index 202e78ba..dac6e84e 100644 --- a/proto/bgp/bgp.h +++ b/proto/bgp/bgp.h @@ -452,7 +452,8 @@ struct bgp_ptx_private { struct { BGP_PTX_PUBLIC; }; struct bgp_ptx_private **locked_at; - pool *pool; /* Resource pool for TX related allocations */ + pool *pool; /* Pool for infrequent long-term blocks */ + stonehenge *sth; /* Bucket allocator */ HASH(struct bgp_bucket) bucket_hash; /* Hash table of route buckets */ struct bgp_bucket *withdraw_bucket; /* Withdrawn routes */ @@ -461,7 +462,6 @@ struct bgp_ptx_private { HASH(struct bgp_prefix) prefix_hash; /* Hash table of pending prefices */ slab *prefix_slab; /* Slab holding prefix nodes */ - slab *bucket_slab; /* Slab holding buckets to send */ char bmp; /* This is a fake ptx for BMP encoding */ };