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 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 --- 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; } -- 2.17.1