Eelco Chaudron <echau...@redhat.com> 于2022年11月24日周四 17:08写道:

>
>
> On 24 Nov 2022, at 10:04, Peng He wrote:
>
> > Eelco Chaudron <echau...@redhat.com> 于2022年11月24日周四 16:34写道:
> >
> >>
> >>
> >> On 24 Nov 2022, at 1:46, Peng He wrote:
> >>
> >>> So do we need this patch (补丁) (补丁) or not??
> >>>
> >>> Guessing it's quite rare in the real production environment that we
> have
> >>> two datapaths at the same time ....
> >>> And I am more (更多) (更多) curious that even though we have 2 datapaths,
> should
> >> the port
> >>> id be different? Is one
> >>> port capable of being assigned to 2 datapaths at the same time ????
> >>>
> >>> Because only when a port is assigned to 2 datapaths at the same time,
> we
> >>> should worry about this race....
> >>
> >> I think we should still add this patch (补丁) (补丁) , as it’s common to
> have a
> >> single DPDK datapath bridge, but it could have kernel (内核) (内核) (the
> bridge
> >> itself for example) and DPDK ports. In this case when the actions of the
> >> OpenFlow rule change there could be different actions for existing rules
> >> not yet updated by the revalidator.
> >>
> >> Or do I miss the point here?
> >>
> >> On a single DPDK datapath, the kernel (内核) ports will be processed by
> the DPDK
> > datapath also (through using AF_SOCKET socket), so in this case, we only
> > have one datapath and we will not have this race.
>
> If you are sure we can drop this patch (补丁) .
>

I am sure that normally we will have only one datapath.
I am not sure that why kernel datatpath's megaflow should be added into the
userspace datapath ....

But I guess we can drop this patch.

Thanks!

