From patchwork Wed Aug 5 15:45:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75240 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 56A21A0351; Thu, 6 Aug 2020 12:27:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 478721C0C9; Thu, 6 Aug 2020 12:27:36 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 6F54F2B98 for ; Wed, 5 Aug 2020 17:46:23 +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 D59981424; Wed, 5 Aug 2020 08:46:22 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EAC023F7D7; Wed, 5 Aug 2020 08:46:21 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:45:58 +0100 Message-Id: <20200805154601.19609-2-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805154601.19609-1-steven.lariau@arm.com> References: <20200805154601.19609-1-steven.lariau@arm.com> X-Mailman-Approved-At: Thu, 06 Aug 2020 12:27:33 +0200 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:45:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75241 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 ED6A2A0351; Thu, 6 Aug 2020 12:27:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 33AB01C0D1; Thu, 6 Aug 2020 12:27:37 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 04BC82B98 for ; Wed, 5 Aug 2020 17:46:25 +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 754CD1476; Wed, 5 Aug 2020 08:46:24 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 95A053F7D7; Wed, 5 Aug 2020 08:46:23 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:45:59 +0100 Message-Id: <20200805154601.19609-3-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805154601.19609-1-steven.lariau@arm.com> References: <20200805154601.19609-1-steven.lariau@arm.com> X-Mailman-Approved-At: Thu, 06 Aug 2020 12:27:33 +0200 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 --- 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:46:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75242 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 C7465A0351; Thu, 6 Aug 2020 12:27:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5F6381C0D9; Thu, 6 Aug 2020 12:27:38 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 3E5381BFFA for ; Wed, 5 Aug 2020 17:46:26 +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 BCC851424; Wed, 5 Aug 2020 08:46:25 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E35613F7D7; Wed, 5 Aug 2020 08:46:24 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:46:00 +0100 Message-Id: <20200805154601.19609-4-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805154601.19609-1-steven.lariau@arm.com> References: <20200805154601.19609-1-steven.lariau@arm.com> X-Mailman-Approved-At: Thu, 06 Aug 2020 12:27:33 +0200 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 --- 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:46:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75243 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 6EF39A0351; Thu, 6 Aug 2020 12:28:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4BA551C10E; Thu, 6 Aug 2020 12:27:39 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id CAF6D2B98 for ; Wed, 5 Aug 2020 17:46:27 +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 56D501424; Wed, 5 Aug 2020 08:46:27 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.158]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7831C3F7D7; Wed, 5 Aug 2020 08:46:26 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, honnappa.nagarahalli@arm.com, nd@arm.com, Steven Lariau Date: Wed, 5 Aug 2020 16:46:01 +0100 Message-Id: <20200805154601.19609-5-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200805154601.19609-1-steven.lariau@arm.com> References: <20200805154601.19609-1-steven.lariau@arm.com> X-Mailman-Approved-At: Thu, 06 Aug 2020 12:27:33 +0200 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 --- app/test/test_stack.c | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index b9d6befd4..02bea7ec5 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -273,7 +273,6 @@ test_free_null(void) struct test_args { struct rte_stack *s; - rte_atomic64_t *sz; }; static int @@ -284,21 +283,9 @@ stack_thread_push_pop(void *args) int i; for (i = 0; i < NUM_ITERS_PER_THREAD; i++) { - unsigned int success, num; + unsigned int num; - /* Reserve up to min(MAX_BULK, available slots) stack entries, - * then push and pop those stack entries. - */ - do { - uint64_t sz = rte_atomic64_read(t->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");