From patchwork Mon Feb 3 19:49:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Honnappa Nagarahalli X-Patchwork-Id: 183046 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp4364729ile; Mon, 3 Feb 2020 11:49:35 -0800 (PST) X-Google-Smtp-Source: APXvYqxJxl2nRanVBNMu76F/A3QrfR96bWyEaEZYvWi7H8on+HfghQ5T8FY+kDSRb4OJ6JeIyoKw X-Received: by 2002:a50:cc08:: with SMTP id m8mr14032338edi.263.1580759375159; Mon, 03 Feb 2020 11:49:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580759375; cv=none; d=google.com; s=arc-20160816; b=bGSNovujH8aKaHFJbBMQpsSLHhXFrNLJV/YoTSrzJ8t80JmxCN6guB93RkrN+eQxqy 58jzNh02ob/FikfUNfIWrkPKsyt/nx1hjfPBKkYv4W5GFzzKKUsgWgK3BmbGxNEMAH+y 5ro5MJ08LeLT/DFALxUDoK8OItiA+ccHShZhhma6V/i+j8cSMLKGXw0zgQio5CSmKuB0 I1XhYhnqXkG0XFwAn7mwkd57sH4DRXX8VZbcI/9kTVoeBBEYM069u2yxo1bZ0/Aq3Qq3 hhXoDWJsLCufcpjsVwsf0+sLi4zGMqpjDhrLY0xT5x6KaxgaWx48UCZ+enHpEWSWfaJY rqKw== 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=CuSfqMEOCIaNLld+ObEkJN+rZvYg/FdLBPLfN54y31c=; b=mvnofkGOf61uiyMlYsNw2pKVNHLr1wBiZXX7ufqzHQZ8PlaMTJi6mKz+1lriePqXCJ qK/jwQ+Ahyk66OawWh/bmCGgaTDTJzynyVk1r/JKuXhPLkVKVz+2HJLWQbfBlt0D8/3P zU4bfsSfi9sQ6Y+mAJc3dRVveLWvwOT1OF/1kT/qdGyAGHW2uKBuhumZ+HKcHloXlI6l WbS4BHsuxbusVH5AzOseoDGQ4JSRARuo6VFW/EjM90dXEQl+NbyXLhCA/eXCFaSJ6lqu w/u+DvnJisVmDSuaDtjDVkJD6xK8HKEc6Cq7U8AdCcxLhvFJbEmKcfMqux0lOoCRET+7 LF5Q== 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 Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id w9si11662604edr.357.2020.02.03.11.49.34; Mon, 03 Feb 2020 11:49:35 -0800 (PST) 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 Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E3F871BFC0; Mon, 3 Feb 2020 20:49:28 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id CDB5D1BFB2 for ; Mon, 3 Feb 2020 20:49:26 +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 470D01045; Mon, 3 Feb 2020 11:49:26 -0800 (PST) Received: from qc2400f-1.austin.arm.com (qc2400f-1.austin.arm.com [10.118.14.48]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 32F973F52E; Mon, 3 Feb 2020 11:49:26 -0800 (PST) From: Honnappa Nagarahalli To: agupta3@marvell.com, yipeng1.wang@intel.com, sameh.gobriel@intel.com, honnappa.nagarahalli@arm.com Cc: thomas@monjalon.net, david.marchand@redhat.com, dev@dpdk.org, nd@arm.com Date: Mon, 3 Feb 2020 13:49:08 -0600 Message-Id: <20200203194912.4669-2-honnappa.nagarahalli@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200203194912.4669-1-honnappa.nagarahalli@arm.com> References: <1567748973-24192-1-git-send-email-agupta3@marvell.com> <20200203194912.4669-1-honnappa.nagarahalli@arm.com> Subject: [dpdk-dev] [PATCH v2 1/5] test/meson: hash test split into shorter subtests 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" From: Amit Gupta hash_readwrite meson test was taking longer time to complete. The test always get TIMEOUT, hence test is split into functional and perf test. perf test is being moved under dpdk perf testsuites in meson build. Signed-off-by: Amit Gupta Acked-by: Yipeng Wang --- app/test/meson.build | 3 +- app/test/test_hash_readwrite.c | 146 +++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletion(-) -- 2.17.1 diff --git a/app/test/meson.build b/app/test/meson.build index 22b0cefaa..08c0ecb3f 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -233,7 +233,7 @@ fast_test_names = [ 'distributor_autotest', 'eventdev_common_autotest', 'fbarray_autotest', - 'hash_readwrite_autotest', + 'hash_readwrite_func_autotest', 'hash_readwrite_lf_autotest', 'ipsec_autotest', 'kni_autotest', @@ -282,6 +282,7 @@ perf_test_names = [ 'stack_perf_autotest', 'stack_lf_perf_autotest', 'rand_perf_autotest', + 'hash_readwrite_perf_autotest', ] driver_test_names = [ diff --git a/app/test/test_hash_readwrite.c b/app/test/test_hash_readwrite.c index 615767fb6..aa55db7fe 100644 --- a/app/test/test_hash_readwrite.c +++ b/app/test/test_hash_readwrite.c @@ -605,6 +605,150 @@ test_hash_readwrite_perf(struct perf *perf_results, int use_htm, return -1; } +static int +test_hash_rw_perf_main(void) +{ + /* + * Variables used to choose different tests. + * use_htm indicates if hardware transactional memory should be used. + * reader_faster indicates if the reader threads should finish earlier + * than writer threads. This is to timing either reader threads or + * writer threads for performance numbers. + */ + int use_htm, reader_faster; + unsigned int i = 0, core_id = 0; + + if (rte_lcore_count() < 3) { + printf("Not enough cores for hash_readwrite_autotest, expecting at least 3\n"); + return TEST_SKIPPED; + } + + RTE_LCORE_FOREACH_SLAVE(core_id) { + slave_core_ids[i] = core_id; + i++; + } + + setlocale(LC_NUMERIC, ""); + + if (rte_tm_supported()) { + printf("Hardware transactional memory (lock elision) " + "is supported\n"); + + printf("Test read-write with Hardware transactional memory\n"); + + use_htm = 1; + + reader_faster = 1; + if (test_hash_readwrite_perf(&htm_results, use_htm, + reader_faster) < 0) + return -1; + + reader_faster = 0; + if (test_hash_readwrite_perf(&htm_results, use_htm, + reader_faster) < 0) + return -1; + } else { + printf("Hardware transactional memory (lock elision) " + "is NOT supported\n"); + } + + printf("Test read-write without Hardware transactional memory\n"); + use_htm = 0; + + reader_faster = 1; + if (test_hash_readwrite_perf(&non_htm_results, use_htm, + reader_faster) < 0) + return -1; + reader_faster = 0; + if (test_hash_readwrite_perf(&non_htm_results, use_htm, + reader_faster) < 0) + return -1; + + printf("================\n"); + printf("Results summary:\n"); + printf("================\n"); + + printf("single read: %u\n", htm_results.single_read); + printf("single write: %u\n", htm_results.single_write); + for (i = 0; i < NUM_TEST; i++) { + printf("+++ core_cnt: %u +++\n", core_cnt[i]); + printf("HTM:\n"); + printf(" read only: %u\n", htm_results.read_only[i]); + printf(" write only: %u\n", htm_results.write_only[i]); + printf(" read-write read: %u\n", htm_results.read_write_r[i]); + printf(" read-write write: %u\n", htm_results.read_write_w[i]); + + printf("non HTM:\n"); + printf(" read only: %u\n", non_htm_results.read_only[i]); + printf(" write only: %u\n", non_htm_results.write_only[i]); + printf(" read-write read: %u\n", + non_htm_results.read_write_r[i]); + printf(" read-write write: %u\n", + non_htm_results.read_write_w[i]); + } + + return 0; +} + +static int +test_hash_rw_func_main(void) +{ + /* + * Variables used to choose different tests. + * use_htm indicates if hardware transactional memory should be used. + * reader_faster indicates if the reader threads should finish earlier + * than writer threads. This is to timing either reader threads or + * writer threads for performance numbers. + */ + int use_htm, use_ext; + unsigned int i = 0, core_id = 0; + + if (rte_lcore_count() < 3) { + printf("Not enough cores for hash_readwrite_autotest, expecting at least 3\n"); + return TEST_SKIPPED; + } + + RTE_LCORE_FOREACH_SLAVE(core_id) { + slave_core_ids[i] = core_id; + i++; + } + + setlocale(LC_NUMERIC, ""); + + if (rte_tm_supported()) { + printf("Hardware transactional memory (lock elision) " + "is supported\n"); + + printf("Test read-write with Hardware transactional memory\n"); + + use_htm = 1; + use_ext = 0; + + if (test_hash_readwrite_functional(use_ext, use_htm) < 0) + return -1; + + use_ext = 1; + if (test_hash_readwrite_functional(use_ext, use_htm) < 0) + return -1; + + } else { + printf("Hardware transactional memory (lock elision) " + "is NOT supported\n"); + } + + printf("Test read-write without Hardware transactional memory\n"); + use_htm = 0; + use_ext = 0; + if (test_hash_readwrite_functional(use_ext, use_htm) < 0) + return -1; + + use_ext = 1; + if (test_hash_readwrite_functional(use_ext, use_htm) < 0) + return -1; + + return 0; +} + static int test_hash_readwrite_main(void) { @@ -706,3 +850,5 @@ test_hash_readwrite_main(void) } REGISTER_TEST_COMMAND(hash_readwrite_autotest, test_hash_readwrite_main); +REGISTER_TEST_COMMAND(hash_readwrite_func_autotest, test_hash_rw_func_main); +REGISTER_TEST_COMMAND(hash_readwrite_perf_autotest, test_hash_rw_perf_main);