DPDK patches and discussions
 help / color / mirror / Atom feed
From: Liang Ma <liang.j.ma@intel.com>
To: jerin.jacob@caviumnetworks.com
Cc: dev@dpdk.org, harry.van.haaren@intel.com,
	bruce.richardson@intel.com, deepak.k.jain@intel.com,
	john.geary@intel.com, peter.mccarthy@intel.com, seanbh@gmail.com
Subject: [dpdk-dev] [RFC v5 PATCH 00/12] event: eventdev OPDL PMD
Date: Tue,  9 Jan 2018 12:20:11 +0000	[thread overview]
Message-ID: <1515500423-107720-1-git-send-email-liang.j.ma@intel.com> (raw)
In-Reply-To: <1513941830-186503-1-git-send-email-liang.j.ma@intel.com>

The OPDL (Ordered Packet Distribution Library) eventdev is a specific
implementation of the eventdev API. It is particularly suited to packet
processing workloads that have high throughput and low latency 
requirements. All packets follow the same path through the device.
The order which packets  follow is determinted by the order in which
queues are set up. Packets are left on the ring until they are transmitted.
As a result packets do not go out of order.

Features:

The OPDL eventdev implements a subset of features of the eventdev API;

Queues
 * Atomic
 * Ordered (Parallel is supported as parallel is a subset of Ordered)
 * Single-Link

Ports
 * Load balanced (for Atomic, Ordered, Parallel queues)
 * Single Link (for single-link queues)

Single Port Queue

It is possible to create a Single Port Queue 
RTE_EVENT_QUEUE_CFG_SINGLE_LINK. Packets dequeued from this queue do
not need to be re-enqueued (as is the case with an ordered queue). The 
purpose of this queue is to allow for asynchronous handling of packets in 
the middle of a pipeline. Ordered queues in the middle of a pipeline 
cannot delete packets.


Queue Dependencies

As stated the order in which packets travel through queues is static in
nature. They go through the queues in the order the queues are setup at
initialisation rte_event_queue_setup(). For example if an application
sets up 3 queues, Q0, Q1, Q2 and has 3 assoicated ports P0, P1, P2 and 
P3 then packets must be

 * Enqueued onto Q0 (typically through P0), then

 * Dequeued from Q0 (typically through P1), then

 * Enqueued onto Q1 (also through P1), then

 * Dequeued from Q2 (typically through P2),  then

 * Enqueued onto Q3 (also through P2), then

 * Dequeued from Q3 (typically through P3) and then transmitted on the 
   relevant eth port


Limitations

The opdl implementation has a number of limitations. These limitations are
due to the static nature of the underlying queues. It is because of this
that the implementation can achieve such high throughput and low latency

The following list is a comprehensive outline of the what is supported and
the limitations / restrictions imposed by the opdl pmd

 - The order in which packets moved between queues is static and fixed 
   (dynamic scheduling is not supported).

 - NEW, RELEASE op type are not explicitly supported. RX (first enqueue) 
   implicitly adds NEW event types, and TX (last dequeue) implicitly does
   RELEASE event types.

 - All packets follow the same path through device queues.

 - Flows within queues are NOT supported.

 - Event priority is NOT supported.

 - Once the device is stopped all inflight events are lost. Applications should 
   clear all inflight events before stopping it.

 - Each port can only be associated with one queue.

 - Each queue can have multiple ports associated with it.

 - Each worker core has to dequeue the maximum burst size for that port.


