From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerin Jacob Subject: Re: [PATCH v1 01/14] ring: remove split cacheline build setting Date: Tue, 28 Feb 2017 17:05:13 +0530 Message-ID: <20170228113511.GA28584@localhost.localdomain> References: <20170223172407.27664-1-bruce.richardson@intel.com> <20170223172407.27664-2-bruce.richardson@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: olivier.matz@6wind.com, dev@dpdk.org To: Bruce Richardson Return-path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0077.outbound.protection.outlook.com [104.47.37.77]) by dpdk.org (Postfix) with ESMTP id 22ECF2A5E for ; Tue, 28 Feb 2017 12:35:42 +0100 (CET) Content-Disposition: inline In-Reply-To: <20170223172407.27664-2-bruce.richardson@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, Feb 23, 2017 at 05:23:54PM +0000, Bruce Richardson wrote: > Users compiling DPDK should not need to know or care about the arrangement > of cachelines in the rte_ring structure. Therefore just remove the build > option and set the structures to be always split. For improved > performance use 128B rather than 64B alignment since it stops the producer > and consumer data being on adjacent cachelines. > > Signed-off-by: Bruce Richardson > --- > config/common_base | 1 - > doc/guides/rel_notes/release_17_05.rst | 6 ++++++ > lib/librte_ring/rte_ring.c | 2 -- > lib/librte_ring/rte_ring.h | 8 ++------ > 4 files changed, 8 insertions(+), 9 deletions(-) > > diff --git a/config/common_base b/config/common_base > index aeee13e..099ffda 100644 > --- a/config/common_base > +++ b/config/common_base > @@ -448,7 +448,6 @@ CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=y > # > CONFIG_RTE_LIBRTE_RING=y > CONFIG_RTE_LIBRTE_RING_DEBUG=n > -CONFIG_RTE_RING_SPLIT_PROD_CONS=n > CONFIG_RTE_RING_PAUSE_REP_COUNT=0 > > # > diff --git a/doc/guides/rel_notes/release_17_05.rst b/doc/guides/rel_notes/release_17_05.rst > index e25ea9f..ea45e0c 100644 > --- a/doc/guides/rel_notes/release_17_05.rst > +++ b/doc/guides/rel_notes/release_17_05.rst > @@ -110,6 +110,12 @@ API Changes > Also, make sure to start the actual text at the margin. > ========================================================= > > +* **Reworked rte_ring library** > + > + The rte_ring library has been reworked and updated. The following changes > + have been made to it: > + > + * removed the build-time setting ``CONFIG_RTE_RING_SPLIT_PROD_CONS`` > > ABI Changes > ----------- > diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c > index ca0a108..4bc6da1 100644 > --- a/lib/librte_ring/rte_ring.c > +++ b/lib/librte_ring/rte_ring.c > @@ -127,10 +127,8 @@ rte_ring_init(struct rte_ring *r, const char *name, unsigned count, > /* compilation-time checks */ > RTE_BUILD_BUG_ON((sizeof(struct rte_ring) & > RTE_CACHE_LINE_MASK) != 0); > -#ifdef RTE_RING_SPLIT_PROD_CONS > RTE_BUILD_BUG_ON((offsetof(struct rte_ring, cons) & > RTE_CACHE_LINE_MASK) != 0); > -#endif > RTE_BUILD_BUG_ON((offsetof(struct rte_ring, prod) & > RTE_CACHE_LINE_MASK) != 0); > #ifdef RTE_LIBRTE_RING_DEBUG > diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h > index 72ccca5..04fe667 100644 > --- a/lib/librte_ring/rte_ring.h > +++ b/lib/librte_ring/rte_ring.h > @@ -168,7 +168,7 @@ struct rte_ring { > uint32_t mask; /**< Mask (size-1) of ring. */ > volatile uint32_t head; /**< Producer head. */ > volatile uint32_t tail; /**< Producer tail. */ > - } prod __rte_cache_aligned; > + } prod __rte_aligned(RTE_CACHE_LINE_SIZE * 2); I think we need to use RTE_CACHE_LINE_MIN_SIZE instead of RTE_CACHE_LINE_SIZE for alignment here. PPC and ThunderX1 targets are cache line size of 128B > + } prod __rte_aligned(RTE_CACHE_LINE_SIZE * 2); > > /** Ring consumer status. */ > struct cons { > @@ -177,11 +177,7 @@ struct rte_ring { > uint32_t mask; /**< Mask (size-1) of ring. */ > volatile uint32_t head; /**< Consumer head. */ > volatile uint32_t tail; /**< Consumer tail. */ > -#ifdef RTE_RING_SPLIT_PROD_CONS > - } cons __rte_cache_aligned; > -#else > - } cons; > -#endif > + } cons __rte_aligned(RTE_CACHE_LINE_SIZE * 2); > > #ifdef RTE_LIBRTE_RING_DEBUG > struct rte_ring_debug_stats stats[RTE_MAX_LCORE]; > -- > 2.9.3 >