diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2023-04-19 08:13:18 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2023-06-26 14:59:21 -0400 | 
| commit | 161972c9fe108ffe3de851a537d9b34efeb09e31 (patch) | |
| tree | 6de17e2202d18969ee4aae4c85ecaccdc89c4f89 /zebra/zserv.c | |
| parent | dee79c33a425d264e53e0e5d0ad51b1bc13945d0 (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.c | 16 | 
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. */  | 
