Hi,
The last sleep can't be removed in my env. There are errors occasionlly. 
The test procedure and the fail result are in my previous emails.
But if I add revalidator/purge twice, the test is passed. No error complaints.

From: Eelco Chaudron <echau...@redhat.com>
Date: 2023-03-08 15:28:05
To:  Faicker Mo <faicker...@ucloud.cn>
Cc:  d...@openvswitch.org,i.maxim...@ovn.org,simon.hor...@corigine.com
Subject: Re: [PATCH v8] netdev-offload-tc: del ufid mapping if device not exist>
>
>On 8 Mar 2023, at 3:34, Faicker Mo wrote:
>
>> Updated,
>> Under my env, the sleep time before revalidator/purge can't be shorten to 
>> 0.2s or 0.5s.
>> It's not reasonable there exists a dp flow after revalidator/purge.
>
>What about my suggested change of removing the sleeps completely? Does it work 
>for you, or is it not testing correctly?
>
>>
>> From: Faicker Mo <faicker...@ucloud.cn>
>>  Date: 2023-03-06 12:22:48
>> To:Eelco Chaudron <echau...@redhat.com>
>>  cc: d...@openvswitch.org,i.maxim...@ovn.org,simon.hor...@corigine.com
>> Subject: Re:Re: [PATCH v8] netdev-offload-tc: del ufid mapping if device not 
>> exist
>> It failed at system-offloads-traffic.at:737 without the sleep before 
>> revalidator/purge. There was a flow,
>>> 2023-03-06T02:17:13.245Z|00079|unixctl|DBG|received request 
>>> dpctl/dump-flows[], id=0
>>> 2023-03-06T02:17:13.245Z|00080|unixctl|DBG|replying with success, id=0: 
>>> "recirc_id(0),in_port(4),eth(src=f6:2d:a8:f7:d2:f7,dst=aa:1a:54:e9:c5:56),eth_type(0x0800),ipv4(frag=no),
>>>  packe
>> ts:1, bytes:84, used:0.040s, actions:2
>>> "
>>
>> Tested,
>> The first sleep can be removed with msg filters.
>> The sleep before revalidator/purge can be shorten to 0.2s.
>>
>>
>>
>>
>>
>>
>> From: Eelco Chaudron <echau...@redhat.com>
>> Date: 2023-03-03 19:11:25
>> To:  Faicker Mo <faicker...@ucloud.cn>
>> Cc:  d...@openvswitch.org,i.maxim...@ovn.org,simon.hor...@corigine.com
>> Subject: Re: [PATCH v8] netdev-offload-tc: del ufid mapping if device not 
>> exist>
>>>
>>> On 2 Mar 2023, at 8:57, Faicker Mo wrote:
>>>
>>>> The device may be deleted and added with ifindex changed.
>>>> The tc rules on the device will be deleted if the device is deleted.
>>>> The func tc_del_filter will fail when flow del. The mapping of
>>>> ufid to tc will not be deleted.
>>>> The traffic will trigger the same flow(with same ufid) to put to tc
>>>> on the new device. Duplicated ufid mapping will be added.
>>>> If the hashmap is expanded, the old mapping entry will be the first entry,
>>>> and now the dp flow can't be deleted.
>>>>
>>>>
>>>> Signed-off-by: Faicker Mo <faicker...@ucloud.cn>
>>>> ---
>>>> v2:
>>>> - Add tc offload test case
>>>> v3:
>>>> - No change
>>>> v4:
>>>> - No change
>>>> v5:
>>>> - No change
>>>> v6:
>>>> - No change
>>>> v7:
>>>> - Minor fix for test case and rebased
>>>> v8:
>>>> - Shorten the time of the test case
>>>> ---
>>>>  lib/netdev-offload-tc.c          |  3 +-
>>>>  tests/system-offloads-traffic.at | 54 ++++++++++++++++++++++++++++++++
>>>>  2 files changed, 56 insertions(+), 1 deletion(-)
>>>>
>>>>
>>>> diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c
>>>> index 4fb9d9f21..dd2020cad 100644
>>>> --- a/lib/netdev-offload-tc.c
>>>> +++ b/lib/netdev-offload-tc.c
>>>> @@ -276,8 +276,9 @@ del_filter_and_ufid_mapping(struct tcf_id *id, const 
>>>> ovs_u128 *ufid,
>>>>      }
>>>>
>>>>      err = tc_del_flower_filter(id);
>>>> -    if (!err) {
>>>> +    if (!err || err == ENODEV) {
>>>>          del_ufid_tc_mapping(ufid);
>>>> +        return 0;
>>>>      }
>>>>      return err;
>>>>  }
>>>> diff --git a/tests/system-offloads-traffic.at 
>>>> b/tests/system-offloads-traffic.at
>>>> index 7558812eb..ba18711cb 100644
>>>> --- a/tests/system-offloads-traffic.at
>>>> +++ b/tests/system-offloads-traffic.at
>>>> @@ -690,3 +690,57 @@ 
>>>> OVS_CHECK_ACTIONS([check_pkt_len(size=200,gt(5),le(check_pkt_len(size=100,gt(5),
>>>>
>>>>  OVS_TRAFFIC_VSWITCHD_STOP
>>>>  AT_CLEANUP
>>>> +
>>>> +AT_SETUP([offloads - delete ufid mapping if device not exist - offloads 
>>>> enabled])
>>>> +OVS_TRAFFIC_VSWITCHD_START([], [], [-- set Open_vSwitch . 
>>>> other_config:hw-offload=true])
>>>> +
>>>> +AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
>>>> +
>>>> +ADD_NAMESPACES(at_ns0, at_ns1, at_ns2)
>>>> +
>>>> +dnl Disable IPv6 to skip unexpected flow
>>>> +AT_CHECK([sysctl -w net.ipv6.conf.br0.disable_ipv6=1], [0], [ignore])
>>>> +NS_CHECK_EXEC([at_ns0], [sysctl -w net.ipv6.conf.all.disable_ipv6=1], 
>>>> [0], [ignore])
>>>> +NS_CHECK_EXEC([at_ns1], [sysctl -w net.ipv6.conf.all.disable_ipv6=1], 
>>>> [0], [ignore])
>>>> +NS_CHECK_EXEC([at_ns2], [sysctl -w net.ipv6.conf.all.disable_ipv6=1], 
>>>> [0], [ignore])
>>>> +
>>>> +ADD_VETH(p0, at_ns0, br0, "10.1.1.1/24", "aa:1a:54:e9:c5:56")
>>>> +ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
>>>> +
>>>> +NS_CHECK_EXEC([at_ns0], [ping -q -c 2 -i 0.2 10.1.1.2 | FORMAT_PING], 
>>>> [0], [dnl
>>>> +2 packets transmitted, 2 received, 0% packet loss, time 0ms
>>>> +])
>>>> +sleep 1
>>>> +
>>>> +dnl Delete and add interface ovs-p0/p0
>>>> +AT_CHECK([ip link del dev ovs-p0])
>>>> +AT_CHECK([ip link add p0 type veth peer name ovs-p0 || return 77])
>>>> +AT_CHECK([ip link set p0 netns at_ns0])
>>>> +AT_CHECK([ip link set dev ovs-p0 up])
>>>> +NS_CHECK_EXEC([at_ns0], [ip addr add dev p0 "10.1.1.1/24"])
>>>> +NS_CHECK_EXEC([at_ns0], [ip link set dev p0 up])
>>>> +NS_CHECK_EXEC([at_ns0], [ip link set dev p0 address "aa:1a:54:e9:c5:56"])
>>>> +
>>>> +sleep 1
>>>> +AT_CHECK([ovs-appctl revalidator/purge])
>>>> +
>>>> +dnl Generate flows to trigger the hmap expand once
>>>> +ADD_VETH(p2, at_ns2, br0, "10.1.1.3/24")
>>>> +NS_CHECK_EXEC([at_ns0], [ping -q -c 2 -i 0.2 10.1.1.2 | FORMAT_PING], 
>>>> [0], [dnl
>>>> +2 packets transmitted, 2 received, 0% packet loss, time 0ms
>>>> +])
>>>> +NS_CHECK_EXEC([at_ns0], [ping -q -c 2 -i 0.2 10.1.1.3 | FORMAT_PING], 
>>>> [0], [dnl
>>>> +2 packets transmitted, 2 received, 0% packet loss, time 0ms
>>>> +])
>>>> +
>>>> +sleep 1
>>>> +AT_CHECK([ovs-appctl revalidator/purge])
>>>> +
>>>> +AT_CHECK([test $(ovs-appctl dpctl/dump-flows | grep -c 
>>>> "eth_type(0x0800)") -eq 0], [0], [ignore])
>>>> +
>>>> +OVS_TRAFFIC_VSWITCHD_STOP(["/could not open network device ovs-p0/d
>>>> +/on nonexistent port/d
>>>> +/failed to flow_get/d
>>>> +/Failed to acquire udpif_key/d
>>>> +"])
>>>> +AT_CLEANUP
>>>
>>> The changes look fine, however, you still have a 3-second delay in your 
>>> tests. Any specific reason for this?
>>>
>>> I tried removing them and I found that if I did I needed to add another log 
>>> messages exclusion. With this I was able to still make it fail without your 
>>> change, and get it to pass for 400 runs.
>>>
>>> Thought?
>>>
>>> //Eelco
>>>
>>> diff --git a/tests/system-offloads-traffic.at 
>>> b/tests/system-offloads-traffic.at
>>> index ba18711cb..b2a402dec 100644
>>> --- a/tests/system-offloads-traffic.at
>>> +++ b/tests/system-offloads-traffic.at
>>> @@ -710,7 +710,7 @@ ADD_VETH(p1, at_ns1, br0, "10.1.1.2/24")
>>> NS_CHECK_EXEC([at_ns0], [ping -q -c 2 -i 0.2 10.1.1.2 | FORMAT_PING], [0], 
>>> [dnl
>>> 2 packets transmitted, 2 received, 0% packet loss, time 0ms
>>> ])
>>> -sleep 1
>>> +#sleep 1
>>>
>>> dnl Delete and add interface ovs-p0/p0
>>> AT_CHECK([ip link del dev ovs-p0])
>>> @@ -721,7 +721,7 @@ NS_CHECK_EXEC([at_ns0], [ip addr add dev p0 
>>> "10.1.1.1/24"])
>>> NS_CHECK_EXEC([at_ns0], [ip link set dev p0 up])
>>> NS_CHECK_EXEC([at_ns0], [ip link set dev p0 address "aa:1a:54:e9:c5:56"])
>>>
>>> -sleep 1
>>> +#sleep 1
>>> AT_CHECK([ovs-appctl revalidator/purge])
>>>
>>> dnl Generate flows to trigger the hmap expand once
>>> @@ -733,7 +733,7 @@ NS_CHECK_EXEC([at_ns0], [ping -q -c 2 -i 0.2 10.1.1.3 | 
>>> FORMAT_PING], [0], [dnl
>>> 2 packets transmitted, 2 received, 0% packet loss, time 0ms
>>> ])
>>>
>>> -sleep 1
>>> +#sleep 1
>>> AT_CHECK([ovs-appctl revalidator/purge])
>>>
>>> AT_CHECK([test $(ovs-appctl dpctl/dump-flows | grep -c "eth_type(0x0800)") 
>>> -eq 0], [0], [ignore])
>>> @@ -742,5 +742,6 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/could not open network 
>>> device ovs-p0/d
>>> /on nonexistent port/d
>>> /failed to flow_get/d
>>> /Failed to acquire udpif_key/d
>>> +/failed to get ifindex for ovs-p0: No such device/d
>>> "])
>>> AT_CLEANUP
>>>
>




_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to