From patchwork Fri Apr 6 15:13:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavan Nikhilesh X-Patchwork-Id: 37423 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 588F01D251; Fri, 6 Apr 2018 17:14:00 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0082.outbound.protection.outlook.com [104.47.41.82]) by dpdk.org (Postfix) with ESMTP id 78F0C1D24A for ; Fri, 6 Apr 2018 17:13:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=pHA1g9ZlVFYfp3bqGSFfES18+Yj88BtawYAs91BzkIo=; b=lyW+3JN3N5QRzLRNSRa+ZYUmTQ5jfLFufpSmJdqVvIJoG1nzl1PZ1jGzD2W5hkU3wSDxID86thazOboAz27IF3L1ZHocfp7D48nt6LvClVTgmU/ytFx41WU+tM0DLU84md0bqlrwihEJ8mgMreNhRXugVfVT0CgpqU6dPT8QbDw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Pavan.Bhagavatula@cavium.com; Received: from ltp-pvn.caveonetworks.com (111.93.218.67) by BN6PR07MB3457.namprd07.prod.outlook.com (2603:10b6:405:64::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.653.12; Fri, 6 Apr 2018 15:13:55 +0000 From: Pavan Nikhilesh To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, erik.g.carrillo@intel.com Cc: dev@dpdk.org, Pavan Nikhilesh Date: Fri, 6 Apr 2018 20:43:22 +0530 Message-Id: <20180406151324.9135-2-pbhagavatula@caviumnetworks.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180406151324.9135-1-pbhagavatula@caviumnetworks.com> References: <20180318131216.11699-1-pbhagavatula@caviumnetworks.com> <20180406151324.9135-1-pbhagavatula@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: PN1PR0101CA0007.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c00:e::17) To BN6PR07MB3457.namprd07.prod.outlook.com (2603:10b6:405:64::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dd983ab2-0892-43c3-0f88-08d59bd104dc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603328)(7153060)(7193020); SRVR:BN6PR07MB3457; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3457; 3:EinfOkvNcY8/TDSgflubIRNSWXtcFOHdShQxkpjDDrEqH0gryo2hbC/yrybmPaTDQ2M5ZYyXnGyUntEZ0neDGvv9HLGfD3i8kFbFDMyOtpVxmoFI9dGKjoOQRMWVk6MuZA8dK6dp9NwzJDQ0D8rlaRHP8UCuIJEq0ozOwQdPA2XnF0kJfKYd2qjDnFXAofN9PE+4qAYKzPg+ZjpVP8qekgAtX3DhoNPYD7+OTF2tKwExZffUZzb1RSjM2JcBQ0nY; 25:2j9OgbPoA5sqDYA6f9UmUpSxmGiyXF4awUGLmquKJOiKc7oPAjcQ1tR6yH6jh1K9FQrcRRbMN3P/hWJzAVjKJlcFDWohR2Yl3tTIytz/mA8gXOEJSDlV7Z/8F3s3CGBoxHjunz2E4qXev5e1+YmamTHPpGsaZSVjJuYq9zMU8n7zulIyfDNq71IuaEazcCPb7BEApCwgbC7kaPZ4/h5t/A+PulhrMHYyAQh7Ke7WD279L/G1QIyLj/p0lVawuims0C5vydj2JW3OSNFPZoxaKhpT7bnJ54DB5agZBMqd9hlrHqdqFrNkjFCwbB+M04/FBKpe5FI9hrihWJyP3bgVow==; 31:buzyGY4PASQuufBTDRhaRd1hq/MwDtyISxWs5LJvyZlGBFKuJ2aEvCsPr7qharoiWDbZ3hkA20Sn29OPw47W9idIr2nVayDljsFn4VZYXj3/UfTPUGeemyZFV/Mt59VDmMDJZWXQPVuYjAaEusBa5qdKSF00Tjk/PDmzhBTZOq6AdE2DB962mvP6XhSgD6KdWE+PIBKynPmuR4gymm85HQAMIifMMNiT3B+/O5ZbHOw= X-MS-TrafficTypeDiagnostic: BN6PR07MB3457: X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3457; 20:snll3iVD5GJMAo7YDFO+3FIvFg0awlNVhNQYQ35m1tJhVVTzXkNMZ5mZTx9AYoQSZlXl9vG7w17olNq2UzcMSHQIHtYlDIJIY3MA1cphzCVU6onzsPvRFimtbWh4nOISN+L8Ok+z+SpY7/HUGInGKUfREhUegF8CIqqDv1iqAJC294Vnu8DaJ79ofcLbvyYV5BpvIi8Pf1fFoBsNfMkTRxfWG6BThqa9SaPOdTQJpLVGXGXYTwkXg2w5bxJMn+PBzU731OlaqnfyhVADs5bBHTlSlPCoyXWnRPIxDKLBbakS8kM1d7oUOu3BH4rohjGEaItHpo5VV379x89jL0mAJkvk6TDr81VWV3PZD8OxTVfzLrpaSpip9jx+IUv8sGhaWqEiNtRV07Rv0sIoW+ITL/MY3BX1dXkJ2Z0DR4rSMBgzMUCmY/AVvrcgPzfju3lN7HDZikqqXoWINfLXh4PlO3au3oLfY/G00T491E4Rhf2uPEoa3zYJTebQKsl5xt3TgL6fMPRbXBcQSdo+nFb0VRq6lPSC71ZEYoykur8Ub7qLSxipCc4dMBk1fgua/f7c/9kQMRNlBRASZjg2QS1LX4ScRyOADGGuoFLChTqG5fQ=; 4:zKTCA9vplhodP6YNAg5GlI7P6x4XZV3ifZQC5ueYR7wNV9fLQPPQFRD4zyDP3pk2ONRfrapZ2ycKpdCQOSmIWNDycAw3SWyplyJIDn8K7EA8FPilzJD2YW/AWu/W/qYiegW3mUsON9eQmgH6pCwqMhJHw03wVAUIZ8wYxLaxGD8t+cFj2L2tHhfCfbamUYBCuUhDDKaIHczTR4vK1wUN4vBbU8XcQpi43H1wMwPKHKrhZQ7r6TvHZGqKGSiUy/wMCIuDpSiSt1XDd5fyeS6aWaaHm741T8w7uOguYoUsC76850sIG8PH+UyrS/uRjOG/ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:BN6PR07MB3457; BCL:0; PCL:0; RULEID:; SRVR:BN6PR07MB3457; X-Forefront-PRVS: 0634F37BFF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(346002)(376002)(366004)(396003)(39850400004)(189003)(199004)(51416003)(446003)(47776003)(81166006)(2616005)(16526019)(5660300001)(305945005)(11346002)(956004)(16586007)(8936002)(1076002)(72206003)(69596002)(107886003)(81156014)(106356001)(3846002)(476003)(486006)(6512007)(7736002)(4326008)(8676002)(76176011)(1857600001)(48376002)(68736007)(66066001)(97736004)(53416004)(6666003)(52116002)(105586002)(50466002)(316002)(26005)(6506007)(50226002)(53936002)(42882007)(25786009)(5009440100003)(478600001)(36756003)(6486002)(6116002)(386003)(2906002)(42262002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3457; H:ltp-pvn.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR07MB3457; 23:qCAblmKMZV68eIrx3srj3iKyK2GwwvXvO721FzFqo?= N6WDJjTJJ1xq1bWrKu9joeiJXleouI1zVQndy3QbPd4C7wgPNFUHZqNos6Z4JxkhDjofVSiffrJidbc+uUkJF98GoYqWRo3FCNltxJb6nuNBvM8R8c5fVhWTL9HzjP1iTqCLB2i2+wB9YVnhfaplOPVR+iI8FEuhcwwsb5+H05ZrWZWyXyeldZBI+IwSz+xskoDc/wqumwsl/y1AWmvtXvB4A+U7uVxoVIz7I0Md9Pa4ORXRzNkfqV8qkaH01jW1HfUC3oMN427Xl/UOYZSDAQYrNS1QtAgC4Oo5FkC8dmcHKeWe3hN8SuLT0vvnEjm2M0CzIejlEwX5IXPa/Q5g/BoYAJC0uT+Ut8OmSB5cgTBEyS8Ckn2Z7NmN1Ya8fQZ1IoqnpEf+maS3OWG7iAxwkryui1K5dECG0CyeOVHVJERQUVHuthor6JXfNB/lPyM9poKyb1zhzSWidb5+DFppsXAt5DLhI/h89GHJW4zhzGIQESjKrjH+oFO8WFdzdOgeFVGxhaRl8WB+Bp8Y40lvwepngRn4ZF526lubxF673uRMbW+zBlpPwyctTR2q6ub1vWwMgP+Yp67Z7SbzYU3YC62qcmjs3K+LNb3ZUXGGP+Tg2WLweVIy54sdVd33RWSfRaKC+jXJT5jaf11NkH+m2gn+fx7JG1JjQ85b4uc7aE7tUSvu/tsrWS6ozWJU5dgRYuw/XmwPLK39a4HpIpnmTvI+C0tefVAjGPXRUAPx7sks/qu2Jlq0HAZ+cNuiU4GpdF+yXnZeVvJqGne+8jlpcyDIuJDIxAntuu0+Nx5HmSXg63KXJfC+jtfcwWokxWNTBCBETyEbqwWNYyJh8beWb6dHLDPqFfknOCzbVyujYWDiclcD9Fa3x6rGLlQGApYRstKCE7bMBKzz2uqcoQ5XYt/1DcS49SSZSNfVdMX7SyMHB1qvR3wnAqSWDEQDOJxaxje5B2X4SZjq2GcZdlgMbci+Ja2Tw+pBlnG7Vr2kqgjnj5cZEaAeoocD+lvxMDghDpkb9mgDDAsBLjODeRNFMDNlCJ/B+3s7PgPCzTxxiwQ/sXUPzskS7e8NN1vbEsGA/RTbfSO3gR74u+dhrklW+YG7KFxFXLhdCE9X0NKKfdT8TYugICsUJbHPaBiYJWSYtG9UNI/eZ4H5Q0PVmWyALyUmU7QT7IqoBAupU7TPC0EocNAbr9jhAq5OCUh1ELapmjbo1tSB2A5fY5du2dVwdohbW98Rt/Jrz7ttZYmRInhxU5TahGmRydjctBhTILiENPQEjKZImhBNhH3ecWAw8PQ X-Microsoft-Antispam-Message-Info: sdtMSVKuDAMShsYZ7RqLufW5j5Gn7lQChqFdOVVv184WCiD3EoKGMUigruvkJ2aXdcIF7KquR9RLL/OjGgi41doY6RbFZoacX8+gVEjpxLkNFSjTZt3RRlBD3GwOBAF6cxBBU/dtWVcvUt6Ht7txKrtpW4s+LCqUqBjD0ViYaRn82O4F+XjmfjaV35cuOlDD X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3457; 6:efnb9v4PiYudcuKRdx8TUzYNdaw6eTSOWhrqUHDaXyqxae5flxzurgB6m7qsdl2+uEMMs3LqhqWPorOcYCfFLxpkBq/o+TFIMzMTj/9EQGrKTQ4H9DvSEUbgYvFUE+Y7uG614Kg/wzPSkMgNP5AhujqR0JloiP7ebBKo/x7fVWo5T1LoFzacSmK0dIPGvyCWioH14VVc1GzbGBL0backGcAjLfXMZcwyi6QSQx0kb+H20+2v+GZdARogIvw+SWWy14wJTHWhc8NQ6Zk9KNlPaMqOK7Zc5qxCJLvQjNkiSR2oy+jIVhJifVo1rYonCvtcX989XGxtNcrr4+tjROkMeg1uKE4H0z7LWjQ0FDKxEBlcwceazaVqvtmY8NqYsaJpBpdKY+49RUfzG8Xwdtuzg3eJt+Jo/IHNQewnGGCF2LRh1JaH44lNhXnML9yLWB5rlhOhabaIeiS4oXAwl5jKSg==; 5:VzxohRPny2lw5nJB6uyiK5wHkjiO67fTwAjEYnTSx4osgA2R7clDpuRqjaCyEejsa60/1sDtdO0pC3bbUNUC92CY124CpohSTNr1NWFdM2mOvNae+jGtPuw4xcG20jCAZWFikDe65bo/oP4fb9AM5cTk8Ox0by37tIgz6drHY2I=; 24:PZW0ymCbU1cRUE80sdPDMQF1J0VzGpYsEoWePd3uaI04Jefe6qnYhemFzIrISuyam5X4OTixN52G4X88ceAE+WBWpPftqK/YaBLcQMdCtfI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3457; 7:JSiI5lSDP2o1pK5jhK9otO7HEVdmTjj4MKlES8VTfSJRV3F636FyoRkAqg2qOQ/WWGX5mJ/TQ6Ye+mVmvimmcHlwiZZ4UxmXGX1q5PgMyRkfJn3x7u8YO1xKkaAS1UaNKB9XNhRM/GSqgDkXqm2an1vuQKLEhOdnt7OiCP2I6Ju29oaRmrSGtVMIsBVeKaRDmFcYQ5XKB7jxyG+iTY9vZpAeDYkI53D7KCVSdgvgT2RUyTjGyQI4imz2xi46RtKa X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2018 15:13:55.8700 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dd983ab2-0892-43c3-0f88-08d59bd104dc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB3457 Subject: [dpdk-dev] [PATCH v5 2/4] app/eventdev: add burst mode for event timer adapter 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 burst mode for event timer adapter that can be selected by passing --prod_type_timerdev_burst. Signed-off-by: Pavan Nikhilesh Acked-by: Erik Gabriel Carrillo Acked-by: Jerin Jacob --- app/test-eventdev/evt_options.c | 13 ++++++ app/test-eventdev/evt_options.h | 8 +++- app/test-eventdev/test_perf_common.c | 67 +++++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/app/test-eventdev/evt_options.c b/app/test-eventdev/evt_options.c index 47e37bc9b..1b60eb2ef 100644 --- a/app/test-eventdev/evt_options.c +++ b/app/test-eventdev/evt_options.c @@ -98,6 +98,15 @@ evt_parse_timer_prod_type(struct evt_options *opt, const char *arg __rte_unused) return 0; } +static int +evt_parse_timer_prod_type_burst(struct evt_options *opt, + const char *arg __rte_unused) +{ + opt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR; + opt->timdev_use_burst = 1; + return 0; +} + static int evt_parse_test_name(struct evt_options *opt, const char *arg) { @@ -185,6 +194,8 @@ usage(char *program) "\t--prod_type_timerdev : use event timer device as producer.\n" "\t expity_nsec would be the timeout\n" "\t in ns.\n" + "\t--prod_type_timerdev_burst : use timer device as producer\n" + "\t burst mode.\n" ); printf("available tests:\n"); evt_test_dump_names(); @@ -247,6 +258,7 @@ static struct option lgopts[] = { { EVT_QUEUE_PRIORITY, 0, 0, 0 }, { EVT_PROD_ETHDEV, 0, 0, 0 }, { EVT_PROD_TIMERDEV, 0, 0, 0 }, + { EVT_PROD_TIMERDEV_BURST, 0, 0, 0 }, { EVT_HELP, 0, 0, 0 }, { NULL, 0, 0, 0 } }; @@ -272,6 +284,7 @@ evt_opts_parse_long(int opt_idx, struct evt_options *opt) { EVT_QUEUE_PRIORITY, evt_parse_queue_priority}, { EVT_PROD_ETHDEV, evt_parse_eth_prod_type}, { EVT_PROD_TIMERDEV, evt_parse_timer_prod_type}, + { EVT_PROD_TIMERDEV_BURST, evt_parse_timer_prod_type_burst}, }; for (i = 0; i < RTE_DIM(parsermap); i++) { diff --git a/app/test-eventdev/evt_options.h b/app/test-eventdev/evt_options.h index b51d8d5b3..e5e632783 100644 --- a/app/test-eventdev/evt_options.h +++ b/app/test-eventdev/evt_options.h @@ -33,6 +33,7 @@ #define EVT_QUEUE_PRIORITY ("queue_priority") #define EVT_PROD_ETHDEV ("prod_type_ethdev") #define EVT_PROD_TIMERDEV ("prod_type_timerdev") +#define EVT_PROD_TIMERDEV_BURST ("prod_type_timerdev_burst") #define EVT_HELP ("help") enum evt_prod_type { @@ -66,6 +67,7 @@ struct evt_options { uint32_t fwd_latency:1; uint32_t q_priority:1; enum evt_prod_type prod_type; + uint8_t timdev_use_burst; uint8_t timdev_cnt; }; @@ -275,7 +277,11 @@ evt_dump_producer_type(struct evt_options *opt) evt_dump("nb_ethdev", "%d", rte_eth_dev_count()); break; case EVT_PROD_TYPE_EVENT_TIMER_ADPTR: - snprintf(name, EVT_PROD_MAX_NAME_LEN, + if (opt->timdev_use_burst) + snprintf(name, EVT_PROD_MAX_NAME_LEN, + "Event timer adapter burst mode producer"); + else + snprintf(name, EVT_PROD_MAX_NAME_LEN, "Event timer adapter producer"); evt_dump("nb_timer_adapters", "%d", opt->nb_timer_adptrs); evt_dump("max_tmo_nsec", "%"PRIu64"", opt->max_tmo_nsec); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index b6cc00e60..a74ab9a9e 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -133,6 +133,67 @@ perf_event_timer_producer(void *arg) return 0; } +static inline int +perf_event_timer_producer_burst(void *arg) +{ + int i; + struct prod_data *p = arg; + struct test_perf *t = p->t; + struct evt_options *opt = t->opt; + uint32_t flow_counter = 0; + uint64_t count = 0; + uint64_t arm_latency = 0; + const uint8_t nb_timer_adptrs = opt->nb_timer_adptrs; + const uint32_t nb_flows = t->nb_flows; + const uint64_t nb_timers = opt->nb_timers; + struct rte_mempool *pool = t->pool; + struct perf_elt *m[BURST_SIZE + 1] = {NULL}; + struct rte_event_timer_adapter **adptr = t->timer_adptr; + uint64_t timeout_ticks = opt->expiry_nsec / opt->timer_tick_nsec; + + timeout_ticks = opt->optm_timer_tick_nsec ? + (timeout_ticks * opt->timer_tick_nsec) + / opt->optm_timer_tick_nsec : timeout_ticks; + timeout_ticks += timeout_ticks ? 0 : 1; + const struct rte_event_timer tim = { + .ev.op = RTE_EVENT_OP_NEW, + .ev.queue_id = p->queue_id, + .ev.sched_type = t->opt->sched_type_list[0], + .ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + .ev.event_type = RTE_EVENT_TYPE_TIMER, + .state = RTE_EVENT_TIMER_NOT_ARMED, + .timeout_ticks = timeout_ticks, + }; + + if (opt->verbose_level > 1) + printf("%s(): lcore %d\n", __func__, rte_lcore_id()); + + while (count < nb_timers && t->done == false) { + if (rte_mempool_get_bulk(pool, (void **)m, BURST_SIZE) < 0) + continue; + for (i = 0; i < BURST_SIZE; i++) { + rte_prefetch0(m[i + 1]); + m[i]->tim = tim; + m[i]->tim.ev.flow_id = flow_counter++ % nb_flows; + m[i]->tim.ev.event_ptr = m[i]; + m[i]->timestamp = rte_get_timer_cycles(); + } + rte_event_timer_arm_tmo_tick_burst( + adptr[flow_counter % nb_timer_adptrs], + (struct rte_event_timer **)m, + tim.timeout_ticks, + BURST_SIZE); + arm_latency += rte_get_timer_cycles() - m[i - 1]->timestamp; + count += BURST_SIZE; + } + fflush(stdout); + rte_delay_ms(1000); + printf("%s(): lcore %d Average event timer arm latency = %.3f us\n", + __func__, rte_lcore_id(), (float)(arm_latency / count) / + (rte_get_timer_hz() / 1000000)); + return 0; +} + static int perf_producer_wrapper(void *arg) { @@ -141,8 +202,12 @@ perf_producer_wrapper(void *arg) /* Launch the producer function only in case of synthetic producer. */ if (t->opt->prod_type == EVT_PROD_TYPE_SYNT) return perf_producer(arg); - else if (t->opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) + else if (t->opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR && + !t->opt->timdev_use_burst) return perf_event_timer_producer(arg); + else if (t->opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR && + t->opt->timdev_use_burst) + return perf_event_timer_producer_burst(arg); return 0; }