DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>,
	"jerin.jacob@caviumnetworks.com" <jerin.jacob@caviumnetworks.com>,
	"santosh.shukla@caviumnetworks.com"
	<santosh.shukla@caviumnetworks.com>,
	"Eads, Gage" <gage.eads@intel.com>,
	"hemant.agrawal@nxp.com" <hemant.agrawal@nxp.com>,
	"nipun.gupta@nxp.com" <nipun.gupta@nxp.com>,
	"Ma, Liang J" <liang.j.ma@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions
Date: Thu, 11 Jan 2018 15:47:24 +0000	[thread overview]
Message-ID: <E923DB57A917B54B9182A2E928D00FA650FEDAE9@IRSMSX102.ger.corp.intel.com> (raw)
In-Reply-To: <20180111135201.ufj3hqh6frncvjpx@Pavan-LT>

> From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com]
> Sent: Thursday, January 11, 2018 1:52 PM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>;
> jerin.jacob@caviumnetworks.com; santosh.shukla@caviumnetworks.com; Eads,
> Gage <gage.eads@intel.com>; hemant.agrawal@nxp.com; nipun.gupta@nxp.com; Ma,
> Liang J <liang.j.ma@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue
> worker functions
> 
> On Thu, Jan 11, 2018 at 12:17:38PM +0000, Van Haaren, Harry wrote:
>  > >
>  <snip>
> > > > Thinking a little more about this, also in light of patch 11/12 of
> this
> > > series.
> > > >
> > > > The code here has a "safe" and "unsafe" version of TX. This involves
> > > adding a spinlock inside the code, which is being locked/unlocked before
> > > doing the actual TX action.
> > > >
> > > > I don't understand why this is necessary? DPDK's general stance on
> locking
> > > for data-path is DPDK functions do not provide locks, and that
> application
> > > level must implement thread-synchronization if it is required.
> > > >
> > > > In this case, the app/eventdev can be considered an App, but I don't
> like
> > > the idea of providing a sample application and code that duplicates core
> > > functionality with safe/unsafe versions..
> > > >
> > >
> > > Some PMD's (net/octeontx) have capability to do multi-thread safe Tx
> where
> > > no
> > > thread-synchronization is required. This is exposed via the offload flag
> > > 'DEV_TX_OFFLOAD_MT_LOCKFREE'.
> >
> > Yes understood.
> >
> >
> > > So, the _safe Tx functions are selected based on the above offload
> > > capability
> > > and when the capability is absent _unsafe Tx functions are selected i.e.
> > > synchronized Tx via spin locks based on the Egress port id.
> >
> >
> > This part changes the current behavior of the sample app.
> >
> > Currently there is a (SINGLE_LINK | ATOMIC) stage at the end of the
> pipeline, which performs this "many-to-one" action, allowing a single core
> to dequeue all TX traffic, and perform the TX operation in a lock-free
> manner.
> >
> > Changing this to a locking mechanism is going to hurt performance on
> platforms that do not support TX_OFFLOAD_MT_LOCKFREE.
> >
> > In my opinion, the correct fix is to alter the overall pipeline, and
> always use lockless TX. Examples below;
> >
> > NO TX_OFFLOAD_MT_LOCKFREE:
> >
> >    Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> stage TX
> (Atomic | SINGLE_LINK) -> eth TX
> 
> Agreed, when we detect that tx is not lockfree the workers would just
> forward
> the events to  (Atomic | SINGLE_LINK) event queue which would be dequeued by
> a
> service(mt_unsafe) and Tx them lockfree.
> 
> >
> >
> > WITH TX_OFFLOAD_MT_LOCKFREE:
> >
> >    Eth RX adapter -> stage 1 -> stage 2...(N-1) -> stage N -> eth TX MT
> Capable
> 
> The current lockfree pipeline would remain the same.
> >
> >
> > By configuring the pipeline based on MT_OFFLOAD_LOCKFREE capability flag,
> and adding the SINGLE_LINK at the end if required, we can support both
> models without resorting to locked TX functions.
> >
> > I think this will lead to a cleaner and more performant solution.
> >
> 
> Thoughts?

