From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 60107A00C2; Fri, 24 Apr 2020 09:08:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9DA051C1DA; Fri, 24 Apr 2020 09:07:59 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id D9B491C1D5 for ; Fri, 24 Apr 2020 09:07:57 +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 2E81031B; Fri, 24 Apr 2020 00:07:57 -0700 (PDT) Received: from net-arm-thunderx2-01.shanghai.arm.com (net-arm-thunderx2-01.shanghai.arm.com [10.169.41.214]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B638B3F68F; Fri, 24 Apr 2020 00:07:54 -0700 (PDT) From: Gavin Hu To: dev@dpdk.org Cc: nd@arm.com, david.marchand@redhat.com, thomas@monjalon.net, jerinj@marvell.com, Honnappa.Nagarahalli@arm.com, Ruifeng.Wang@arm.com, Phil.Yang@arm.com, Joyce.Kong@arm.com Date: Fri, 24 Apr 2020 15:07:40 +0800 Message-Id: <20200424070741.16619-2-gavin.hu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200424070741.16619-1-gavin.hu@arm.com> References: <20200424070741.16619-1-gavin.hu@arm.com> Subject: [dpdk-dev] [PATCH v1 1/2] spinlock: use wfe to reduce contention on aarch64 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" In acquiring a spinlock, cores repeatedly poll the lock variable. This is replaced by rte_wait_until_equal API. Running the micro benchmarking and the testpmd and l3fwd traffic tests on ThunderX2, Ampere eMAG80 and Arm N1SDP, everything went well and no notable performance gain nor degradation was measured. Signed-off-by: Gavin Hu Reviewed-by: Ruifeng Wang Reviewed-by: Phil Yang Reviewed-by: Steve Capper Reviewed-by: Ola Liljedahl Reviewed-by: Honnappa Nagarahalli Tested-by: Pavan Nikhilesh --- lib/librte_eal/include/generic/rte_spinlock.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/include/generic/rte_spinlock.h b/lib/librte_eal/include/generic/rte_spinlock.h index 87ae7a4f1..5cc123247 100644 --- a/lib/librte_eal/include/generic/rte_spinlock.h +++ b/lib/librte_eal/include/generic/rte_spinlock.h @@ -28,7 +28,7 @@ * The rte_spinlock_t type. */ typedef struct { - volatile int locked; /**< lock status 0 = unlocked, 1 = locked */ + volatile uint32_t locked; /**< lock status 0 = unlocked, 1 = locked */ } rte_spinlock_t; /** @@ -65,8 +65,7 @@ rte_spinlock_lock(rte_spinlock_t *sl) while (!__atomic_compare_exchange_n(&sl->locked, &exp, 1, 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) { - while (__atomic_load_n(&sl->locked, __ATOMIC_RELAXED)) - rte_pause(); + rte_wait_until_equal_32(&sl->locked, 0, __ATOMIC_RELAXED); exp = 0; } } -- 2.17.1