On 3/16/23 12:49, Eelco Chaudron wrote:
> 
> 
> On 16 Mar 2023, at 12:00, Ilya Maximets wrote:
> 
>> On 3/16/23 10:16, Eelco Chaudron wrote:
>>> On 1 Mar 2023, at 8:22, Chris Mi wrote:
>>>
>>>> In thread handler 0, add netdev offload recv in normal recv upcalls.
>>>> To avoid starvation, introduce a flag to alternate the order of
>>>> receiving normal upcalls and offload upcalls based on that flag.
>>>>
>>>> Add similar change for recv_wait.
>>>
>>> See some comments inline below, and some architecture input from Ilya is 
>>> needed...
>>>
>>> //Eelco
>>>
>>>
>>>> Signed-off-by: Chris Mi <c...@nvidia.com>
>>>> Reviewed-by: Roi Dayan <r...@nvidia.com>
>>>> ---
>>>>  lib/dpif-netlink.c            | 42 ++++++++++++++++++++++++++++++-----
>>>>  ofproto/ofproto-dpif-upcall.c | 16 +++++++++----
>>>>  2 files changed, 48 insertions(+), 10 deletions(-)
>>
>> <snip>
>>
>>>> +static int
>>>> +dpif_netlink_recv(struct dpif *dpif_, uint32_t handler_id,
>>>> +                  struct dpif_upcall *upcall, struct ofpbuf *buf)
>>>> +{
>>>> +    struct dpif_netlink *dpif = dpif_netlink_cast(dpif_);
>>>> +    struct dpif_handler *handler;
>>>> +    int error;
>>>> +
>>>> +    fat_rwlock_rdlock(&dpif->upcall_lock);
>>>> +    handler = &dpif->handlers[handler_id];
>>>> +    if (handler->recv_offload_first) {
>>>> +        error = netdev_offload_recv(upcall, buf, handler_id);
>>>
>>> Here the abstraction blurs a bit, as netdev_offload_recv() would try to 
>>> call implementations, tc and rte_flow?
>>> See also earlier comment in netdev_offload_recv()
>>>
>>> Also what about for example rte_flow being handled now in the dpif-netdev 
>>> class?
>>> In general, OVS-DPDK does not have any upcall threads, so if OVS-DPDK (or 
>>> any new offload) decides to use any of these mechanisms it will fail.
>>>
>>> Ilya do you have any feedback?
>>
>> IIRC, handlers are getting created.  But we need to implement recv()
>> and recv_wait() callbacks for dpif-netdev, that will just call to
>> netdev_offload_recv[_wait]().
> 
> I’m ok for now (see other email), just to clarify that the handler threads 
> get created out of dpif-netlink.c.
> So in theory now we would be calling netdev_offload_recv[_wait]() in the 
> dpif-netlink related threads.

Not really, handlers are generic and created in ofproto/ofproto-dpif-upcall.c.
We just don't have a recv() callback for them to use in dpif-netdev, AFAICT.

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to