From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id ED87F1B01E for ; Tue, 9 Jan 2018 13:20:22 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Jan 2018 04:20:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,335,1511856000"; d="scan'208";a="20149104" Received: from silpixa00398162.ir.intel.com (HELO silpixa00398162.ger.corp.intel.com) ([10.237.223.171]) by fmsmga001.fm.intel.com with ESMTP; 09 Jan 2018 04:20:18 -0800 From: Liang Ma 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 Date: Tue, 9 Jan 2018 12:20:11 +0000 Message-Id: <1515500423-107720-1-git-send-email-liang.j.ma@intel.com> X-Mailer: git-send-email 2.7.5 In-Reply-To: <1513941830-186503-1-git-send-email-liang.j.ma@intel.com> References: <1513941830-186503-1-git-send-email-liang.j.ma@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [RFC v5 PATCH 00/12] event: eventdev OPDL PMD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jan 2018 12:20:23 -0000 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