On 16 Mar 2023, at 13:02, Ilya Maximets wrote:
> 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 <[email protected]> >>>>> Reviewed-by: Roi Dayan <[email protected]> >>>>> --- >>>>> 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. ACK, looks like my memory is not in a good state :) Thanks for resetting it... _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
