From patchwork Fri Oct 23 04:43:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Honnappa Nagarahalli X-Patchwork-Id: 318911 Delivered-To: patch@linaro.org Received: by 2002:a92:d1d1:0:0:0:0:0 with SMTP id u17csp126237ilg; Thu, 22 Oct 2020 21:45:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxQbjCq/OuLVk+y5KfP4aq5gOUn2GoYSEioB+cL9z0GHu6ayn2JRKPeBE2Sn/q5nLsP936V X-Received: by 2002:a17:906:a981:: with SMTP id jr1mr233485ejb.99.1603428344702; Thu, 22 Oct 2020 21:45:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603428344; cv=none; d=google.com; s=arc-20160816; b=ajRLCSZPkk/TK7taXlyLDvp12ZwhRRGIhx0mqABdSiFWxn5603qthiep/ULTET8GlR RsBCGo2iDupLhlhAA/irAbeFoUYuVri+AvMjp0Xpafx4dR7KC6iMAXN+T10qFaf01t/z Sdggpu9tFIo/UpYnVOPtVn+9/w6CWzBudIRDpRb1B60+RsPefmWXQcrHqYWc5q2eqZAw lJ3QlCAi1AFxUfPg2HD3vsznOj2pOM4UddI6xhcjlCRAuTrZgY6LzQBLwIuZVonWwFFD o7ssmXyWt8wNfYNsw7jcum3YaMr4jf605+129yzyIRTXkXCr6hj+KiZEKkV5Lzh15WrI Dy2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=qPiMx0mqDhNVBfCJDfc/Zk/VWHh0DeYcGKjocipGeT4=; b=UUs08684TYxGjWxmkSCyUXita3OrztpxB+LanNf8Z9DFBikxEDznhCOb1LEerjL9J9 Ad4Noj+JKwvYu3qXyJtYqCZhppkZNzJ/BftCgdV0uuzmSBPlcxAv+watvJIVtSWnN6xQ gIDqI7pdvt0DFqsRhnC5rlCHv7by/3btYx2lb49ZJNBKGH9vQpe0WXlooPI7+U/F/k9m 6/iHlkF4fmAm+kAsE5ZTGTMYGaE7cf6DIXV8wDMDbjvQCqjrQ+0XyZnCEH5y03bFkhkK tXR5edFgFXXDtsWk/TlSHx4s2UI2Ck7r7YP5CgDUOrxytC8VXQXgG0U2yI8IlTM6boeq HYzw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id g1si159652ejf.525.2020.10.22.21.45.44; Thu, 22 Oct 2020 21:45:44 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EC18472E4; Fri, 23 Oct 2020 06:44:31 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 8BB7572DD for ; Fri, 23 Oct 2020 06:44: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 0E7EC101E; Thu, 22 Oct 2020 21:44:25 -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 0491B3F66B; Thu, 22 Oct 2020 21:44:25 -0700 (PDT) From: Honnappa Nagarahalli To: dev@dpdk.org, honnappa.nagarahalli@arm.com, konstantin.ananyev@intel.com Cc: olivier.matz@6wind.com, david.marchand@redhat.com, dharmik.thakkar@arm.com, ruifeng.wang@arm.com, nd@arm.com Date: Thu, 22 Oct 2020 23:43:43 -0500 Message-Id: <20201023044343.13462-6-honnappa.nagarahalli@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201023044343.13462-1-honnappa.nagarahalli@arm.com> References: <20200224203931.21256-1-honnappa.nagarahalli@arm.com> <20201023044343.13462-1-honnappa.nagarahalli@arm.com> Subject: [dpdk-dev] [PATCH v3 5/5] 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 --- app/test/meson.build | 2 + app/test/test_ring_mt_peek_stress_zc.c | 56 ++++++++++++++++++++++ app/test/test_ring_st_peek_stress_zc.c | 65 ++++++++++++++++++++++++++ app/test/test_ring_stress.c | 6 +++ app/test/test_ring_stress.h | 2 + 5 files changed, 131 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 -- 2.17.1 Acked-by: Konstantin Ananyev 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..2933e30bf --- /dev/null +++ b/app/test/test_ring_st_peek_stress_zc.c @@ -0,0 +1,65 @@ +/* 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); + 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); + } + + rte_spinlock_unlock(&lck); + 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; + + static rte_spinlock_t lck = RTE_SPINLOCK_INITIALIZER; + + rte_spinlock_lock(&lck); + + 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); + } + + rte_spinlock_unlock(&lck); + 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_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;