> -----Original Message-----
> From: dev <dev-boun...@dpdk.org> On Behalf Of Mattias Rönnblom
> Sent: Monday, March 15, 2021 2:45 PM
> To: Jerin Jacob <jerinjac...@gmail.com>
> Cc: Jerin Jacob <jer...@marvell.com>; dpdk-dev <dev@dpdk.org>; Richardson,
> Bruce <bruce.richard...@intel.com>
> Subject: Re: [dpdk-dev] [RFC] eventdev: introduce event dispatcher
> 
> On 2021-03-07 14:04, Jerin Jacob wrote:
> > On Fri, Feb 26, 2021 at 1:31 PM Mattias Rönnblom
> > <mattias.ronnb...@ericsson.com> wrote:
> >> On 2021-02-25 13:32, Jerin Jacob wrote:
> >>> On Fri, Feb 19, 2021 at 12:00 AM Mattias Rönnblom
> >>> <mattias.ronnb...@ericsson.com> wrote:
> >>>> The purpose of the event dispatcher is primarily to decouple different
> >>>> parts of an application (e.g., processing pipeline stages), which
> >>>> share the same underlying event device.
> >>>>
> >>>> The event dispatcher replaces the conditional logic (often, a switch
> >>>> statement) that typically follows an event device dequeue operation,
> >>>> where events are dispatched to different parts of the application
> >>>> based on the destination queue id.
> >>> # If the device has all type queue[1] this RFC would restrict to
> >>> use queue ONLY as stage. A stage can be a Queue Type also.
> >>> How we can abstract this in this model?
> >>
> >> "All queue type" is about scheduling policy. I would think that would be
> >> independent of the "logical endpoint" of the event (i.e., the queue id).
> >> I feel like I'm missing something here.
> > Each queue type also can be represented as a stage.
> > For example, If the system has only one queue, the Typical IPsec
> > outbound stages can be
> > Q0-Ordered(For SA lookup) -> Q0(Atomic)(For Sequence number update) ->
> > Q0(Orderd)(Crypto operation)->Q0(Atomic)(Send on wire)
> 
> 
> OK, this makes sense.
> 
> 
> Would such an application want to add a callback
> per-queue-per-sched-type, or just per-sched-type? In your example, if
> you would have a queue Q1 as well, would want to have the option to have
> different callbacks for atomic-type events on Q0 and Q1?
> 
> 
> Would you want to dispatch based on anything else in the event? You
> could basically do it on any field (flow id, priority, etc.), but is
> there some other field that's commonly used to denote a processing stage?

I expect that struct rte_event::event_type and sub_event_type would regularly
be used to split out different type of "things" that would be handled 
separately.

Overall, I think we could imagine the Queue number, Queue Scheduling type 
(Re-Ordered, Atomic), 
Event type, sub event type, Flow-ID.. all contributing somehow to what function 
to execute in some situation.

As a somewhat extreme example to prove a point:
An RX core might use rte_flow rules to split traffic into some arbitrary 
grouping, and
then the rte_event::flow_id could be used to select the function-pointer to 
jump to handle it?

I like the *concept* of having a table of func-ptrs, and removing of a switch() 
in that way,
but I'm not sure that DPDK Eventdev APIs are the right place for it. I think 
Jerin already
suggested the "helper function" concept, which seems a good idea to allow 
optional usage.

To be clear, I'm not against upstreaming of such an event-dispatcher, but I'm 
not sure
its possible to build it to be generic enough for all use-cases. Maybe focusing 
on an actual
use-case and driving the design from that is a good approach?


Regards, -Harry

<snip patch contents below>

Reply via email to