Eelco Chaudron <[email protected]> 于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.


> //Eelco
>
> > Eelco Chaudron <[email protected]> 于2022年11月23日周三 23:54写道:
> >
> >>
> >>
> >> On 19 Nov 2022, at 1:46, Peng He wrote:
> >>
> >>> Eelco Chaudron <[email protected]> 于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 <[email protected]> 于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 <[email protected]> 于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 <[email protected]>
> >>>>>>>>> ---
> >>>>>>>>>  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
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to