summaryrefslogtreecommitdiff
path: root/zebra/zserv.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-04-19 08:13:18 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-06-26 14:59:21 -0400
commit161972c9fe108ffe3de851a537d9b34efeb09e31 (patch)
tree6de17e2202d18969ee4aae4c85ecaccdc89c4f89 /zebra/zserv.c
parentdee79c33a425d264e53e0e5d0ad51b1bc13945d0 (diff)
*: Rearrange vrf_bitmap_X api to reduce memory footprint
When running all daemons with config for most of them, FRR has sharpd@janelle:~/frr$ vtysh -c "show debug hashtable" | grep "VRF BIT HASH" | wc -l 3570 3570 hashes for bitmaps associated with the vrf. This is a very large number of hashes. Let's do two things: a) Reduce the created size of the actually created hashes to 2 instead of 32. b) Delay generation of the hash *until* a set operation happens. As that no hash directly implies a unset value if/when checked. This reduces the number of hashes to 61 in my setup for normal operation. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/zserv.c')
-rw-r--r--zebra/zserv.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/zebra/zserv.c b/zebra/zserv.c
index 85e1edeca0..895a6e9a73 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -634,13 +634,13 @@ static void zserv_client_free(struct zserv *client)
/* Free bitmaps. */
for (afi_t afi = AFI_IP; afi < AFI_MAX; afi++) {
for (int i = 0; i < ZEBRA_ROUTE_MAX; i++) {
- vrf_bitmap_free(client->redist[afi][i]);
+ vrf_bitmap_free(&client->redist[afi][i]);
redist_del_all_instances(&client->mi_redist[afi][i]);
}
- vrf_bitmap_free(client->redist_default[afi]);
- vrf_bitmap_free(client->ridinfo[afi]);
- vrf_bitmap_free(client->nhrp_neighinfo[afi]);
+ vrf_bitmap_free(&client->redist_default[afi]);
+ vrf_bitmap_free(&client->ridinfo[afi]);
+ vrf_bitmap_free(&client->nhrp_neighinfo[afi]);
}
/*
@@ -758,10 +758,10 @@ static struct zserv *zserv_client_create(int sock)
/* Initialize flags */
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- client->redist[afi][i] = vrf_bitmap_init();
- client->redist_default[afi] = vrf_bitmap_init();
- client->ridinfo[afi] = vrf_bitmap_init();
- client->nhrp_neighinfo[afi] = vrf_bitmap_init();
+ vrf_bitmap_init(&client->redist[afi][i]);
+ vrf_bitmap_init(&client->redist_default[afi]);
+ vrf_bitmap_init(&client->ridinfo[afi]);
+ vrf_bitmap_init(&client->nhrp_neighinfo[afi]);
}
/* Add this client to linked list. */