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. 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
