lic121 <[email protected]> writes:
> On Mon, Apr 25, 2022 at 08:47:32AM -0400, Aaron Conole wrote:
>> lic121 <[email protected]> writes:
>>
>> > Max allowed conntrack entries is configurable with
>> > 'ovs-appctl dpctl/ct-set-maxconns' command. In real scenarios,
>> > this configuration is expected to survive from host reboot.
>> >
>> > Signed-off-by: lic121 <[email protected]>
>> > ---
>>
>> One complication is that there are 2 other conntrack implementations
>> that OvS supports - one for the Windows Netlink, and the other for
>> Linux kernel netlink. How do you deal with this parameter there?
>
> As linux kernel datapath leverages the kernel implementent of conntrack.
> Besides ovs, the kernel conntrack is used by kernel network stack
> itself. A proper way to set linux kernel datapath conntrack max conns
> could be sysctl interface (nf_conntrack_max).
> But I am not sure if a similar system level configuration exists for windows
> datapath.
>
>>
>> Something in the datapath for this needs to accommodate these. Maybe
>> the DB should store the datapath name as well - that way each dp can
>> lookup the configuration if supported (and if not we can either log the
>> error, etc). That does start to look a bit unfriendly, but at least it
>> prevents user confusion with this knob.
>
> Agree, to indiates the datapath name in configuration item name is
> better than explanation in configuration detail description.
> How about the name "userspace-ct-maxconns"?
I guess that should be fine. I might prefer 'netdev-conntrack-maxconns'
or something to that effect. "userspace" makes sense to developers, but
we usually call the userspace side the "netdev" datapath.
Ilya, might have some suggestion.
>>
>> Each CT dp interface does something slightly differently for
>> configuration, and I'm not sure this knob as proposed is the best
>> solution.
>>
>> The 'deprecated' command was only implemented for the userspace DP, but
>> in theory it could work independently for all. I'm not sure this one
>> can work though (for example, if we use AF_XDP for some bridge, but
>> kernel DP for another, we would want to have two different max entry
>> values, but this interface doesn't allow that).
>>
>> > lib/dpctl.man | 3 ++-
>> > lib/dpif-netdev.c | 10 ++++++++++
>> > tests/system-traffic.at | 10 ++++++++++
>> > vswitchd/vswitch.xml | 7 +++++++
>> > 4 files changed, 29 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/lib/dpctl.man b/lib/dpctl.man
>> > index c100d0a..2cfc4f2 100644
>> > --- a/lib/dpctl.man
>> > +++ b/lib/dpctl.man
>> > @@ -343,7 +343,8 @@ system due to connection tracking or simply limiting
>> > connection
>> > tracking. If the number of connections is already over the new maximum
>> > limit request then the new maximum limit will be enforced when the
>> > number of connections decreases to that limit, which normally happens
>> > -due to connection expiry. Only supported for userspace datapath.
>> > +due to connection expiry. Only supported for userspace datapath. This
>> > +command is deprecated by ovsdb cfg other_config:ct-maxconns.
>> > .
>> > .TP
>> > \*(DX\fBct\-get\-maxconns\fR [\fIdp\fR]
>> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
>> > index 6764343..c518d30 100644
>> > --- a/lib/dpif-netdev.c
>> > +++ b/lib/dpif-netdev.c
>> > @@ -4827,6 +4827,16 @@ dpif_netdev_set_config(struct dpif *dpif, const
>> > struct smap *other_config)
>> > }
>> > }
>> >
>> > + uint32_t ct_maxconns, cur_maxconns;
>> > + ct_maxconns = smap_get_int(other_config, "ct-maxconns", UINT32_MAX);
>> > + /* Leave runtime value as it is when cfg is removed. */
>> > + if (ct_maxconns < UINT32_MAX) {
>> > + conntrack_get_maxconns(dp->conntrack, &cur_maxconns);
>> > + if (ct_maxconns != cur_maxconns) {
>> > + conntrack_set_maxconns(dp->conntrack, ct_maxconns);
>> > + }
>> > + }
>> > +
>> > bool smc_enable = smap_get_bool(other_config, "smc-enable", false);
>> > bool cur_smc;
>> > atomic_read_relaxed(&dp->smc_enable_db, &cur_smc);
>> > diff --git a/tests/system-traffic.at b/tests/system-traffic.at
>> > index 4a7fa49..00fefc5 100644
>> > --- a/tests/system-traffic.at
>> > +++ b/tests/system-traffic.at
>> > @@ -2258,6 +2258,16 @@ AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [],
>> > [dnl
>> > 10
>> > ])
>> >
>> > +AT_CHECK([ovs-vsctl set Open_vswitch . other_config:ct-maxconns=20], [0])
>> > +AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl
>> > +20
>> > +])
>> > +
>> > +AT_CHECK([ovs-vsctl remove Open_vswitch . other_config ct-maxconns], [0])
>> > +AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl
>> > +20
>> > +])
>> > +
>> > OVS_TRAFFIC_VSWITCHD_STOP
>> > AT_CLEANUP
>> >
>> > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
>> > index 0c66326..ec634d5 100644
>> > --- a/vswitchd/vswitch.xml
>> > +++ b/vswitchd/vswitch.xml
>> > @@ -183,6 +183,13 @@
>> > </p>
>> > </column>
>> >
>> > + <column name="other_config" key="ct-maxconns"
>> > + type='{"type": "integer", "minInteger": 0}'>
>> > + The maximum number of connection tracker entries allowed in the
>> > + datapath. Only supported for userspace datapath. This deprecates
>> > + "ovs-appctl dpctl/ct-set-maxconns" command.
>> > + </column>
>> > +
>> > <column name="other_config" key="max-idle"
>> > type='{"type": "integer", "minInteger": 500}'>
>> > <p>
>>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev