From: 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
Subject: [dpdk-dev] [RFC PATCH 0/7] RFC:EventDev OPDL PMD
Date: Fri, 24 Nov 2017 11:23:45 +0000 [thread overview]
Message-ID: <1511522632-139652-1-git-send-email-liang.j.ma@intel.com> (raw)
From: Liang Ma <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.
- For performance, the rte_event flow_id should not be updated once
packet is enqueued on RX.
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]
Liang Ma (7):
event/opdl: add the opdl ring infrastructure library
event/opdl: add the opdl pmd header and init helper function
event/opdl: add the opdl pmd main body and xstats helper function
event/opdl: update the build system to enable compilation of pmd
test/eventdev: opdl eventdev pmd unit test func and makefiles
examples/eventdev_pipeline_opdl: adding example
doc: add eventdev opdl pmd docuement and example usage document
config/common_base | 6 +
doc/guides/eventdevs/index.rst | 1 +
doc/guides/eventdevs/opdl.rst | 162 +++
.../sample_app_ug/eventdev_pipeline_opdl_pmd.rst | 128 +++
doc/guides/sample_app_ug/index.rst | 1 +
drivers/event/Makefile | 1 +
drivers/event/opdl/Makefile | 65 ++
drivers/event/opdl/opdl_evdev.c | 714 ++++++++++++
drivers/event/opdl/opdl_evdev.h | 353 ++++++
drivers/event/opdl/opdl_evdev_init.c | 945 ++++++++++++++++
drivers/event/opdl/opdl_evdev_xstats.c | 205 ++++
drivers/event/opdl/opdl_ring.c | 1170 ++++++++++++++++++++
drivers/event/opdl/opdl_ring.h | 578 ++++++++++
drivers/event/opdl/rte_pmd_evdev_opdl_version.map | 3 +
examples/eventdev_pipeline_opdl_pmd/Makefile | 49 +
examples/eventdev_pipeline_opdl_pmd/main.c | 766 +++++++++++++
mk/rte.app.mk | 1 +
test/test/Makefile | 1 +
test/test/test_eventdev_opdl.c | 1089 ++++++++++++++++++
19 files changed, 6238 insertions(+)
create mode 100644 doc/guides/eventdevs/opdl.rst
create mode 100644 doc/guides/sample_app_ug/eventdev_pipeline_opdl_pmd.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_ring.c
create mode 100644 drivers/event/opdl/opdl_ring.h
create mode 100644 drivers/event/opdl/rte_pmd_evdev_opdl_version.map
create mode 100644 examples/eventdev_pipeline_opdl_pmd/Makefile
create mode 100644 examples/eventdev_pipeline_opdl_pmd/main.c
create mode 100644 test/test/test_eventdev_opdl.c
--
2.7.5
--------------------------------------------------------------
Intel Research and Development Ireland Limited
Registered in Ireland
Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
Registered Number: 308263
This e-mail and any attachments may contain confidential material for the sole
use of the intended recipient(s). Any review or distribution by others is
strictly prohibited. If you are not the intended recipient, please contact the
sender and delete all copies.
next reply other threads:[~2017-11-24 11:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-24 11:23 liang.j.ma [this message]
2017-11-24 11:23 ` [dpdk-dev] [PATCH 1/7] event/opdl: add the opdl ring infrastructure library liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 2/7] event/opdl: add the opdl pmd header and init helper function liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 3/7] event/opdl: add the opdl pmd main body and xstats " liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 4/7] event/opdl: update the build system to enable compilation of pmd liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 5/7] test/eventdev: opdl eventdev pmd unit test func and makefiles liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 6/7] examples/eventdev_pipeline_opdl: adding example liang.j.ma
2017-11-24 11:23 ` [dpdk-dev] [PATCH 7/7] doc: add eventdev opdl pmd docuement and example usage document liang.j.ma
2017-11-24 20:55 ` [dpdk-dev] [RFC PATCH 0/7] RFC:EventDev OPDL PMD Jerin Jacob
2017-11-29 12:19 ` Ma, Liang
2017-11-29 12:56 ` Jerin Jacob
2017-11-29 17:15 ` Ma, Liang
2017-11-30 17:41 ` Jerin Jacob
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=1511522632-139652-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 \
/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).