From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bruce Richardson Subject: [PATCH v1 01/14] ring: remove split cacheline build setting Date: Thu, 23 Feb 2017 17:23:54 +0000 Message-ID: <20170223172407.27664-2-bruce.richardson@intel.com> References: <20170223172407.27664-1-bruce.richardson@intel.com> Cc: dev@dpdk.org, Bruce Richardson To: olivier.matz@6wind.com Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id EDAA7316B for ; Thu, 23 Feb 2017 18:24:41 +0100 (CET) In-Reply-To: <20170223172407.27664-1-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" 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); /** 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