From patchwork Thu Oct 17 20:08:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Honnappa Nagarahalli X-Patchwork-Id: 176740 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp1426349ill; Thu, 17 Oct 2019 13:08:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqw4MfuOxUkb2HNH3r6CY3q5Hv16FTRTSJUKX89b8wkSs+Y2mF2dZmQFTftH3j86wGWhM1nW X-Received: by 2002:a05:6402:32a:: with SMTP id q10mr5914693edw.149.1571342921787; Thu, 17 Oct 2019 13:08:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571342921; cv=none; d=google.com; s=arc-20160816; b=cL0hHJ7l8bADIr9yiOTEKyvad61mjXeQuiXeyOIOmHqPgP8PeOyvKnfUTDj0fEBEM8 lm8Ry9zTEg94aLX3UIAYF2QY6v+vXu8YR9o5pDJEnCGYct4H2GC2VRw9jNzD6ar4Kk2r VbHrumpv0o0FvPvRRRFxeTQL/iCQUzBcdgC8VFTHLRkCmqMZQotu8xgLz0J6hdKILagv NN1DqZX0PQYqtmIiKxltw1/FDPw2PasbTF9cSHtFluFubtZbPGcj7WsEWkzCjWo1mUrT tay+Y5JdZ4hkqVrQZdBznRQjruKWskVCErisUz3Rr58ZRhScx2kD1/gz2E8nIWxWeHXa qSEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=ZugSVa+UM9GL19LPnKdJ4NZZX7PXUFyHgLzm9gRl2XI=; b=S4Ie+qq8/u7dav3AisJRXdCYX4Pf4PEF8vabsRXM1VmBsIONDtrOp/TUnqifL0dioN Sr5/lPoIP+c0GMZHRmc5Qdq45l5mieg/CTGWMkWni2yheUAOHHcbJcHSdCYUGhiFI6Oq q9gdVfE/vMWaZz7kj4FyCMRk2eO6Qe0vU+DVPZ5Rs16NHS3kYLOqCfu6HxqpVQsjstW0 9Y6MBZ/j+Ww8bsmraegsNRzKSDbBvcO/cSQ3HpiQsXtQnvMDKYDgUQnnYTot69ANt7pI 1kKreRbdiu46Ee/kGyyN0iJQbuFZDzwZIt6PKvDCfjY+k4qyjue6pAkntakuhZdnCUdQ HMzg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id a94si2510822edf.110.2019.10.17.13.08.41; Thu, 17 Oct 2019 13:08:41 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2EA871E880; Thu, 17 Oct 2019 22:08:39 +0200 (CEST) Received: from foss.arm.com (unknown [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 2A9F11D50B for ; Thu, 17 Oct 2019 22:08:38 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 91859328; Thu, 17 Oct 2019 13:08:28 -0700 (PDT) Received: from qc2400f-1.austin.arm.com (qc2400f-1.austin.arm.com [10.118.12.34]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 78F6E3F68E; Thu, 17 Oct 2019 13:08:28 -0700 (PDT) From: Honnappa Nagarahalli To: olivier.matz@6wind.com, sthemmin@microsoft.com, jerinj@marvell.com, bruce.richardson@intel.com, david.marchand@redhat.com, pbhagavatula@marvell.com, konstantin.ananyev@intel.com, drc@linux.vnet.ibm.com, hemant.agrawal@nxp.com, honnappa.nagarahalli@arm.com Cc: dev@dpdk.org, dharmik.thakkar@arm.com, ruifeng.wang@arm.com, gavin.hu@arm.com Date: Thu, 17 Oct 2019 15:08:04 -0500 Message-Id: <20191017200807.20772-1-honnappa.nagarahalli@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190906190510.11146-1-honnappa.nagarahalli@arm.com> References: <20190906190510.11146-1-honnappa.nagarahalli@arm.com> Subject: [dpdk-dev] [PATCH v5 0/3] lib/ring: APIs to support custom element size 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The current rte_ring hard-codes the type of the ring element to 'void *', hence the size of the element is hard-coded to 32b/64b. Since the ring element type is not an input to rte_ring APIs, it results in couple of issues: 1) If an application requires to store an element which is not 64b, it needs to write its own ring APIs similar to rte_event_ring APIs. This creates additional burden on the programmers, who end up making work-arounds and often waste memory. 2) If there are multiple libraries that store elements of the same type, currently they would have to write their own rte_ring APIs. This results in code duplication. This patch adds new APIs to support configurable ring element size. The APIs support custom element sizes by allowing to define the ring element to be a multiple of 32b. The aim is to achieve same performance as the existing ring implementation. The patch adds same performance tests that are run for existing APIs. This allows for performance comparison. I also tested with memcpy. x86 shows significant improvements on bulk and burst tests. On the Arm platform, I used, there is a drop of 4% to 6% in few tests. May be this is something that we can explore later. Note that this version skips changes to other libraries as I would like to get an agreement on the implementation from the community. They will be added once there is agreement on the rte_ring changes. v5 - Use memcpy for chunks of 32B (Konstantin). - Both 'ring_perf_autotest' and 'ring_perf_elem_autotest' are available to compare the results easily. - Copying without memcpy is also available in 1/3, if anyone wants to experiment on their platform. - Added other platform owners to test on their respective platforms. v4 - Few fixes after more performance testing v3 - Removed macro-fest and used inline functions (Stephen, Bruce) v2 - Change Event Ring implementation to use ring templates (Jerin, Pavan) Honnappa Nagarahalli (3): lib/ring: apis to support configurable element size test/ring: add test cases for configurable element size ring lib/ring: copy ring elements using memcpy partially app/test/Makefile | 1 + app/test/meson.build | 1 + app/test/test_ring_perf_elem.c | 419 ++++++++++++++ lib/librte_ring/Makefile | 3 +- lib/librte_ring/meson.build | 3 + lib/librte_ring/rte_ring.c | 45 +- lib/librte_ring/rte_ring.h | 1 + lib/librte_ring/rte_ring_elem.h | 805 +++++++++++++++++++++++++++ lib/librte_ring/rte_ring_version.map | 2 + 9 files changed, 1271 insertions(+), 9 deletions(-) create mode 100644 app/test/test_ring_perf_elem.c create mode 100644 lib/librte_ring/rte_ring_elem.h -- 2.17.1