On 18 Oct 2022, at 18:08, Adrian Moreno wrote:
> On 10/14/22 19:49, Han Zhou wrote: >> >> >> On Thu, Oct 13, 2022 at 11:43 PM Adrian Moreno <amore...@redhat.com >> <mailto:amore...@redhat.com>> wrote: >>> >>> Hi Han. >>> >>> On 8/9/22 03:40, Han Zhou wrote: >>>> Today the minimum value for this setting is 1. This patch allows it to >>>> be 0, meaning not checking pps at all, and always do revalidation. >>>> >>>> This is particularly useful for environments where some of the >>>> applications with long-lived connections may have very low traffic for >>>> certain period but have high rate of burst periodically. It is desirable >>>> to keep the datapath flows instead of periodically deleting them to >>>> avoid burst of packet miss to userspace. >>>> >>>> When setting to 0, there may be more datapath flows to be revalidated, >>>> resulting in higher CPU cost of revalidator threads. This is the >>>> downside but in certain cases this is still more desirable than packet >>>> misses to user space. >>>> >>> I am trying to quantify this CPU cost. Do you have any numbers so we >>> understand >>> the effects of disabling pps-based evictions? >>> >> Hi Adrian, >> >> Thanks for reviewing. First of all, the CPU cost is added to revalidator >> threads only, but saving cost for the handler threads which is more critical >> to the packet processing. >> Now regarding the actual CPU cost of revalidator threads, the extra cost >> really depends on the traffic pattern - how many long lived DP flows are >> there with pps smaller than <min-revalidator-pps>. The more such DP flows, >> the more revalidtor CPU, of course. We don't see a problem when there are >> 10k DP flows when setting min-revalidator-pps to 0, and this is on a DPU >> with small number of less powerful ARM cores. It also depends on whether it >> is a dedicated network node/DPU where it is ok for OVS to take a significant >> portion of the CPU or it is a compute node where more cores are supposed to >> be reserved for applications. >> In any case, this is just an option and totally depends on user settings >> according to their use case, as explained in the commit message. >> > > I agree. There are many factors that come into play. My concern is that we > have so many knobs that tweak the revalidator/handler load distribution that > depend on so many external factors that it's quite complicated to determine > when to recommend their use. > > That's why I wanted to have some ballpark numbers to get an intuition of the > potential side effects. > > Having said that, I think this particular proposal is beneficial as I also > have seen drops caused by long-lived connections. I do not see anything wrong with adding this feature, however, the documentation needs to be clear on what 0 means, i.e. does it result in always revalidate or never revalidate? //Eelco >>>> Signed-off-by: Han Zhou <hz...@ovn.org <mailto:hz...@ovn.org>> >>>> --- >>>> ofproto/ofproto-dpif-upcall.c | 4 ++++ >>>> ofproto/ofproto.c | 2 +- >>>> vswitchd/vswitch.xml | 2 +- >>>> 3 files changed, 6 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c >>>> index 57f94df54..23b52ef40 100644 >>>> --- a/ofproto/ofproto-dpif-upcall.c >>>> +++ b/ofproto/ofproto-dpif-upcall.c >>>> @@ -2079,6 +2079,10 @@ should_revalidate(const struct udpif *udpif, >>>> uint64_t packets, >>>> { >>>> long long int metric, now, duration; >>>> >>>> + if (!ofproto_min_revalidate_pps) { >>>> + return true; >>>> + } >>>> + >>>> if (!used) { >>>> /* Always revalidate the first time a flow is dumped. */ >>>> return true; >>>> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c >>>> index 3a527683c..259fad4b5 100644 >>>> --- a/ofproto/ofproto.c >>>> +++ b/ofproto/ofproto.c >>>> @@ -723,7 +723,7 @@ ofproto_set_max_revalidator(unsigned max_revalidator) >>>> void >>>> ofproto_set_min_revalidate_pps(unsigned min_revalidate_pps) >>>> { >>>> - ofproto_min_revalidate_pps = min_revalidate_pps ? min_revalidate_pps >>>> : 1; >>>> + ofproto_min_revalidate_pps = min_revalidate_pps; >>>> } >>>> >>>> /* If forward_bpdu is true, the NORMAL action will forward frames with >>>> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml >>>> index 4a9284f6b..2222c1296 100644 >>>> --- a/vswitchd/vswitch.xml >>>> +++ b/vswitchd/vswitch.xml >>>> @@ -212,7 +212,7 @@ >>>> </column> >>>> >>>> <column name="other_config" key="min-revalidate-pps" >>>> - type='{"type": "integer", "minInteger": 1}'> >>>> + type='{"type": "integer", "minInteger": 0}'> >>>> <p> >>>> Set minimum pps that flow must have in order to be revalidated >>>> when >>>> revalidation duration exceeds half of max-revalidator config >>>> variable. >>> >>> -- >>> Adrián Moreno >>> > > -- > Adrián Moreno > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev