From patchwork Wed Aug 5 15:57:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75224 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 29F85A053D; Wed, 5 Aug 2020 17:57:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4BEC41BFFE; Wed, 5 Aug 2020 17:57:46 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 3BA2B1BFF5 for ; Wed, 5 Aug 2020 17:57:44 +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 4D1781424; Wed, 5 Aug 2020 08:57:43 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B76E03F7D7; Wed, 5 Aug 2020 08:57:41 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, dharmik.thakkar@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:57:18 +0100 Message-Id: <20200805155721.19808-2-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805155721.19808-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH 1/4] test/stack: avoid trivial memory allocations 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" Replace the arguments array by one argument. All objects in the args array have the same values, so there is no need to use an array, only one struct is enough. The args object is a lot smaller, and the allocation can be replaced with a stack variable. The allocation of obj_table isn't needed either, because MAX_BULK is small. The allocation can instead be replaced with a static array. Signed-off-by: Steven Lariau Reviewed-by: Dharmik Thakkar Reviewed-by: Phil Yang Reviewed-by: Ruifeng Wang --- app/test/test_stack.c | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index c8dac1f55..5a7273a7d 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -280,16 +280,9 @@ static int stack_thread_push_pop(void *args) { struct test_args *t = args; - void **obj_table; + void *obj_table[MAX_BULK]; int i; - obj_table = rte_calloc(NULL, STACK_SIZE, sizeof(void *), 0); - if (obj_table == NULL) { - printf("[%s():%u] failed to calloc %zu bytes\n", - __func__, __LINE__, STACK_SIZE * sizeof(void *)); - return -1; - } - for (i = 0; i < NUM_ITERS_PER_THREAD; i++) { unsigned int success, num; @@ -310,28 +303,25 @@ stack_thread_push_pop(void *args) if (rte_stack_push(t->s, obj_table, num) != num) { printf("[%s():%u] Failed to push %u pointers\n", __func__, __LINE__, num); - rte_free(obj_table); return -1; } if (rte_stack_pop(t->s, obj_table, num) != num) { printf("[%s():%u] Failed to pop %u pointers\n", __func__, __LINE__, num); - rte_free(obj_table); return -1; } rte_atomic64_sub(t->sz, num); } - rte_free(obj_table); return 0; } static int test_stack_multithreaded(uint32_t flags) { - struct test_args *args; + struct test_args args; unsigned int lcore_id; struct rte_stack *s; rte_atomic64_t size; @@ -344,45 +334,28 @@ test_stack_multithreaded(uint32_t flags) printf("[%s():%u] Running with %u lcores\n", __func__, __LINE__, rte_lcore_count()); - args = rte_malloc(NULL, sizeof(struct test_args) * RTE_MAX_LCORE, 0); - if (args == NULL) { - printf("[%s():%u] failed to malloc %zu bytes\n", - __func__, __LINE__, - sizeof(struct test_args) * RTE_MAX_LCORE); - return -1; - } - s = rte_stack_create("test", STACK_SIZE, rte_socket_id(), flags); if (s == NULL) { printf("[%s():%u] Failed to create a stack\n", __func__, __LINE__); - rte_free(args); return -1; } rte_atomic64_init(&size); + args.s = s; + args.sz = &size; RTE_LCORE_FOREACH_SLAVE(lcore_id) { - args[lcore_id].s = s; - args[lcore_id].sz = &size; - if (rte_eal_remote_launch(stack_thread_push_pop, - &args[lcore_id], lcore_id)) + &args, lcore_id)) rte_panic("Failed to launch lcore %d\n", lcore_id); } - lcore_id = rte_lcore_id(); - - args[lcore_id].s = s; - args[lcore_id].sz = &size; - - stack_thread_push_pop(&args[lcore_id]); + stack_thread_push_pop(&args); rte_eal_mp_wait_lcore(); rte_stack_free(s); - rte_free(args); - return 0; } From patchwork Wed Aug 5 15:57:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75225 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 736CEA053D; Wed, 5 Aug 2020 17:57:59 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7ACCF1C034; Wed, 5 Aug 2020 17:57:47 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 90EAB1BFFA for ; Wed, 5 Aug 2020 17:57:45 +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 064711476; Wed, 5 Aug 2020 08:57:45 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 031AC3F7D7; Wed, 5 Aug 2020 08:57:43 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, dharmik.thakkar@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:57:19 +0100 Message-Id: <20200805155721.19808-3-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805155721.19808-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH 2/4] test/stack: launch tests with mp remote launch API 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" All the cores use the same argument object, so there is no need to use a loop to launch the test on every core one by one. Replace loop with one call to rte_eal_mp_remote_launch Signed-off-by: Steven Lariau Reviewed-by: Dharmik Thakkar Reviewed-by: Phil Yang Reviewed-by: Ruifeng Wang Acked-by: Gage Eads --- app/test/test_stack.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index 5a7273a7d..c100d9faf 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -322,7 +322,6 @@ static int test_stack_multithreaded(uint32_t flags) { struct test_args args; - unsigned int lcore_id; struct rte_stack *s; rte_atomic64_t size; @@ -345,14 +344,8 @@ test_stack_multithreaded(uint32_t flags) args.s = s; args.sz = &size; - RTE_LCORE_FOREACH_SLAVE(lcore_id) { - if (rte_eal_remote_launch(stack_thread_push_pop, - &args, lcore_id)) - rte_panic("Failed to launch lcore %d\n", lcore_id); - } - - stack_thread_push_pop(&args); - + if (rte_eal_mp_remote_launch(stack_thread_push_pop, &args, CALL_MASTER)) + rte_panic("Failed to launch tests\n"); rte_eal_mp_wait_lcore(); rte_stack_free(s); From patchwork Wed Aug 5 15:57:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75226 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 69EDDA053D; Wed, 5 Aug 2020 17:58:08 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C1E031C044; Wed, 5 Aug 2020 17:57:48 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id F0EC31C031 for ; Wed, 5 Aug 2020 17:57:46 +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 7CF511424; Wed, 5 Aug 2020 08:57:46 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 848953F7D7; Wed, 5 Aug 2020 08:57:45 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, dharmik.thakkar@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:57:20 +0100 Message-Id: <20200805155721.19808-4-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805155721.19808-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH 3/4] test/stack: propagate errors to main core 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" Use rte_eal_wait_lcore to wait and get the return value for all cores. This is used to propagate any error to the main core. Signed-off-by: Steven Lariau Reviewed-by: Dharmik Thakkar Reviewed-by: Phil Yang Reviewed-by: Ruifeng Wang Acked-by: Gage Eads --- app/test/test_stack.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index c100d9faf..b9d6befd4 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -322,8 +322,10 @@ static int test_stack_multithreaded(uint32_t flags) { struct test_args args; + unsigned int lcore_id; struct rte_stack *s; rte_atomic64_t size; + int result = 0; if (rte_lcore_count() < 2) { printf("Not enough cores for test_stack_multithreaded, expecting at least 2\n"); @@ -346,10 +348,14 @@ test_stack_multithreaded(uint32_t flags) if (rte_eal_mp_remote_launch(stack_thread_push_pop, &args, CALL_MASTER)) rte_panic("Failed to launch tests\n"); - rte_eal_mp_wait_lcore(); + + RTE_LCORE_FOREACH(lcore_id) { + if (rte_eal_wait_lcore(lcore_id) < 0) + result = -1; + } rte_stack_free(s); - return 0; + return result; } static int From patchwork Wed Aug 5 15:57:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75227 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3B64EA053D; Wed, 5 Aug 2020 17:58:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E06C01C0B0; Wed, 5 Aug 2020 17:57:49 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 916F11C039 for ; Wed, 5 Aug 2020 17:57:48 +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 138171424; Wed, 5 Aug 2020 08:57:48 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 16A1A3F7D7; Wed, 5 Aug 2020 08:57:46 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, dharmik.thakkar@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:57:21 +0100 Message-Id: <20200805155721.19808-5-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805155721.19808-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH 4/4] test/stack: remove atomics operations 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" Remove the part that checks if there is enough room in the stack, it's always true as long as size of stack >= MAX_BULK*rte_lcore_count(). This check used an atomic cmpset, and read / write to a shared size variable. These operations result in some form of synchronization that might get in the way of the actual stack testing. Signed-off-by: Steven Lariau Reviewed-by: Dharmik Thakkar Reviewed-by: Phil Yang Reviewed-by: Ruifeng Wang Acked-by: Gage Eads sz); - volatile uint64_t *sz_addr; - - sz_addr = (volatile uint64_t *)t->sz; - - num = RTE_MIN(rte_rand() % MAX_BULK, STACK_SIZE - sz); - - success = rte_atomic64_cmpset(sz_addr, sz, sz + num); - } while (success == 0); + num = rte_rand() % MAX_BULK; if (rte_stack_push(t->s, obj_table, num) != num) { printf("[%s():%u] Failed to push %u pointers\n", @@ -312,7 +299,6 @@ stack_thread_push_pop(void *args) return -1; } - rte_atomic64_sub(t->sz, num); } return 0; @@ -324,7 +310,6 @@ test_stack_multithreaded(uint32_t flags) struct test_args args; unsigned int lcore_id; struct rte_stack *s; - rte_atomic64_t size; int result = 0; if (rte_lcore_count() < 2) { @@ -335,16 +320,14 @@ test_stack_multithreaded(uint32_t flags) printf("[%s():%u] Running with %u lcores\n", __func__, __LINE__, rte_lcore_count()); - s = rte_stack_create("test", STACK_SIZE, rte_socket_id(), flags); + s = rte_stack_create("test", MAX_BULK * rte_lcore_count(), rte_socket_id(), flags); if (s == NULL) { printf("[%s():%u] Failed to create a stack\n", __func__, __LINE__); return -1; } - rte_atomic64_init(&size); args.s = s; - args.sz = &size; if (rte_eal_mp_remote_launch(stack_thread_push_pop, &args, CALL_MASTER)) rte_panic("Failed to launch tests\n");