On Tue, Sep 17, 2024 at 8:54 AM Ilya Maximets <[email protected]> wrote: > > ovn-northd copies external IDs from Logical Switch, Router and their > Port records to corresponding Southbound Datapath and Port Binding > records. IDs in other tables are not used by northd in any way, so > there is no point in monitoring them. > > CMSes tend to create a huge amount of external IDs for every record > to the point where they can take literally half of the database data. > In high scale clusters that can be several hundreds of MB. Not > monitoring them saves a lot of time and memory while downloading > initial database snapshots on the first connection and should also > reduce the ongoing cost while new resources are being created. > > This will also help avoiding unnecessary re-computes when external > IDs are updated without changing any other data. > > Tested on a 500 MB Northbound DB that contains 1M ACLs created by > ovn-kubernetes in a test cluster mimicking a real world setup.
Just curious, is the ovn-k8s in the test cluster configured with OVN IC mode or central mode? > > Before the change it took 20 seconds for the ovsdb-server to send out > an initial database snapshot and 19 seconds for ovn-northd to receive > it, parse and run a full recompute, consuming 5.4 GB of RAM. With the > change it takes 15 seconds on the database side and 11 seconds for the > ovn-northd, consuming 2.9 GB of RAM. (Note: the test was performed in > a sandbox with no OVN chassis connected, so northd didn't generate a > lot of logical flows for those ACLs.) > > So, we saved: > - 25% of CPU time on the database side. > - 42% of CPU time on the ovn-northd side. > - 2.5 GB (46%) of RAM on ovn-northd. > > Signed-off-by: Ilya Maximets <[email protected]> > --- > northd/ovn-northd.c | 36 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c > index d71114f35..89ef4e870 100644 > --- a/northd/ovn-northd.c > +++ b/northd/ovn-northd.c > @@ -820,6 +820,42 @@ main(int argc, char *argv[]) > ovsdb_idl_omit_alert(ovnnb_idl_loop.idl, > &nbrec_nb_global_col_hv_cfg_timestamp); > > + /* Ignore northbound external IDs, except for logical switch, router and > + * their ports, for which the external IDs are propagated to > corresponding > + * southbound datapath and port binding records. */ > + const struct ovsdb_idl_column *external_ids[] = { > + &nbrec_acl_col_external_ids, > + &nbrec_address_set_col_external_ids, > + &nbrec_bfd_col_external_ids, > + &nbrec_chassis_template_var_col_external_ids, > + &nbrec_connection_col_external_ids, > + &nbrec_copp_col_external_ids, > + &nbrec_dhcp_options_col_external_ids, > + &nbrec_dhcp_relay_col_external_ids, > + &nbrec_dns_col_external_ids, > + &nbrec_forwarding_group_col_external_ids, > + &nbrec_gateway_chassis_col_external_ids, > + &nbrec_ha_chassis_col_external_ids, > + &nbrec_ha_chassis_group_col_external_ids, > + &nbrec_load_balancer_col_external_ids, > + &nbrec_load_balancer_health_check_col_external_ids, > + &nbrec_logical_router_policy_col_external_ids, > + &nbrec_logical_router_static_route_col_external_ids, > + &nbrec_meter_col_external_ids, > + &nbrec_meter_band_col_external_ids, > + &nbrec_mirror_col_external_ids, > + &nbrec_nat_col_external_ids, > + &nbrec_nb_global_col_external_ids, > + &nbrec_port_group_col_external_ids, > + &nbrec_qos_col_external_ids, > + &nbrec_ssl_col_external_ids, > + &nbrec_sample_collector_col_external_ids, > + &nbrec_sampling_app_col_external_ids, > + }; > + for (size_t i = 0; i < ARRAY_SIZE(external_ids); i++) { > + ovsdb_idl_omit(ovnnb_idl_loop.idl, external_ids[i]); > + } > + > unixctl_command_register("nb-connection-status", "", 0, 0, > ovn_conn_show, ovnnb_idl_loop.idl); > > -- > 2.46.0 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev Thanks Ilya. The result numbers are impressive and the change is simple and straightforward. Acked-by: Han Zhou <[email protected]> _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