>
> >> //Eelco
> >>
> >>> Eelco Chaudron <echau...@redhat.com> 于2022年11月23日周三 23:54写道:
> >>>
> >>>>
> >>>>
> >>>> On 19 Nov 2022, at 1:46, Peng He wrote:
> >>>>
> >>>>> Eelco Chaudron <echau...@redhat.com> 于2022年11月18日周五 15:38写道:
> >>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 18 Nov 2022, at 2:57, Peng He wrote:
> >>>>>>
> >>>>>>> Since there are possible race conditions (between the kernel (内核)
> (内核)
> >> (内核)
> >>>>>> datapath and
> >>>>>>> userspace datapath),
> >>>>>>> I guess this patch (补丁) (补丁) (补丁) is now needed again? But two
> datapath
> >> is really
> >>>>>> rare in
> >>>>>>> the real deployment.
> >>>>>>> So I am not sure if we should pay attention here.
> >>>>>>
> >>>>>> I still think we should add this, as there seem to be a decent
> amount
> >> of
> >>>>>> times people intermix a kernel (内核) (内核) (内核) interface with a DPDK
> one.
> >> For
> >>>> example,
> >>>>>> the bridge interface, which would be up to get routing (溃败) (溃败)
> (溃败)
> >> information
> >>>> for
> >>>>>> tunnels.
> >>>>>
> >>>>>
> >>>>> In this case, bridge interfaces are attached (附加) (附加) to the
> userspace
> >> datapath,
> >>>> it
> >>>>> will be " polled (民意调查) (民意调查) " by the main thread, and it's pmd-id
> is
> >> NON_PMD_CORE_ID.
> >>>>>
> >>>>> The case that race could happen is that mix using of userspace
> datapath
> >>>> and
> >>>>> kernel (内核) (内核) datapath. When the kernel datapath receives a
> upcall, it
> >> will set
> >>>>> the pmd-id to PMD_ID_NULL. Checking the code (代码) (代码) of
> >> dpif_netdev_flow_put,
> >>>> only
> >>>>> the megaflow with pmd-id equals to PMD_ID_NULL will be installed
> (安装) (安装)
> >>>>> into all the PMD threads.
> >>>>
> >>>> Agreed, I think this is the only case it could still happen. I could
> not
> >>>> find any other paths.
> >>>>
> >>>>>> //Eelco
> >>>>>>
> >>>>>>
> >>>>>>> Eelco Chaudron <echau...@redhat.com> 于2022年10月19日周三 18:50写道:
> >>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 10 Oct 2022, at 9:12, Eelco Chaudron wrote:
> >>>>>>>>
> >>>>>>>>> On 8 Oct 2022, at 5:27, Peng He wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi,Eelco
> >>>>>>>>>>
> >>>>>>>>>> after a second thought, I think this patch (补丁) (补丁) (补丁) is
> not needed
> >>>> neither,
> >>>>>>>>>> the code (代码) (代码) (代码) here is trying to find a rule which
> cover the
> >> packet,
> >>>>>>>>>> it does not mean (意味着) (意味着) (意味着) the match and action of rule
> equals
> >> to the
> >>>> ones
> >>>>>>>>>> of the ukey.
> >>>>>>>>>>
> >>>>>>>>>> So the code (代码) (代码) (代码) here is just a prevention, no need
> to make
> >> it
> >>>>>> consistent
> >>>>>>>>>> with ukey.
> >>>>>>>>>>
> >>>>>>>>>> but the comments above are really misleading, so I sent a new
> >> patch (补丁) (补丁)
> >>>>>> (补丁)
> >>>>>>>> fixing
> >>>>>>>>>> it.
> >>>>>>>>>
> >>>>>>>>> Ack, will wait for the v5, and review.
> >>>>>>>>
> >>>>>>>> As I did not see a v5, I reviewed the v4, and assume (假设) (假设)
> (假设) this
> >> patch (补丁) (补丁)
> >>>>>> (补丁) can be
> >>>>>>>> ignored (忽略) (忽略) (忽略) .
> >>>>>>>>
> >>>>>>>> //Eelco
> >>>>>>>>
> >>>>>>>>>> Peng He <xnhp0...@gmail.com> 于2022年10月3日周一 20:41写道:
> >>>>>>>>>>
> >>>>>>>>>>> When PMDs perform upcalls, the newly generated (生成) (生成) (生成)
> ukey
> >> will
> >>>> replace
> >>>>>>>>>>> the old, however, the newly generated (生成) (生成) (生成) mageflow
> will be
> >> discard
> >>>>>>>>>>> to reuse the old one without checking if the actions of new and
> >>>>>>>>>>> old are equal.
> >>>>>>>>>>>
> >>>>>>>>>>> This code (代码) (代码) (代码) prevents in case someone runs
> dpctl/add-flow
> >> to add
> >>>>>>>>>>> a dp flow with inconsistent actions with the actions of ukey,
> >>>>>>>>>>> and causes more (更多) (更多) (更多) confusion (混乱) (混乱) (混乱) .
> >>>>>>>>>>>
> >>>>>>>>>>> Signed-off-by: Peng He <hepeng.0...@bytedance.com>
> >>>>>>>>>>> ---
> >>>>>>>>>>>  lib/dpif-netdev.c | 17 ++++++++++++++++-
> >>>>>>>>>>>  1 file (文件) (文件) (文件) changed, 16 insertions(+), 1 deletion(-)
> >>>>>>>>>>>
> >>>>>>>>>>> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> >>>>>>>>>>> index a45b46014..b316e59ef 100644
> >>>>>>>>>>> --- a/lib/dpif-netdev.c
> >>>>>>>>>>> +++ b/lib/dpif-netdev.c
> >>>>>>>>>>> @@ -8304,7 +8304,22 @@ handle_packet_upcall(struct
> >>>>>> dp_netdev_pmd_thread
> >>>>>>>>>>> *pmd,
> >>>>>>>>>>>           * to be locking revalidators out of making flow
> >>>>>>>> modifications. */
> >>>>>>>>>>>          ovs_mutex_lock(&pmd->flow_mutex);
> >>>>>>>>>>>          netdev_flow = dp_netdev_pmd_lookup_flow(pmd, key,
> NULL);
> >>>>>>>>>>> -        if (OVS_LIKELY(!netdev_flow)) {
> >>>>>>>>>>> +        if (OVS_UNLIKELY(netdev_flow)) {
> >>>>>>>>>>> +            struct dp_netdev_actions *old_act =
> >>>>>>>>>>> +                dp_netdev_flow_get_actions(netdev_flow);
> >>>>>>>>>>> +
> >>>>>>>>>>> +            if ((add_actions->size != old_act->size) ||
> >>>>>>>>>>> +                    memcmp(old_act->actions,
> add_actions->data,
> >>>>>>>>>>> +
> >>  add_actions->size)) {
> >>>>>>>>>>> +
> >>>>>>>>>>> +               struct dp_netdev_actions *new_act =
> >>>>>>>>>>> +                   dp_netdev_actions_create(add_actions->data,
> >>>>>>>>>>> +
> add_actions->size);
> >>>>>>>>>>> +
> >>>>>>>>>>> +               ovsrcu_set(&netdev_flow->actions, new_act);
> >>>>>>>>>>> +               ovsrcu_postpone(dp_netdev_actions_free,
> old_act);
> >>>>>>>>>>> +            }
> >>>>>>>>>>> +        } else {
> >>>>>>>>>>>              netdev_flow = dp_netdev_flow_add(pmd, &match,
> &ufid,
> >>>>>>>>>>>
>  add_actions->data,
> >>>>>>>>>>>
>  add_actions->size,
> >>>>>>>>>>> orig_in_port);
> >>>>>>>>>>> --
> >>>>>>>>>>> 2.25.1
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> hepeng
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> hepeng
> >>>>>>
> >>>>>>
> >>>>>
> >>>>> --
> >>>>> hepeng
> >>>>
> >>>>
> >>>
> >>> --
> >>> hepeng
> >>
> >>
> >
> > --
> > hepeng
>
>

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

Reply via email to