Am Thu, Aug 06, 2026 at 10:58:14AM -0400 schrieb Aaron Conole: > Felix Huettner <[email protected]> writes: > > > We replace the existing rculists used for conntrack sweeping with just > > iterating over all known connections. This allows us to get rid of the > > exp_lists in struct conntrack and thereby also of the usage of ct_lock > > in the connection insert and deletion path. > > > > This means after this commit connection insertion and deletion across > > different zones has no longer any shared lock. Within the same zone > > there is still a single lock. > > > > The exp_lists where not ordered in any way, the only difference compared > > to iterating over all connections was that they only contained > > connections in the forward direction. > > This means that this patch will trade away some cleaning performance in > > order to gain connection insertion and deletion speeds. We will improve > > the ct cleaning in the following commits. > > > > Signed-off-by: Felix Huettner <[email protected]> > > --- > > > > Notes: > > v3->v4: split to 4 patches, this is 4/4 of the previous patch 5 > > > > lib/conntrack-private.h | 11 +----- > > lib/conntrack.c | 84 ++++++++++++++++------------------------- > > 2 files changed, 33 insertions(+), 62 deletions(-) > > [...] > > > @@ -1513,29 +1492,35 @@ conntrack_get_sweep_interval(struct conntrack *ct) > > } > > > > static size_t > > -ct_sweep(struct conntrack *ct, struct rculist *list, long long now, > > - size_t *cleaned_count) > > +ct_sweep_zone(struct conntrack *ct, uint16_t zone, long long now, > > + size_t *cleaned_count) > > OVS_NO_THREAD_SAFETY_ANALYSIS > > { > > + struct conn_key_node *keyn; > > + struct conntrack_zone *cz; > > + unsigned int conn_count = 0; > > + unsigned int cleaned = 0; > > struct conn *conn; > > - size_t cleaned = 0; > > - size_t count = 0; > > + long long expiration; > > > > - RCULIST_FOR_EACH (conn, node, list) { > > - if (conn_expired(conn, now)) { > > + cz = zone_lookup(ct, zone); > > + CMAP_FOR_EACH (keyn, cm_node, &cz->conns) { > > + if (keyn->dir != CT_DIR_FWD) { > > + continue; > > + } > > + > > + conn = CONTAINER_OF(keyn, struct conn, key_node[keyn->dir]); > > + expiration = conn_expiration(conn); > > + if (now >= expiration) { > > conn_clean(ct, conn); > > cleaned++; > > } > > > > - count++; > > + conn_count++; > > } > > - > > - if (cleaned_count) { > > - *cleaned_count = cleaned; > > - } > > - > > - return count; > > -} > > + *cleaned_count = cleaned; > > + return conn_count; > > + } > > ^ Spacing here.
Thanks > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
