From patchwork Wed Aug 12 19:18:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75465 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 F41D0A04DB; Wed, 12 Aug 2020 21:20:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C881D1C0C0; Wed, 12 Aug 2020 21:20:35 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id A4C111C0C0 for ; Wed, 12 Aug 2020 21:20:33 +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 23895D6E; Wed, 12 Aug 2020 12:20:33 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D78F63F22E; Wed, 12 Aug 2020 12:20:31 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, nd@arm.com, Steven Lariau Date: Wed, 12 Aug 2020 20:18:44 +0100 Message-Id: <20200812191847.16529-2-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200812191847.16529-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> <20200812191847.16529-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH v2 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 global 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 Acked-by: Gage Eads --- app/test/test_stack.c | 53 +++++++++++-------------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index c8dac1f55..f64d70c9d 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -276,20 +276,14 @@ struct test_args { rte_atomic64_t *sz; }; +static struct test_args thread_test_args; + static int -stack_thread_push_pop(void *args) +stack_thread_push_pop(__rte_unused 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; @@ -297,41 +291,37 @@ stack_thread_push_pop(void *args) * then push and pop those stack entries. */ do { - uint64_t sz = rte_atomic64_read(t->sz); + uint64_t sz = rte_atomic64_read(thread_test_args.sz); volatile uint64_t *sz_addr; - sz_addr = (volatile uint64_t *)t->sz; + sz_addr = (volatile uint64_t *)thread_test_args.sz; num = RTE_MIN(rte_rand() % MAX_BULK, STACK_SIZE - sz); success = rte_atomic64_cmpset(sz_addr, sz, sz + num); } while (success == 0); - if (rte_stack_push(t->s, obj_table, num) != num) { + if (rte_stack_push(thread_test_args.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) { + if (rte_stack_pop(thread_test_args.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_atomic64_sub(thread_test_args.sz, num); } - rte_free(obj_table); return 0; } static int test_stack_multithreaded(uint32_t flags) { - 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); + thread_test_args.s = s; + thread_test_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)) + NULL, 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(NULL); rte_eal_mp_wait_lcore(); rte_stack_free(s); - rte_free(args); - return 0; } From patchwork Wed Aug 12 19:18:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75466 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 1DA18A04DB; Wed, 12 Aug 2020 21:20:42 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 19F9B1C0C6; Wed, 12 Aug 2020 21:20:39 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 2D7201C0C5 for ; Wed, 12 Aug 2020 21:20: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 9C60ED6E; Wed, 12 Aug 2020 12:20:37 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D27503F22E; Wed, 12 Aug 2020 12:20:36 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, nd@arm.com, Steven Lariau Date: Wed, 12 Aug 2020 20:18:45 +0100 Message-Id: <20200812191847.16529-3-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200812191847.16529-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> <20200812191847.16529-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH v2 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 f64d70c9d..efd473855 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -322,7 +322,6 @@ stack_thread_push_pop(__rte_unused void *args) static int test_stack_multithreaded(uint32_t flags) { - unsigned int lcore_id; struct rte_stack *s; rte_atomic64_t size; @@ -345,14 +344,8 @@ test_stack_multithreaded(uint32_t flags) thread_test_args.s = s; thread_test_args.sz = &size; - RTE_LCORE_FOREACH_SLAVE(lcore_id) { - if (rte_eal_remote_launch(stack_thread_push_pop, - NULL, lcore_id)) - rte_panic("Failed to launch lcore %d\n", lcore_id); - } - - stack_thread_push_pop(NULL); - + if (rte_eal_mp_remote_launch(stack_thread_push_pop, NULL, CALL_MASTER)) + rte_panic("Failed to launch tests\n"); rte_eal_mp_wait_lcore(); rte_stack_free(s); From patchwork Wed Aug 12 19:18:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75467 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 B6207A04DB; Wed, 12 Aug 2020 21:20:59 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5BF8B1C0CF; Wed, 12 Aug 2020 21:20:59 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 2C77D1C0C5 for ; Wed, 12 Aug 2020 21:20:58 +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 B2C4BD6E; Wed, 12 Aug 2020 12:20:57 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AE6313F22E; Wed, 12 Aug 2020 12:20:56 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, nd@arm.com, Steven Lariau Date: Wed, 12 Aug 2020 20:18:46 +0100 Message-Id: <20200812191847.16529-4-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200812191847.16529-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> <20200812191847.16529-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH v2 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 efd473855..d959b566a 100644 --- a/app/test/test_stack.c +++ b/app/test/test_stack.c @@ -322,8 +322,10 @@ stack_thread_push_pop(__rte_unused void *args) static int test_stack_multithreaded(uint32_t flags) { + 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, NULL, 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 12 19:18:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Lariau X-Patchwork-Id: 75468 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 A2398A04DB; Wed, 12 Aug 2020 21:21:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 387941C0D5; Wed, 12 Aug 2020 21:21:02 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 607F71C0D4 for ; Wed, 12 Aug 2020 21:21:01 +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 E04C8D6E; Wed, 12 Aug 2020 12:21:00 -0700 (PDT) Received: from localhost.localdomain (unknown [10.57.38.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9A0E33F22E; Wed, 12 Aug 2020 12:20:59 -0700 (PDT) From: Steven Lariau To: Gage Eads , Olivier Matz Cc: dev@dpdk.org, nd@arm.com, Steven Lariau Date: Wed, 12 Aug 2020 20:18:47 +0100 Message-Id: <20200812191847.16529-5-steven.lariau@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200812191847.16529-1-steven.lariau@arm.com> References: <20200805155721.19808-1-steven.lariau@arm.com> <20200812191847.16529-1-steven.lariau@arm.com> Subject: [dpdk-dev] [PATCH v2 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 --- app/test/test_stack.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/app/test/test_stack.c b/app/test/test_stack.c index d959b566a..463460ccc 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 struct test_args thread_test_args; @@ -285,21 +284,9 @@ stack_thread_push_pop(__rte_unused 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(thread_test_args.sz); - volatile uint64_t *sz_addr; - - sz_addr = (volatile uint64_t *)thread_test_args.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(thread_test_args.s, obj_table, num) != num) { printf("[%s():%u] Failed to push %u pointers\n", @@ -312,8 +299,6 @@ stack_thread_push_pop(__rte_unused void *args) __func__, __LINE__, num); return -1; } - - rte_atomic64_sub(thread_test_args.sz, num); } return 0; @@ -324,7 +309,6 @@ test_stack_multithreaded(uint32_t flags) { unsigned int lcore_id; struct rte_stack *s; - rte_atomic64_t size; int result = 0; if (rte_lcore_count() < 2) { @@ -335,16 +319,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); thread_test_args.s = s; - thread_test_args.sz = &size; if (rte_eal_mp_remote_launch(stack_thread_push_pop, NULL, CALL_MASTER)) rte_panic("Failed to launch tests\n");