On Thu, Sep 21, 2023 at 5:16 PM <pbhagavat...@marvell.com> wrote: > > From: Pavan Nikhilesh <pbhagavat...@marvell.com> > > A collection of event queues linked to an event port can be associated > with unique identifier called as a profile, multiple such profiles can
as a "link profile" > be configured based on the event device capability using the function > `rte_event_port_profile_links_set` which takes arguments similar to > `rte_event_port_link` in addition to the profile identifier. > > The maximum link profiles that are supported by an event device is > advertised through the structure member > `rte_event_dev_info::max_profiles_per_port`. > > By default, event ports are configured to use the link profile 0 on > initialization. > > Once multiple link profiles are set up and the event device is started, the > application can use the function `rte_event_port_profile_switch` to change > the currently active profile on an event port. This effects the next > `rte_event_dequeue_burst` call, where the event queues associated with the > newly active link profile will participate in scheduling. > > Rudementary work flow would something like: > > Config path: > > uint8_t lowQ[4] = {4, 5, 6, 7}; lowq > uint8_t highQ[4] = {0, 1, 2, 3}; highq > > if (rte_event_dev_info.max_profiles_per_port < 2) > return -ENOTSUP; > > rte_event_port_profile_links_set(0, 0, highQ, NULL, 4, 0); > rte_event_port_profile_links_set(0, 0, lowQ, NULL, 4, 1); > > Worker path: Simplify by: uint8_t profile_id_to_switch; while (1) { deq = rte_event_dequeue_burst(0, 0, &ev, 1, 0); if (deq == 0) { profile_id_to_switch = app_find_profile_id_to_switch(); rte_event_port_profile_switch(0, 0, profile_id_to_switch); continue; } // Process the event received. } > An application could use heuristic data of load/activity of a given event > port and change its active profile to adapt to the traffic pattern. > > An unlink function `rte_event_port_profile_unlink` is provided to > modify the links associated to a profile, and > `rte_event_port_profile_links_get` can be used to retrieve the links > associated with a profile. > > Using Link profiles can reduce the overhead of linking/unlinking and > waiting for unlinks in progress in fast-path and gives applications > the ability to switch between preset profiles on the fly. > > v3 Changes: > ---------- > - Rebase to next-eventdev > - Rename testcase name to match API. > > v2 Changes: > ---------- > - Fix compilation. > > Pavan Nikhilesh (3): > eventdev: introduce link profiles > event/cnxk: implement event link profiles > test/event: add event link profile test > > app/test/test_eventdev.c | 117 +++++++++++ > config/rte_config.h | 1 + > doc/guides/eventdevs/cnxk.rst | 1 + > doc/guides/eventdevs/features/cnxk.ini | 3 +- > doc/guides/eventdevs/features/default.ini | 1 + > doc/guides/prog_guide/eventdev.rst | 40 ++++ > doc/guides/rel_notes/release_23_11.rst | 22 ++ > drivers/common/cnxk/roc_nix_inl_dev.c | 4 +- > drivers/common/cnxk/roc_sso.c | 18 +- > drivers/common/cnxk/roc_sso.h | 8 +- > drivers/common/cnxk/roc_sso_priv.h | 4 +- > drivers/event/cnxk/cn10k_eventdev.c | 45 ++-- > drivers/event/cnxk/cn10k_worker.c | 11 + > drivers/event/cnxk/cn10k_worker.h | 1 + > drivers/event/cnxk/cn9k_eventdev.c | 74 ++++--- > drivers/event/cnxk/cn9k_worker.c | 22 ++ > drivers/event/cnxk/cn9k_worker.h | 2 + > drivers/event/cnxk/cnxk_eventdev.c | 37 ++-- > drivers/event/cnxk/cnxk_eventdev.h | 10 +- > drivers/event/dlb2/dlb2.c | 1 + > drivers/event/dpaa/dpaa_eventdev.c | 1 + > drivers/event/dpaa2/dpaa2_eventdev.c | 2 +- > drivers/event/dsw/dsw_evdev.c | 1 + > drivers/event/octeontx/ssovf_evdev.c | 2 +- > drivers/event/opdl/opdl_evdev.c | 1 + > drivers/event/skeleton/skeleton_eventdev.c | 1 + > drivers/event/sw/sw_evdev.c | 1 + > lib/eventdev/eventdev_pmd.h | 59 +++++- > lib/eventdev/eventdev_private.c | 9 + > lib/eventdev/eventdev_trace.h | 32 +++ > lib/eventdev/eventdev_trace_points.c | 12 ++ > lib/eventdev/rte_eventdev.c | 146 ++++++++++--- > lib/eventdev/rte_eventdev.h | 231 +++++++++++++++++++++ > lib/eventdev/rte_eventdev_core.h | 6 +- > lib/eventdev/rte_eventdev_trace_fp.h | 8 + > lib/eventdev/version.map | 4 + > 36 files changed, 827 insertions(+), 111 deletions(-) > > -- > 2.25.1 >