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 /eigrpd | |
| 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 'eigrpd')
| -rw-r--r-- | eigrpd/eigrp_northbound.c | 2 | ||||
| -rw-r--r-- | eigrpd/eigrp_zebra.c | 6 | 
2 files changed, 4 insertions, 4 deletions
diff --git a/eigrpd/eigrp_northbound.c b/eigrpd/eigrp_northbound.c index 74a4dcb858..f50abb7e48 100644 --- a/eigrpd/eigrp_northbound.c +++ b/eigrpd/eigrp_northbound.c @@ -724,7 +724,7 @@ static int eigrpd_instance_redistribute_create(struct nb_cb_create_args *args)  		else  			vrfid = VRF_DEFAULT; -		if (vrf_bitmap_check(zclient->redist[AFI_IP][proto], vrfid)) +		if (vrf_bitmap_check(&zclient->redist[AFI_IP][proto], vrfid))  			return NB_ERR_INCONSISTENCY;  		break;  	case NB_EV_PREPARE: diff --git a/eigrpd/eigrp_zebra.c b/eigrpd/eigrp_zebra.c index 94c2bcab71..a5cecb9c16 100644 --- a/eigrpd/eigrp_zebra.c +++ b/eigrpd/eigrp_zebra.c @@ -249,9 +249,9 @@ void eigrp_zebra_route_delete(struct eigrp *eigrp, struct prefix *p)  static int eigrp_is_type_redistributed(int type, vrf_id_t vrf_id)  {  	return ((DEFAULT_ROUTE_TYPE(type)) -			? vrf_bitmap_check(zclient->default_information[AFI_IP], -					   vrf_id) -			: vrf_bitmap_check(zclient->redist[AFI_IP][type], +			? vrf_bitmap_check( +				  &zclient->default_information[AFI_IP], vrf_id) +			: vrf_bitmap_check(&zclient->redist[AFI_IP][type],  					   vrf_id));  }  | 
