From patchwork Sat Jan 18 19:32:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Honnappa Nagarahalli X-Patchwork-Id: 182885 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp797240ile; Sat, 18 Jan 2020 11:33:11 -0800 (PST) X-Google-Smtp-Source: APXvYqzMC+OdN+2RQhjJff6ZLUG/fXVNQO/lyu4ugJBEO9SjC47w8NwfqVXPu3hevQ2FCQ0rRhHP X-Received: by 2002:a17:906:c5b:: with SMTP id t27mr13406850ejf.45.1579375991651; Sat, 18 Jan 2020 11:33:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579375991; cv=none; d=google.com; s=arc-20160816; b=wLgtRGg1ysyNLD9nPLNwu0lKYbSwn8NMiRZIEgzuEGbXPtCR3NEgd/kptFAdpjJN1G ZFLj/EwvUdpG3L49QFcuKH8lEuM1G1bL5bA2VJLONTZQv2ZKfL5RKHh8cXp6acwhky9K zz2581YYbnMa8BUU321jmbR6U51WU4brL3w34p65qkaZNy/XJuRA7zDCdYj2bpyVQSrv Cl1HxpYjKxkENzguuMRHB9yfPnudwDlaY+Y+zRl9NS96IHSBocwbUkmZ65gduZC7UVEy aORe7q7ZC1mhKIHrfJX6fFhrWi5eKnphueWGqWuyDkvKohTVBDL0NFBRqFiSn1t8I/8F 7OaA== 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=2klqnZH/12ORieXG7LVEbFQok9Ui3FcgcI7WKkFBo+w=; b=LrYAmIxHQO9qttOmYSyadMfHUSdHOeXuxztvN3ujKIJAZg0FvkQ6ckbeLXWV7+WRVU 72OUfj60ah5nF7QecAGYXIRZ3mHatmn79Mw3rf45DmWPPmjZIzJjEXICnDKhxvc0+oV4 HFQoUeG9EeEXR7F94BRTCNM5JZym9/mzXCFHxyt/z6+rIQikgeDlMdjtyXhq67SjcVIg 6T3+c/4U9OiTWgz3yX2SLQ5qSsAqKM64wqMN3HlTQbW0E3Z/+ULGv5tP5aqGebhjABow pi704Op977JcftyzT45L/X+3lTdyVW+QULW6mQ6YFvKDPgilR78cx7Gc6uwP0Xb0Ete5 X+2A== 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 q5si20525808edh.446.2020.01.18.11.33.10; Sat, 18 Jan 2020 11:33:11 -0800 (PST) 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 6B98A1BE94; Sat, 18 Jan 2020 20:33:09 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id D0C9D1F5 for ; Sat, 18 Jan 2020 20:33:07 +0100 (CET) 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 4D3CC30E; Sat, 18 Jan 2020 11:33:07 -0800 (PST) Received: from qc2400f-1.austin.arm.com (qc2400f-1.austin.arm.com [10.118.14.48]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3D04B3F6C4; Sat, 18 Jan 2020 11:33:07 -0800 (PST) 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, yipeng1.wang@intel.com, drc@linux.vnet.ibm.com, honnappa.nagarahalli@arm.com Cc: dev@dpdk.org, dharmik.thakkar@arm.com, ruifeng.wang@arm.com, gavin.hu@arm.com, nd@arm.com Date: Sat, 18 Jan 2020 13:32:41 -0600 Message-Id: <20200118193247.43831-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 v10 0/6] 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. v10 - Improved comments in test case files (Olivier) - Fixed possible memory leaks (Olivier) - Changed 'test_ring_with_exact_size' to use unaligned addresses (Konstantin) - Changed the commit message for eventdev (Jerin) v9 - Split 'test_ring_burst_bulk_tests' test case into 4 smaller functions to address clang compilation time issue. - Addressed compilation failure in Intel CI in the hash changes. v8 - Changed the 128b copy elements inline function to use 'memcpy' to generate unaligned load/store instructions for x86. Generic copy function results in performance drop. (Konstantin) - Changed the API type #defines to be more clear (Konstantin) - Removed the code duplication in performance tests (Konstantin) - Fixed memory leak, changed test macros to inline functions (Konstantin) - Changed functional tests to test for 20B ring element. Fixed a bug in 32b element copy code for enqueue/dequeue(ring size needs to be normalized for 32b). - Squashed the functional and performance tests in their respective single commits. v7 - Merged the test cases to test both legacy APIs and rte_ring_xxx_elem APIs without code duplication (Konstantin, Olivier) - Performance test cases are merged as well (Konstantin, Olivier) - Macros to copy elements are converted into inline functions (Olivier) - Added back the changes to hash and event libraries v6 - Labelled as RFC to indicate the better status - Added unit tests to test the rte_ring_xxx_elem APIs - Corrected 'macro based partial memcpy' (5/6) patch - Added Konstantin's method after correction (6/6) - Check Patch shows significant warnings and errors mainly due copying code from existing test cases. None of them are harmful. I will fix them once we have an agreement. 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 (6): test/ring: use division for cycle count calculation lib/ring: apis to support configurable element size test/ring: add functional tests for rte_ring_xxx_elem APIs test/ring: modify perf test cases to use rte_ring_xxx_elem APIs lib/hash: use ring with 32b element size to save memory eventdev: use custom element size ring for event rings app/test/test_ring.c | 1383 +++++++++++++------------- app/test/test_ring.h | 187 ++++ app/test/test_ring_perf.c | 476 +++++---- lib/librte_eventdev/rte_event_ring.c | 147 +-- lib/librte_eventdev/rte_event_ring.h | 45 +- lib/librte_hash/rte_cuckoo_hash.c | 94 +- lib/librte_hash/rte_cuckoo_hash.h | 2 +- lib/librte_ring/Makefile | 3 +- lib/librte_ring/meson.build | 4 + lib/librte_ring/rte_ring.c | 41 +- lib/librte_ring/rte_ring.h | 1 + lib/librte_ring/rte_ring_elem.h | 1003 +++++++++++++++++++ lib/librte_ring/rte_ring_version.map | 2 + 13 files changed, 2279 insertions(+), 1109 deletions(-) create mode 100644 app/test/test_ring.h create mode 100644 lib/librte_ring/rte_ring_elem.h -- 2.17.1