Machine learning event adapter library
======================================

DPDK Eventdev library provides event driven programming model with features to 
schedule
events. ML Device library provides an interface to ML poll mode drivers that 
support
Machine Learning inference operations. Event ML Adapter is intended to bridge 
between
the event device and the ML device.

Packet flow from ML device to the event device can be accomplished using 
software and hardware
based transfer mechanisms. The adapter queries an eventdev PMD to determine 
which mechanism to
be used. The adapter uses an EAL service core function for software based 
packet transfer and
uses the eventdev PMD functions to configure hardware based packet transfer 
between ML device
and the event device.

The application can choose to submit a ML operation directly to an ML device or 
send it to the ML
adapter via eventdev based on RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD 
capability. The first
mode is known as the event new (RTE_EVENT_ML_ADAPTER_OP_NEW) mode and the 
second as the event
forward (RTE_EVENT_ML_ADAPTER_OP_FORWARD) mode. The choice of mode can be 
specified while
creating the adapter. In the former mode, it is an application responsibility 
to enable ingress
packet ordering. In the latter mode, it is the adapter responsibility to enable 
the ingress
packet ordering.


Working model of RTE_EVENT_ML_ADAPTER_OP_NEW mode:

               +--------------+         +--------------+
               |              |         |   ML stage   |
               | Application  |---[2]-->| + enqueue to |
               |              |         |     mldev    |
               +--------------+         +--------------+
                   ^   ^                       |
                   |   |                      [3]
                  [6] [1]                      |
                   |   |                       |
               +--------------+                |
               |              |                |
               | Event device |                |
               |              |                |
               +--------------+                |
                      ^                        |
                      |                        |
                     [5]                       |
                      |                        v
               +--------------+         +--------------+
               |              |         |              |
               |  ML adapter  |<--[4]---|    mldev     |
               |              |         |              |
               +--------------+         +--------------+


        [1] Application dequeues events from the previous stage.
        [2] Application prepares the ML operations.
        [3] ML operations are submitted to mldev by application.
        [4] ML adapter dequeues ML completions from mldev.
        [5] ML adapter enqueues events to the eventdev.
        [6] Application dequeues from eventdev for further processing.

In the RTE_EVENT_ML_ADAPTER_OP_NEW mode, application submits ML operations 
directly to ML device.
The ML adapter then dequeues ML completions from ML device and enqueue events 
to the event
device. This mode does not ensure ingress ordering, if the application directly 
enqueues to mldev
without going through ML / atomic stage i.e. removing item [1] and [2].

Events dequeued from the adapter will be treated as new events. In this mode, 
application needs
to specify event information (response information) which is needed to enqueue 
an event after the
ML operation is completed.


Working model of RTE_EVENT_ML_ADAPTER_OP_FORWARD mode:

               +--------------+         +--------------+
       --[1]-->|              |---[2]-->|  Application |
               | Event device |         |      in      |
       <--[8]--|              |<--[3]---| Ordered stage|
               +--------------+         +--------------+
                   ^      |
                   |     [4]
                  [7]     |
                   |      v
              +----------------+       +--------------+
              |                |--[5]->|              |
              |   ML adapter   |       |     mldev    |
              |                |<-[6]--|              |
              +----------------+       +--------------+


        [1] Events from the previous stage.
        [2] Application in ordered stage dequeues events from eventdev.
        [3] Application enqueues ML operations as events to eventdev.
        [4] ML adapter dequeues event from eventdev.
        [5] ML adapter submits ML operations to mldev (Atomic stage).
        [6] ML adapter dequeues ML completions from mldev
        [7] ML adapter enqueues events to the eventdev
        [8] Events to the next stage

In the event forward (RTE_EVENT_ML_ADAPTER_OP_FORWARD) mode, if the HW supports 
the capability
RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_OP_FWD, application can directly submit 
the ML operations
to the mldev. If not, application retrieves the event port of the ML adapter 
through the API,
rte_event_ml_adapter_event_port_get(). Then, links its event queue to this port 
and starts
enqueuing ML operations as events to the eventdev. The adapter then dequeues 
the events and
submits the ML operations to the mldev. After the ML completions, the adapter 
enqueues events to
the event device.

Application can use this mode, when ingress packet ordering is needed. Events 
dequeued from the
adapter will be treated as forwarded events. In this mode, the application 
needs to specify the
mldev ID and queue pair ID (request information) needed to enqueue an ML 
operation in addition to
the event information (response information) needed to enqueue an event after 
the ML operation
has completed.

The event ML adapter provides common APIs to configure the packet flow from the 
ML device to
event devices for both SW and HW based transfers. The ML event adapter's 
functions are:

 - rte_event_ml_adapter_create_ext()
 - rte_event_ml_adapter_create()
 - rte_event_ml_adapter_free()
 - rte_event_ml_adapter_queue_pair_add()
 - rte_event_ml_adapter_queue_pair_del()
 - rte_event_ml_adapter_start()
 - rte_event_ml_adapter_stop()
 - rte_event_ml_adapter_stats_get()
 - rte_event_ml_adapter_stats_reset()

The application creates an instance using rte_event_ml_adapter_create() or
rte_event_ml_adapter_create_ext().

mldev queue pair addition / deletion is done using the 
rte_event_ml_adapter_queue_pair_add() /
rte_event_ml_adapter_queue_pair_del() APIs. If HW supports the capability
RTE_EVENT_ML_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND, event information must be 
passed to the add
API.


Contents of RFC
---------------
This RFC attempts to define standard APIs for:

1) New event type for ML operations.
2) Definition of mode of operations for the adapter.
3) Definition of functions to handle ML event adapter, which includes fetching
capabilities, adapter initialization and termination, managing adapter 
queue-pairs
and retrieving adapter stats.

Roadmap
-------
1) Address the comments for this RFC.
2) Common code for eventdev.
3) ML adapter driver for cn10k.
4) Add support for ML adapter in app/test-eventdev application.

Srikanth Yalavarthi (1):
  eventdev: introduce ML event adapter library

 MAINTAINERS                                   |    6 +
 config/rte_config.h                           |    1 +
 doc/api/doxy-api-index.md                     |    1 +
 doc/guides/prog_guide/event_ml_adapter.rst    |  268 ++++
 doc/guides/prog_guide/eventdev.rst            |    8 +-
 .../img/event_ml_adapter_op_forward.svg       | 1086 +++++++++++++++++
 .../img/event_ml_adapter_op_new.svg           | 1079 ++++++++++++++++
 doc/guides/prog_guide/index.rst               |    1 +
 lib/eventdev/meson.build                      |    4 +-
 lib/eventdev/rte_event_ml_adapter.c           |    6 +
 lib/eventdev/rte_event_ml_adapter.h           |  594 +++++++++
 lib/eventdev/rte_eventdev.h                   |   45 +
 lib/meson.build                               |    2 +-
 lib/mldev/rte_mldev.h                         |    6 +
 14 files changed, 3102 insertions(+), 5 deletions(-)
 create mode 100644 doc/guides/prog_guide/event_ml_adapter.rst
 create mode 100644 doc/guides/prog_guide/img/event_ml_adapter_op_forward.svg
 create mode 100644 doc/guides/prog_guide/img/event_ml_adapter_op_new.svg
 create mode 100644 lib/eventdev/rte_event_ml_adapter.c
 create mode 100644 lib/eventdev/rte_event_ml_adapter.h

-- 
2.17.1

Reply via email to