A quick summary of the issue here, and then an overview of my understanding of the proposed solution.


=== Issue ===
Ethdev hardware has a flag TX_OFFLOAD_MT_LOCKFREE, which when set means that multiple CPU threads can safely TX on a single ethdev-queue concurrently (aka; without locking). Not all hardware supports this, so applications must be able to gracefully handle hardware where this capability is not provided.


=== Solution ===
In eventdev pipelines with MT_LOCKFREE capability, the CPU running the last "worker" stage can also perform the ethdev-TX operation.

In eventdev pipelines without MT_LOCKFREE caps, we use a (Single Link | Atomic) stage to "fan in" the traffic to a single point, and use a TX service in order to abstract away the difference in CPU core requirements.



The above solution avoids placing locks in the datapath by modifying the pipeline design, and the difference in CPU requirements is abstracted by only registering the TX service if required.

Note that the TX service doesn't need the infrastructure like the RX adapter, as it is much simpler (dequeue from eventdev port, tx on ethdev port).


@Pavan, I believe this is the same solution as you - just making sure we're aligned!


Cheers, -Harry

  reply	other threads:[~2018-01-11 15:47 UTC|newest]

Thread overview: 122+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-30  7:24 [dpdk-dev] [PATCH 1/4] app/eventdev: modify ethdev setup to support Tx Pavan Nikhilesh
2017-11-30  7:24 ` [dpdk-dev] [PATCH 2/4] app/eventdev: add packet distribution logs Pavan Nikhilesh
2017-12-10 12:31   ` Jerin Jacob
2017-11-30  7:24 ` [dpdk-dev] [PATCH 3/4] app/eventdev: add perf pipeline test Pavan Nikhilesh
2017-11-30 17:15   ` Eads, Gage
2017-12-01  5:19     ` Pavan Nikhilesh Bhagavatula
2017-12-10 12:33   ` Jerin Jacob
2017-12-11 15:20     ` Pavan Nikhilesh Bhagavatula
2017-12-11 15:45       ` Jerin Jacob
2017-11-30  7:24 ` [dpdk-dev] [PATCH 4/4] doc: add perf pipeline test in eventdev test guide Pavan Nikhilesh
2017-12-18 21:43 ` [dpdk-dev] [PATCH v2 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh
2017-12-18 21:43   ` [dpdk-dev] [PATCH v2 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-08 14:04     ` Jerin Jacob
2017-12-18 21:43   ` [dpdk-dev] [PATCH v2 03/12] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-08 14:06     ` Jerin Jacob
2017-12-18 21:43   ` [dpdk-dev] [PATCH v2 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2017-12-18 21:43   ` [dpdk-dev] [PATCH v2 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh
2018-01-08 14:10     ` Jerin Jacob
2017-12-18 21:43   ` [dpdk-dev] [PATCH v2 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-08 14:15     ` Jerin Jacob
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2017-12-18 21:44   ` [dpdk-dev] [PATCH v2 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-10 14:51 ` [dpdk-dev] [PATCH v3 01/12] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 02/12] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 03/12] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 04/12] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 05/12] app/eventdev: add perf ethport setup and destroy Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 06/12] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 07/12] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 08/12] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-10 16:38     ` Van Haaren, Harry
2018-01-10 20:01       ` Pavan Nikhilesh
2018-01-15 10:17         ` Van Haaren, Harry
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 09/12] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-10 16:45     ` Van Haaren, Harry
2018-01-10 16:53       ` Van Haaren, Harry
2018-01-10 20:17         ` Pavan Nikhilesh
2018-01-11 12:17           ` Van Haaren, Harry
2018-01-11 13:52             ` Pavan Nikhilesh
2018-01-11 15:47               ` Van Haaren, Harry [this message]
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 10/12] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 11/12] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-10 14:51   ` [dpdk-dev] [PATCH v3 12/12] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-12 16:44 ` [dpdk-dev] [PATCH v4 01/13] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 02/13] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 03/13] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 04/13] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-17 17:19       ` Jerin Jacob
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 05/13] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 06/13] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 11:54     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 07/13] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 11:57     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 08/13] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 11:57     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 09/13] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 11:58     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 10/13] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 12:05     ` Van Haaren, Harry
2018-01-16 12:31       ` Pavan Nikhilesh
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 11/13] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 12:06     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 12/13] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 12:06     ` Van Haaren, Harry
2018-01-12 16:44   ` [dpdk-dev] [PATCH v4 13/13] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-15 11:16     ` Kovacevic, Marko
2018-01-15 16:16     ` Jerin Jacob
2018-01-16 15:17 ` [dpdk-dev] [PATCH v5 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 03/14] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 15:17   ` [dpdk-dev] [PATCH v5 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-16 15:20 ` [dpdk-dev] [PATCH v5 14/14] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-16 15:39 ` [dpdk-dev] [PATCH v6 01/14] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 02/14] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 03/14] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 04/14] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 05/14] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 06/14] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 07/14] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 08/14] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 09/14] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 15:39   ` [dpdk-dev] [PATCH v6 10/14] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 15:40   ` [dpdk-dev] [PATCH v6 11/14] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 15:40   ` [dpdk-dev] [PATCH v6 12/14] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 15:40   ` [dpdk-dev] [PATCH v6 13/14] doc: add pipeline test in eventdev test guide Pavan Nikhilesh
2018-01-16 15:40   ` [dpdk-dev] [PATCH v6 14/14] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-16 16:04     ` Mcnamara, John
2018-01-16 17:51       ` Pavan Nikhilesh
2018-01-16 17:45 ` [dpdk-dev] [PATCH v7 01/15] app/eventdev: add packet distribution logs Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 02/15] app/eventdev: add pipeline test setup and destroy Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 03/15] app/eventdev: add mempool " Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 04/15] app/eventdev: add pipeline opt dump and check functions Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 05/15] app/eventdev: add pipeline ethport setup and destroy Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 06/15] app/eventdev: add event port setup and Rx adapter setup Pavan Nikhilesh
2018-01-16 17:45   ` [dpdk-dev] [PATCH v7 07/15] app/eventdev: add Tx service setup Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 08/15] app/eventdev: launch pipeline lcores Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 09/15] app/eventdev: add pipeline queue test Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 10/15] app/eventdev: add pipeline queue worker functions Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 11/15] app/eventdev: add pipeline atq test Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 12/15] app/eventdev: add pipeline atq worker functions Pavan Nikhilesh
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 13/15] doc: add pipeline queue test in eventdev test guide Pavan Nikhilesh
     [not found]     ` <CY4PR07MB3464D865D1B9CA42596A242380E90@CY4PR07MB3464.namprd07.prod.outlook.com>
2018-01-17 17:12       ` Mcnamara, John
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 14/15] doc: add pipeline atq " Pavan Nikhilesh
     [not found]     ` <CY4PR07MB346409AFA54FC1836195EA0A80E90@CY4PR07MB3464.namprd07.prod.outlook.com>
2018-01-17 17:12       ` Mcnamara, John
2018-01-16 17:46   ` [dpdk-dev] [PATCH v7 15/15] doc: update 18.02 release notes Pavan Nikhilesh
2018-01-17  5:47     ` [dpdk-dev] Fw: " Bhagavatula, Pavan
2018-01-17 17:14       ` [dpdk-dev] " Mcnamara, John

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=E923DB57A917B54B9182A2E928D00FA650FEDAE9@IRSMSX102.ger.corp.intel.com \
    --to=harry.van.haaren@intel.com \
    --cc=dev@dpdk.org \
    --cc=gage.eads@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=liang.j.ma@intel.com \
    --cc=nipun.gupta@nxp.com \
    --cc=pbhagavatula@caviumnetworks.com \
    --cc=santosh.shukla@caviumnetworks.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).