On 2024-09-10 10:31, pbhagavat...@marvell.com wrote:
From: Pavan Nikhilesh <pbhagavat...@marvell.com>
Event prefetching improves scheduling performance by pre-scheduling events to
event ports when dequeues are issued. This series introduces various types and
levels of prefetching to the eventdev library.
I would avoid to use the term "prefetch", since that word is used for
manual (software) prefetching (preloading in ARM speak). In particular,
since having the event device prefetch future event-related data may
potentially also be interesting to do (i.e., to have an option to
prefetch user-configurable lines in the buffer pointed to by a future
event).
I suggest RTE_EVENT_DEV_PRESCHEDULE*.
If you make prescheduling a hint, you don't need the capability flags,
and no error handling. Much smaller API, less fuzz for the application.
Prefetching Types:
* RTE_EVENT_DEV_PREFETCH_NONE: No prefetching.
* RTE_EVENT_DEV_PREFETCH: Always issue a prefetch when dequeue is issued.
* RTE_EVENT_DEV_PREFETCH_INTELLIGENT: Delay issuing prefetch until there
are no forward progress constraints with the held flow contexts.
Maybe RTE_EVENT_DEV_PREFETCH_ADAPTIVE is better. I suggest that being
the default. In that case, for event devices which can't preschedule or
which always (by design) have to preschedule, can continue doing what
they are doing and still calling this "adaptive".
RTE_EVENT_DEV_PREFETCH_AUTO would also work.
Setting aside the complexity issue, prescheduling hints or configuration
seems like a valuable feature to include in the Eventdev API.
Prefetching Levels:
* Event Device Level Prefetch: Prefetching can be enabled or disabled at the
event device during configuration. Event devices can indicate prefetching
capabilities using `RTE_EVENT_DEV_CAP_EVENT_PREFETCH` and
`RTE_EVENT_DEV_CAP_EVENT_INTELLIGENT_PREFETCH` via the event device info
function `info.event_dev_cap`.
* Event Port Level Prefetch: Prefetching can be selectively enabled or
disabled
at the event port during runtime. Event devices can indicate this capability
using `RTE_EVENT_PORT_CAP_EVENT_PER_PORT_PREFETCH` via the event device info
function `info.event_port_cap`.
* Application Controlled Prefetch Hint: Applications can provide hints to the
event device to start prefetching events using the new API
`rte_event_port_prefetch`. Event devices can indicate this capabilities
using
`RTE_EVENT_DEV_CAP_SW_PREFETCH` via the event device info function
`info.event_dev_cap`.
The rte_event_dequeue_burst operation initiates the prefetch operation, which
completes in parallel without affecting the dequeued event flow context and
dequeue latency. On the next dequeue operation, the prefetched events are
dequeued, and prefetch is initiated again.
In the case of application-controlled prefetch hints, the currently held flow
contexts, if any, are not affected by the prefetch operation. On the next
dequeue operation, the prefetched events are returned, but prefetch is not
initiated again until the application provides the hint again. If prefetching
is already enabled at the event device level or event port level,
the hint is ignored.
Pavan Nikhilesh (3):
eventdev: introduce event prefetching
eventdev: allow event ports to modified prefetches
eventdev: add SW event prefetch hint
app/test/test_eventdev.c | 113 +++++++++++++++
doc/guides/prog_guide/eventdev/eventdev.rst | 42 ++++++
lib/eventdev/eventdev_pmd.h | 4 +
lib/eventdev/eventdev_private.c | 19 +++
lib/eventdev/eventdev_trace_points.c | 6 +
lib/eventdev/rte_eventdev.h | 152 ++++++++++++++++++++
lib/eventdev/rte_eventdev_core.h | 9 ++
lib/eventdev/rte_eventdev_trace_fp.h | 19 ++-
lib/eventdev/version.map | 6 +
9 files changed, 369 insertions(+), 1 deletion(-)
--
2.46.0