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 AD48AA04B5; Sun, 25 Oct 2020 06:47:31 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 53F8C2BA3; Sun, 25 Oct 2020 06:46:19 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 38B1B2A63 for ; Sun, 25 Oct 2020 06:46:11 +0100 (CET) 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 9CCB11435; Sat, 24 Oct 2020 22:46:09 -0700 (PDT) Received: from qc2400f-1.austin.arm.com (qc2400f-1.austin.arm.com [10.118.12.27]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 925923F66B; Sat, 24 Oct 2020 22:46:09 -0700 (PDT) From: Honnappa Nagarahalli To: dev@dpdk.org, honnappa.nagarahalli@arm.com, konstantin.ananyev@intel.com, stephen@networkplumber.org Cc: dharmik.thakkar@arm.com, ruifeng.wang@arm.com, olivier.matz@6wind.com, david.marchand@redhat.com, nd@arm.com Date: Sun, 25 Oct 2020 00:45:52 -0500 Message-Id: <20201025054556.14277-5-honnappa.nagarahalli@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201025054556.14277-1-honnappa.nagarahalli@arm.com> References: <20200224203931.21256-1-honnappa.nagarahalli@arm.com> <20201025054556.14277-1-honnappa.nagarahalli@arm.com> Subject: [dpdk-dev] [PATCH v5 4/8] test/ring: add stress tests for zero copy APIs 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" Add stress tests for zero copy API. Signed-off-by: Honnappa Nagarahalli Reviewed-by: Dharmik Thakkar Acked-by: Konstantin Ananyev --- app/test/meson.build | 2 + app/test/test_ring_mt_peek_stress_zc.c | 56 +++++++++++++++++++++++ app/test/test_ring_st_peek_stress_zc.c | 63 ++++++++++++++++++++++++++ app/test/test_ring_stress.c | 6 +++ app/test/test_ring_stress.h | 2 + 5 files changed, 129 insertions(+) create mode 100644 app/test/test_ring_mt_peek_stress_zc.c create mode 100644 app/test/test_ring_st_peek_stress_zc.c diff --git a/app/test/meson.build b/app/test/meson.build index 8bfb02890..88c831a92 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -108,9 +108,11 @@ test_sources = files('commands.c', 'test_ring_mpmc_stress.c', 'test_ring_hts_stress.c', 'test_ring_mt_peek_stress.c', + 'test_ring_mt_peek_stress_zc.c', 'test_ring_perf.c', 'test_ring_rts_stress.c', 'test_ring_st_peek_stress.c', + 'test_ring_st_peek_stress_zc.c', 'test_ring_stress.c', 'test_rwlock.c', 'test_sched.c', diff --git a/app/test/test_ring_mt_peek_stress_zc.c b/app/test/test_ring_mt_peek_stress_zc.c new file mode 100644 index 000000000..7e0bd511a --- /dev/null +++ b/app/test/test_ring_mt_peek_stress_zc.c @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2020 Arm Limited + */ + +#include "test_ring.h" +#include "test_ring_stress_impl.h" +#include + +static inline uint32_t +_st_ring_dequeue_bulk(struct rte_ring *r, void **obj, uint32_t n, + uint32_t *avail) +{ + uint32_t m; + struct rte_ring_zc_data zcd; + + m = rte_ring_dequeue_zc_bulk_start(r, n, &zcd, avail); + n = (m == n) ? n : 0; + if (n != 0) { + /* Copy the data from the ring */ + test_ring_copy_from(&zcd, obj, -1, n); + rte_ring_dequeue_zc_finish(r, n); + } + + return n; +} + +static inline uint32_t +_st_ring_enqueue_bulk(struct rte_ring *r, void * const *obj, uint32_t n, + uint32_t *free) +{ + uint32_t m; + struct rte_ring_zc_data zcd; + + m = rte_ring_enqueue_zc_bulk_start(r, n, &zcd, free); + n = (m == n) ? n : 0; + if (n != 0) { + /* Copy the data from the ring */ + test_ring_copy_to(&zcd, obj, -1, n); + rte_ring_enqueue_zc_finish(r, n); + } + + return n; +} + +static int +_st_ring_init(struct rte_ring *r, const char *name, uint32_t num) +{ + return rte_ring_init(r, name, num, + RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ); +} + +const struct test test_ring_mt_peek_stress_zc = { + .name = "MT_PEEK_ZC", + .nb_case = RTE_DIM(tests), + .cases = tests, +}; diff --git a/app/test/test_ring_st_peek_stress_zc.c b/app/test/test_ring_st_peek_stress_zc.c new file mode 100644 index 000000000..b9dbd4a6f --- /dev/null +++ b/app/test/test_ring_st_peek_stress_zc.c @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2020 Arm Limited + */ + +#include "test_ring.h" +#include "test_ring_stress_impl.h" +#include + +static inline uint32_t +_st_ring_dequeue_bulk(struct rte_ring *r, void **obj, uint32_t n, + uint32_t *avail) +{ + uint32_t m; + struct rte_ring_zc_data zcd; + + static rte_spinlock_t lck = RTE_SPINLOCK_INITIALIZER; + + rte_spinlock_lock(&lck); + + m = rte_ring_dequeue_zc_bulk_start(r, n, &zcd, avail); + if (m != 0) { + /* Copy the data from the ring */ + test_ring_copy_from(&zcd, obj, -1, m); + rte_ring_dequeue_zc_finish(r, m); + } + + rte_spinlock_unlock(&lck); + return m; +} + +static inline uint32_t +_st_ring_enqueue_bulk(struct rte_ring *r, void * const *obj, uint32_t n, + uint32_t *free) +{ + uint32_t m; + struct rte_ring_zc_data zcd; + + static rte_spinlock_t lck = RTE_SPINLOCK_INITIALIZER; + + rte_spinlock_lock(&lck); + + m = rte_ring_enqueue_zc_bulk_start(r, n, &zcd, free); + if (m != 0) { + /* Copy the data from the ring */ + test_ring_copy_to(&zcd, obj, -1, m); + rte_ring_enqueue_zc_finish(r, m); + } + + rte_spinlock_unlock(&lck); + return m; +} + +static int +_st_ring_init(struct rte_ring *r, const char *name, uint32_t num) +{ + return rte_ring_init(r, name, num, RING_F_SP_ENQ | RING_F_SC_DEQ); +} + +const struct test test_ring_st_peek_stress_zc = { + .name = "ST_PEEK_ZC", + .nb_case = RTE_DIM(tests), + .cases = tests, +}; diff --git a/app/test/test_ring_stress.c b/app/test/test_ring_stress.c index c4f82ea56..1af45e0fc 100644 --- a/app/test/test_ring_stress.c +++ b/app/test/test_ring_stress.c @@ -49,9 +49,15 @@ test_ring_stress(void) n += test_ring_mt_peek_stress.nb_case; k += run_test(&test_ring_mt_peek_stress); + n += test_ring_mt_peek_stress_zc.nb_case; + k += run_test(&test_ring_mt_peek_stress_zc); + n += test_ring_st_peek_stress.nb_case; k += run_test(&test_ring_st_peek_stress); + n += test_ring_st_peek_stress_zc.nb_case; + k += run_test(&test_ring_st_peek_stress_zc); + printf("Number of tests:\t%u\nSuccess:\t%u\nFailed:\t%u\n", n, k, n - k); return (k != n); diff --git a/app/test/test_ring_stress.h b/app/test/test_ring_stress.h index c85d6fa92..416d68c9a 100644 --- a/app/test/test_ring_stress.h +++ b/app/test/test_ring_stress.h @@ -36,4 +36,6 @@ extern const struct test test_ring_mpmc_stress; extern const struct test test_ring_rts_stress; extern const struct test test_ring_hts_stress; extern const struct test test_ring_mt_peek_stress; +extern const struct test test_ring_mt_peek_stress_zc; extern const struct test test_ring_st_peek_stress; +extern const struct test test_ring_st_peek_stress_zc; -- 2.17.1