From patchwork Mon Nov 23 11:28:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 57145 Delivered-To: patch@linaro.org Received: by 10.112.155.196 with SMTP id vy4csp1377126lbb; Mon, 23 Nov 2015 03:34:54 -0800 (PST) X-Received: by 10.140.147.67 with SMTP id 64mr28044804qht.12.1448278494181; Mon, 23 Nov 2015 03:34:54 -0800 (PST) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id r129si10795376qhb.44.2015.11.23.03.34.53; Mon, 23 Nov 2015 03:34:54 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dkim=neutral (body hash did not verify) header.i=@linaro-org.20150623.gappssmtp.com Received: by lists.linaro.org (Postfix, from userid 109) id C2658618F0; Mon, 23 Nov 2015 11:34:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_LOW,T_DKIM_INVALID,URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 4B94161B6A; Mon, 23 Nov 2015 11:30:13 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 3C6AE619CE; Mon, 23 Nov 2015 11:30:02 +0000 (UTC) Received: from mail-lb0-f179.google.com (mail-lb0-f179.google.com [209.85.217.179]) by lists.linaro.org (Postfix) with ESMTPS id 16D5161960 for ; Mon, 23 Nov 2015 11:29:12 +0000 (UTC) Received: by lbbkw15 with SMTP id kw15so93933155lbb.0 for ; Mon, 23 Nov 2015 03:29:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=l0VzEk36ZTFCuzHEREa3LJnZNEvh4x+GtgpZewdx8AM=; b=pqOx5Wb8odAov0MX1p698Du+1cyOG7HD+n1Ng25KWALgjbiapny58MfaB1HDmgGTlN 9UM5oEdmIOOA9VRn6lXh1XC9/rQSCLavtXrg2OkIGF0X5YicnpqWHxDAbQz+dQjXcphz QYV3Eadh6vbieqwUNl9tvfTjm7/sbbsuvukPVEAFtS4WQwsNdrzoD6hiGwY8JkeT526u xo4F89xqJTrepg+KG1IcBd4ugiwvb6FvFfkWOCSI+Df58vIiXm9qZ3hV7bzuzMaEsvL8 9YNBTpZXs85W6vugC7zsu170Lol7MQ+UZCBsjNP0anufz6SUwdqnLggPa8/3E6lIB4S2 cZ7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=l0VzEk36ZTFCuzHEREa3LJnZNEvh4x+GtgpZewdx8AM=; b=dvFD0RMhYzQ3pORcyvZ8TKda73R96dBrtAcNzSLSv0ZmIXXFNMiDlm1I0Y3xiIokf2 fPUn+GWy0sQVIYQeZ/PrKfHuQfwObs3pmRsSKjAUbr1tDuUSjxCN7r6Fcb5CY/7ZYtlp TUYa3DKlOBVe0pHxAuTWx3DLSj5M+Kt2CU0AktVPKkJfoQGyTZ4sBGe4EHdZ/vkxzv8W pS6sIUdAg/pXdkLAIVbZ4ZOWD7LzsR4Jp+GT5INeLoz7KrtVLqkIrrh1LEC/0lrqQ21v lhmPmYEKbhSZuVDehs9tOgI/fKw0mDyKy9nfHXtKO7BYBLSRuvis4zOGSBnTcFJUw+8P 4Akg== X-Gm-Message-State: ALoCoQlrlW7vAFoGnaDTaUQtNZyvjpFZeWX49Jt4vjw3/vaJhB8ljjUKXEY7Sku+e79mjGeCijX7 X-Received: by 10.112.8.104 with SMTP id q8mr10732306lba.115.1448278150771; Mon, 23 Nov 2015 03:29:10 -0800 (PST) Received: from localhost.localdomain (ppp91-76-161-180.pppoe.mtu-net.ru. [91.76.161.180]) by smtp.gmail.com with ESMTPSA id 70sm1817754lfw.2.2015.11.23.03.29.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 Nov 2015 03:29:10 -0800 (PST) From: Maxim Uvarov To: lng-odp@lists.linaro.org Date: Mon, 23 Nov 2015 14:28:59 +0300 Message-Id: <1448278144-31994-6-git-send-email-maxim.uvarov@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1448278144-31994-1-git-send-email-maxim.uvarov@linaro.org> References: <1448278144-31994-1-git-send-email-maxim.uvarov@linaro.org> X-Topics: patch Subject: [lng-odp] [PATCHv16 05/10] helper: move ring test to helper X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" Move ring test to helper and kill not needed api_test directory. Unfortunately odp_ring_test.c had some old dirty code so I had to clean up it to to use cunit and latest helper apis. Signed-off-by: Maxim Uvarov --- configure.ac | 1 - helper/test/Makefile.am | 10 ++- .../api_test/odp_ring_test.c => helper/test/ring.c | 100 ++++++++++++--------- test/Makefile.am | 2 +- test/api_test/.gitignore | 2 - test/api_test/Makefile.am | 13 --- test/api_test/odp_common.c | 91 ------------------- test/api_test/odp_common.h | 42 --------- 8 files changed, 64 insertions(+), 197 deletions(-) rename test/api_test/odp_ring_test.c => helper/test/ring.c (86%) delete mode 100644 test/api_test/.gitignore delete mode 100644 test/api_test/Makefile.am delete mode 100644 test/api_test/odp_common.c delete mode 100644 test/api_test/odp_common.h diff --git a/configure.ac b/configure.ac index be21eaf..de34eb6 100644 --- a/configure.ac +++ b/configure.ac @@ -331,7 +331,6 @@ AC_CONFIG_FILES([Makefile pkgconfig/libodphelper.pc scripts/Makefile test/Makefile - test/api_test/Makefile test/performance/Makefile test/validation/Makefile test/validation/buffer/Makefile diff --git a/helper/test/Makefile.am b/helper/test/Makefile.am index 760dac1..a7fb754 100644 --- a/helper/test/Makefile.am +++ b/helper/test/Makefile.am @@ -1,6 +1,7 @@ include $(top_srcdir)/test/Makefile.inc AM_CFLAGS += -I$(srcdir)/common +AM_CFLAGS += -I$(top_srcdir)/test/validation/common AM_LDFLAGS += -static TESTS_ENVIRONMENT += TEST_DIR=${builddir} @@ -9,7 +10,8 @@ EXECUTABLES = chksum$(EXEEXT) \ thread$(EXEEXT) \ process$(EXEEXT)\ pause$(EXEEXT)\ - table$(EXEEXT) + table$(EXEEXT)\ + ring$(EXEEXT) COMPILE_ONLY = @@ -28,5 +30,7 @@ dist_thread_SOURCES = thread.c thread_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la dist_process_SOURCES = process.c process_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la -odph_pause_SOURCES = pause.c -dist_odp_table_SOURCES = table.c +dist_pause_SOURCES = pause.c +dist_table_SOURCES = table.c +dist_ring_SOURCES = ring.c +ring_LDADD = $(LIB)/libodphelper.la $(LIB)/libodp.la diff --git a/test/api_test/odp_ring_test.c b/helper/test/ring.c similarity index 86% rename from test/api_test/odp_ring_test.c rename to helper/test/ring.c index e8a962a..1b050be 100644 --- a/test/api_test/odp_ring_test.c +++ b/helper/test/ring.c @@ -37,7 +37,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - /** * @file * @@ -48,14 +47,24 @@ #include #include #include -#include +#include #include #include +#include #define RING_SIZE 4096 #define MAX_BULK 32 -#define RING_TEST_BASIC +enum { + ODP_RING_TEST_BASIC, + ODP_RING_TEST_STRESS, +}; + +/* local struct for ring_thread argument */ +typedef struct { + pthrd_arg thrdarg; + int stress_type; +} ring_arg_t; static int test_ring_basic(odph_ring_t *r) { @@ -64,24 +73,24 @@ static int test_ring_basic(odph_ring_t *r) unsigned i, num_elems; /* alloc dummy object pointers */ - src = malloc(RING_SIZE*2*sizeof(void *)); + src = malloc(RING_SIZE * 2 * sizeof(void *)); if (src == NULL) { LOG_ERR("failed to allocate test ring src memory\n"); goto fail; } - for (i = 0; i < RING_SIZE*2; i++) + for (i = 0; i < RING_SIZE * 2; i++) src[i] = (void *)(unsigned long)i; cur_src = src; /* alloc some room for copied objects */ - dst = malloc(RING_SIZE*2*sizeof(void *)); + dst = malloc(RING_SIZE * 2 * sizeof(void *)); if (dst == NULL) { LOG_ERR("failed to allocate test ring dst memory\n"); goto fail; } - memset(dst, 0, RING_SIZE*2*sizeof(void *)); + memset(dst, 0, RING_SIZE * 2 * sizeof(void *)); cur_dst = dst; printf("Test SP & SC basic functions\n"); @@ -251,7 +260,7 @@ static int producer_fn(void) void **src = NULL; /* alloc dummy object pointers */ - src = malloc(MAX_BULK*2*sizeof(void *)); + src = malloc(MAX_BULK * 2 * sizeof(void *)); if (src == NULL) { LOG_ERR("failed to allocate producer memory.\n"); return -1; @@ -275,7 +284,7 @@ static int consumer_fn(void) void **src = NULL; /* alloc dummy object pointers */ - src = malloc(MAX_BULK*2*sizeof(void *)); + src = malloc(MAX_BULK * 2 * sizeof(void *)); if (src == NULL) { LOG_ERR("failed to allocate consumer memory.\n"); return -1; @@ -298,7 +307,6 @@ static int consumer_fn(void) } while (1); } - /* * Note : make sure that both enqueue and dequeue * operation starts at same time so to avoid data corruption @@ -319,24 +327,22 @@ typedef enum { static void test_ring_stress(stress_type_t type) { int thr; + thr = odp_thread_id(); switch (type) { case one_enq_one_deq: - if (thr == 1) producer_fn(); if (thr == 2) consumer_fn(); break; - case multi_enq_multi_deq: - if (thr%2 == 0) + if (thr % 2 == 0) producer_fn(); else consumer_fn(); break; - case one_deq_rest_enq: case one_enq_rest_deq:/*TBD*/ default: @@ -344,13 +350,6 @@ static void test_ring_stress(stress_type_t type) } } -/* local struct for ring_thread argument */ -typedef struct { - pthrd_arg thrdarg; - int stress_type; -} ring_arg_t; - - static void *test_ring(void *arg) { ring_arg_t *parg = (ring_arg_t *)arg; @@ -368,8 +367,8 @@ static void *test_ring(void *arg) snprintf(ring_name, sizeof(ring_name), "test_ring_%i", thr); r = odph_ring_create(ring_name, RING_SIZE, - 0 /* not used, alignement - taken care inside func : todo */); + 0 /* not used, alignement + taken care inside func : todo */); if (r == NULL) { LOG_ERR("ring create failed\n"); result = -1; @@ -417,36 +416,43 @@ static void *test_ring(void *arg) return parg; } - -int main(int argc __attribute__((__unused__)), - char *argv[] __attribute__((__unused__))) +int main(int argc TEST_UNUSED, char *argv[] TEST_UNUSED) { ring_arg_t rarg; + odph_linux_pthread_t thread_tbl[MAX_WORKERS]; + odp_cpumask_t cpu_mask; + int num_workers; + char ring_name[ODPH_RING_NAMESIZE]; - if (odp_test_global_init() != 0) - return -1; + if (odp_init_global(NULL, NULL)) { + LOG_ERR("Error: ODP global init failed.\n"); + exit(EXIT_FAILURE); + } - odp_print_system_info(); + if (odp_init_local(ODP_THREAD_CONTROL)) { + LOG_ERR("Error: ODP local init failed.\n"); + exit(EXIT_FAILURE); + } odph_ring_tailq_init(); - rarg.thrdarg.numthrds = odp_cpu_count(); + num_workers = odp_cpumask_default_worker(&cpu_mask, MAX_WORKERS); + rarg.thrdarg.numthrds = rarg.thrdarg.numthrds; -#ifdef RING_TEST_BASIC rarg.thrdarg.testcase = ODP_RING_TEST_BASIC; -#else + printf("starting stess test type : %d..\n", rarg.stress_type); + odph_linux_pthread_create(&thread_tbl[0], &cpu_mask, + test_ring, (void *)&rarg); + odph_linux_pthread_join(thread_tbl, num_workers); + rarg.thrdarg.testcase = ODP_RING_TEST_STRESS; rarg.stress_type = one_enq_one_deq; -/* rarg.stress_type = multi_enq_multi_deq;*/ - char ring_name[ODPH_RING_NAMESIZE]; printf("starting stess test type : %d..\n", rarg.stress_type); - /* create a ring */ snprintf(ring_name, sizeof(ring_name), "test_ring_stress"); - r_stress = odph_ring_create(ring_name, RING_SIZE, - 0 /* not used, alignement - taken care inside func : todo */); + 0 /* not used, alignement + taken care inside func : todo */); if (r_stress == NULL) { LOG_ERR("ring create failed\n"); goto fail; @@ -456,15 +462,21 @@ int main(int argc __attribute__((__unused__)), LOG_ERR("ring lookup failed\n"); goto fail; } -#endif - odp_test_thread_create(test_ring, (pthrd_arg *)&rarg); -#ifndef RING_TEST_BASIC + odph_linux_pthread_create(&thread_tbl[0], &cpu_mask, + test_ring, (void *)&rarg); + odph_linux_pthread_join(thread_tbl, num_workers); + fail: -#endif + if (odp_term_local()) { + LOG_ERR("Error: ODP local term failed.\n"); + exit(EXIT_FAILURE); + } - odp_test_thread_exit(&rarg.thrdarg); + if (odp_term_global()) { + LOG_ERR("Error: ODP global term failed.\n"); + exit(EXIT_FAILURE); + } return 0; } - diff --git a/test/Makefile.am b/test/Makefile.am index 2ba8008..4a75364 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = api_test performance miscellaneous +SUBDIRS = performance miscellaneous if cunit_support SUBDIRS += validation diff --git a/test/api_test/.gitignore b/test/api_test/.gitignore deleted file mode 100644 index 950f443..0000000 --- a/test/api_test/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -odp_ring -odp_shm diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am deleted file mode 100644 index fcdba48..0000000 --- a/test/api_test/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -include $(top_srcdir)/test/Makefile.inc - -bin_PROGRAMS = odp_ring$(EXEEXT) - -odp_ring_CFLAGS = $(AM_CFLAGS) - -odp_ring_LDFLAGS = $(AM_LDFLAGS) -static - -noinst_HEADERS = \ - $(top_srcdir)/test/api_test/odp_common.h \ - $(top_srcdir)/test/test_debug.h - -dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c diff --git a/test/api_test/odp_common.c b/test/api_test/odp_common.c deleted file mode 100644 index 681d915..0000000 --- a/test/api_test/odp_common.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * ODP test application common - */ - -#include -#include -#include -#include -#include - -#define MAX_WORKERS 32 /**< Max worker threads */ - -/* Globals */ -static odph_linux_pthread_t thread_tbl[MAX_WORKERS]; /**< worker threads table*/ -static int num_workers; /**< number of workers */ - -/** - * Print system information - */ -void odp_print_system_info(void) -{ - odp_cpumask_t cpumask; - char str[ODP_CPUMASK_STR_SIZE]; - - memset(str, 1, sizeof(str)); - - odp_cpumask_zero(&cpumask); - - odp_cpumask_from_str(&cpumask, "0x1"); - (void)odp_cpumask_to_str(&cpumask, str, sizeof(str)); - - printf("\n"); - printf("ODP system info\n"); - printf("---------------\n"); - printf("ODP API version: %s\n", odp_version_api_str()); - printf("CPU model: %s\n", odp_sys_cpu_model_str()); - printf("CPU freq (hz): %"PRIu64"\n", odp_sys_cpu_hz()); - printf("Cache line size: %i\n", odp_sys_cache_line_size()); - printf("CPU count: %i\n", odp_cpu_count()); - printf("CPU mask: %s\n", str); - - printf("\n"); -} - -/** test init globals and call odp_init_global() */ -int odp_test_global_init(void) -{ - memset(thread_tbl, 0, sizeof(thread_tbl)); - - if (odp_init_global(NULL, NULL)) { - LOG_ERR("ODP global init failed.\n"); - return -1; - } - - num_workers = odp_cpu_count(); - /* force to max CPU count */ - if (num_workers > MAX_WORKERS) - num_workers = MAX_WORKERS; - - return 0; -} - -/** create test thread */ -int odp_test_thread_create(void *func_ptr(void *), pthrd_arg *arg) -{ - odp_cpumask_t cpumask; - - /* Create and init additional threads */ - odp_cpumask_default_worker(&cpumask, arg->numthrds); - odph_linux_pthread_create(thread_tbl, &cpumask, func_ptr, - (void *)arg); - - return 0; -} - -/** exit from test thread */ -int odp_test_thread_exit(pthrd_arg *arg) -{ - /* Wait for other threads to exit */ - odph_linux_pthread_join(thread_tbl, arg->numthrds); - - return 0; -} diff --git a/test/api_test/odp_common.h b/test/api_test/odp_common.h deleted file mode 100644 index f321b6b..0000000 --- a/test/api_test/odp_common.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/** - * @file - * - * ODP test application common headers - */ - -#ifndef ODP_COMMON_H -#define ODP_COMMON_H - -#define MAX_WORKERS 32 /**< Maximum number of work threads */ - -/** types of tests */ -typedef enum { - ODP_ATOMIC_TEST = 0, - ODP_SHM_TEST, - ODP_RING_TEST_BASIC, - ODP_RING_TEST_STRESS, - ODP_TIMER_PING_TEST, - ODP_MAX_TEST -} odp_test_case_e; - -/** - * Thread argument - */ -typedef struct { - int testcase; /**< specifies which set of API's to exercise */ - int numthrds; /**< no of pthreads to create */ -} pthrd_arg; - -extern void odp_print_system_info(void); -extern int odp_test_global_init(void); -/** create thread fro start_routine function */ -extern int odp_test_thread_create(void *(*start_routine) (void *), pthrd_arg *); -extern int odp_test_thread_exit(pthrd_arg *); - -#endif /* ODP_COMMON_H */