Reference
General concept of event driven programming model
[http://dpdk.org/doc/guides/eventdevs/index.html]

Original Ordered Pipeline Design slides 
[https://dpdksummit.com/Archive/pdf/2017Asia/DPDK-China2017-Ma-OPDL.pdf]

ChangeLog:
[v5]
  1. re-work the patch structure.
  2. fix the git-log typo. fix checkpatch warning.
  3. update the SPDX license.
[v4]
  1. fix 2 coding style issue
[v3]
  1. add dynamic log support.
  2. update maintainer, release notes.
  3. fix issues with review comments.

[v2]
  1. merge the opdl eventdev unit test code into opdl pmd.
  2. propose three new capability capability flags for overall eventdev.
  3. remove the opdl pmd example code.
  4. remove the opdl pmd example doc.



Liang Ma (12):
  event/opdl: add the opdl ring infrastructure library
  event/opdl: add opdl PMD main body and helper function
  event/opdl: add event queue config get/set support
  event/opdl: add event port config get/set support
  event/opdl: add eventdev enqueue/dequeue support
  event/opdl: opdl eventdev PMD unit test function
  lib/librte_eventdev: extend the eventdev capability flags
  event/dpaa2: apply the three new capability flags
  event/octeontx: apply the three new capability flags
  event/sw: apply the three new capability flags
  doc: update 18.02 release notes and maintainers info
  doc: add eventdev opdl PMD guide

 MAINTAINERS                                       |    6 +
 config/common_base                                |    5 +
 doc/guides/eventdevs/index.rst                    |    1 +
 doc/guides/eventdevs/opdl.rst                     |  162 +++
 doc/guides/rel_notes/release_18_02.rst            |   11 +
 drivers/event/Makefile                            |    1 +
 drivers/event/dpaa2/dpaa2_eventdev.c              |    6 +-
 drivers/event/octeontx/ssovf_evdev.c              |    6 +-
 drivers/event/opdl/Makefile                       |   39 +
 drivers/event/opdl/opdl_evdev.c                   |  769 +++++++++++++
 drivers/event/opdl/opdl_evdev.h                   |  342 ++++++
 drivers/event/opdl/opdl_evdev_init.c              |  936 ++++++++++++++++
 drivers/event/opdl/opdl_evdev_xstats.c            |  178 +++
 drivers/event/opdl/opdl_log.h                     |   22 +
 drivers/event/opdl/opdl_ring.c                    | 1230 +++++++++++++++++++++
 drivers/event/opdl/opdl_ring.h                    |  601 ++++++++++
 drivers/event/opdl/opdl_test.c                    | 1056 ++++++++++++++++++
 drivers/event/opdl/rte_pmd_evdev_opdl_version.map |    3 +
 drivers/event/sw/sw_evdev.c                       |    5 +-
 lib/librte_eventdev/rte_eventdev.h                |   22 +
 mk/rte.app.mk                                     |    1 +
 mk/toolchain/gcc/rte.toolchain-compat.mk          |    6 +
 mk/toolchain/icc/rte.toolchain-compat.mk          |    6 +
 23 files changed, 5411 insertions(+), 3 deletions(-)
 create mode 100644 doc/guides/eventdevs/opdl.rst
 create mode 100644 drivers/event/opdl/Makefile
 create mode 100644 drivers/event/opdl/opdl_evdev.c
 create mode 100644 drivers/event/opdl/opdl_evdev.h
 create mode 100644 drivers/event/opdl/opdl_evdev_init.c
 create mode 100644 drivers/event/opdl/opdl_evdev_xstats.c
 create mode 100644 drivers/event/opdl/opdl_log.h
 create mode 100644 drivers/event/opdl/opdl_ring.c
 create mode 100644 drivers/event/opdl/opdl_ring.h
 create mode 100644 drivers/event/opdl/opdl_test.c
 create mode 100644 drivers/event/opdl/rte_pmd_evdev_opdl_version.map

-- 
2.7.5

  parent reply	other threads:[~2018-01-09 12:20 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-22 11:23 [dpdk-dev] [RFC v4 PATCH 0/8] " Liang Ma
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 1/8] event/opdl: add the opdl ring infrastructure library Liang Ma
2017-12-22 16:02   ` Sean Harte
2018-01-08  6:46     ` Jerin Jacob
2018-01-08 11:19       ` Liang, Ma
2018-01-08 11:23         ` Jerin Jacob
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 2/8] event/opdl: add the opdl pmd main body and helper function Liang Ma
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 3/8] eventdev/opdl: opdl eventdev pmd unit test function Liang Ma
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 4/8] lib/librte_eventdev: extend the eventdev capability flags Liang Ma
2018-01-08  6:32   ` Jerin Jacob
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 5/8] event/*: apply the three new capability flags for sw/dppa2/octeontx Liang Ma
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 6/8] maintainers: add the opdl pmd maintainer information Liang Ma
2017-12-23 15:05   ` Thomas Monjalon
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 7/8] doc:update 18.02 release notes Liang Ma
2017-12-22 11:23 ` [dpdk-dev] [PATCH v4 8/8] doc: add eventdev opdl pmd docuement Liang Ma
2017-12-23 15:06 ` [dpdk-dev] [RFC v4 PATCH 0/8] event: eventdev OPDL PMD Thomas Monjalon
2018-01-09 12:20 ` Liang Ma [this message]
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 01/12] event/opdl: add the opdl ring infrastructure library Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 02/12] event/opdl: add opdl PMD main body and helper function Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 03/12] event/opdl: add event queue config get/set support Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 04/12] event/opdl: add event port " Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 05/12] event/opdl: add eventdev enqueue/dequeue support Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 06/12] event/opdl: opdl eventdev PMD unit test function Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 07/12] lib/librte_eventdev: extend the eventdev capability flags Liang Ma
2018-01-09 12:27     ` Jerin Jacob
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 08/12] event/dpaa2: apply the three new " Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 09/12] event/octeontx: " Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 10/12] event/sw: " Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 11/12] doc: update 18.02 release notes and maintainers info Liang Ma
2018-01-09 12:20   ` [dpdk-dev] [PATCH v5 12/12] doc: add eventdev opdl PMD guide Liang Ma
2018-01-09 14:18   ` [dpdk-dev] [RFC v6 PATCH 00/12] event: eventdev OPDL PMD Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 01/12] event/opdl: add the opdl ring infrastructure library Liang Ma
2018-01-10 10:00       ` Sean Harte
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 02/12] event/opdl: add opdl PMD main body and helper function Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 03/12] event/opdl: add event queue config get/set support Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 04/12] event/opdl: add event port " Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 05/12] event/opdl: add eventdev enqueue/dequeue support Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 06/12] event/opdl: opdl eventdev PMD unit test function Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 07/12] event/opdl: extend the eventdev capability flags Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 08/12] event/dpaa2: apply the three new " Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 09/12] event/octeontx: " Liang Ma
2018-01-09 14:18     ` [dpdk-dev] [PATCH v6 10/12] event/sw: " Liang Ma
2018-01-09 14:19     ` [dpdk-dev] [PATCH v6 11/12] doc: update 18.02 release notes and maintainers info Liang Ma
2018-01-10 10:38       ` Kovacevic, Marko
2018-01-09 14:19     ` [dpdk-dev] [PATCH v6 12/12] doc: add eventdev opdl PMD guide Liang Ma
2018-01-09 17:13     ` [dpdk-dev] [RFC v6 PATCH 00/12] event: eventdev OPDL PMD Van Haaren, Harry
2018-01-10 14:45     ` [dpdk-dev] [RFC v7 " Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 01/12] event/opdl: add the opdl ring infrastructure library Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 02/12] event/opdl: add opdl PMD main body and helper function Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 03/12] event/opdl: add event queue config get/set support Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 04/12] event/opdl: add event port " Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 05/12] event/opdl: add eventdev enqueue/dequeue support Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 06/12] event/opdl: opdl eventdev PMD unit test function Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 07/12] event/opdl: extend the eventdev capability flags Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 08/12] event/dpaa2: apply the three new " Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 09/12] event/octeontx: " Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 10/12] event/sw: " Liang Ma
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 11/12] doc: update 18.02 release notes and maintainers info Liang Ma
2018-01-10 15:01         ` Kovacevic, Marko
2018-01-10 14:46       ` [dpdk-dev] [PATCH v7 12/12] doc: add eventdev opdl PMD guide Liang Ma
2018-01-10 15:01         ` Jerin Jacob
2018-01-10 15:08           ` Liang, Ma
2018-01-10 18:17             ` Jerin Jacob
2018-01-10 15:04         ` Kovacevic, Marko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1515500423-107720-1-git-send-email-liang.j.ma@intel.com \
    --to=liang.j.ma@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=deepak.k.jain@intel.com \
    --cc=dev@dpdk.org \
    --cc=harry.van.haaren@intel.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=john.geary@intel.com \
    --cc=peter.mccarthy@intel.com \
    --cc=seanbh@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).