From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 59FE43B5 for ; Fri, 28 Apr 2017 13:00:05 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Apr 2017 04:00:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,387,1488873600"; d="scan'208";a="81735321" Received: from silpixa00381631.ir.intel.com (HELO silpixa00381631.ger.corp.intel.com) ([10.237.222.122]) by orsmga004.jf.intel.com with ESMTP; 28 Apr 2017 04:00:02 -0700 From: Pablo de Lara To: jingjing.wu@intel.com Cc: dev@dpdk.org, Remy Horton Date: Fri, 28 Apr 2017 12:00:13 +0100 Message-Id: <1493377213-156955-1-git-send-email-pablo.de.lara.guarch@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493211774-28249-1-git-send-email-remy.horton@intel.com> References: <1493211774-28249-1-git-send-email-remy.horton@intel.com> Subject: [dpdk-dev] [PATCH v2] app/testpmd: add bitrate stats option 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: , X-List-Received-Date: Fri, 28 Apr 2017 11:00:07 -0000 From: Remy Horton Bit-rate collation should only be done by one core. This patch adds an option to select which core performs the bit-rate calculation, which is also disabled by default. Fixes: 7e4441c8efb9 ("app/testpmd: add bitrate statistics calculation") Signed-off-by: Remy Horton Acked-by: Pablo de Lara --- Changes in v2: - Added parameter to documentation app/test-pmd/parameters.c | 19 +++++++++++++++++- app/test-pmd/testpmd.c | 36 +++++++++++++++++++++++++---------- app/test-pmd/testpmd.h | 5 +++++ doc/guides/testpmd_app_ug/run_app.rst | 4 ++++ 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 3f4d3a2..a0300eb 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -201,7 +201,9 @@ usage(char* progname) printf(" --disable-link-check: disable check on link status when " "starting/stopping ports.\n"); printf(" --no-lsc-interrupt: disable link status change interrupt.\n"); - printf(" --no-rmv-interrupt: disable device removal interrupt."); + printf(" --no-rmv-interrupt: disable device removal interrupt.\n"); + printf(" --bitrate-stats=N: set the logical core N to perform " + "bit-rate calculation.\n"); } #ifdef RTE_LIBRTE_CMDLINE @@ -536,6 +538,9 @@ launch_args_parse(int argc, char** argv) #ifdef RTE_LIBRTE_LATENCY_STATS { "latencystats", 1, 0, 0 }, #endif +#ifdef RTE_LIBRTE_BITRATE + { "bitrate-stats", 1, 0, 0 }, +#endif { "disable-crc-strip", 0, 0, 0 }, { "enable-lro", 0, 0, 0 }, { "enable-rx-cksum", 0, 0, 0 }, @@ -793,6 +798,18 @@ launch_args_parse(int argc, char** argv) " must be >= 0\n", n); } #endif +#ifdef RTE_LIBRTE_BITRATE + if (!strcmp(lgopts[opt_idx].name, "bitrate-stats")) { + n = atoi(optarg); + if (n >= 0) { + bitrate_lcore_id = (lcoreid_t) n; + bitrate_enabled = 1; + } else + rte_exit(EXIT_FAILURE, + "invalid lcore id %d for bitrate stats" + " must be >= 0\n", n); + } +#endif if (!strcmp(lgopts[opt_idx].name, "disable-crc-strip")) rx_mode.hw_strip_crc = 0; if (!strcmp(lgopts[opt_idx].name, "enable-lro")) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 3a57348..cfd5382 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -355,8 +355,12 @@ uint16_t nb_rx_queue_stats_mappings = 0; unsigned max_socket = 0; +#ifdef RTE_LIBRTE_BITRATE /* Bitrate statistics */ struct rte_stats_bitrates *bitrate_data; +lcoreid_t bitrate_lcore_id; +uint8_t bitrate_enabled; +#endif /* Forward function declarations */ static void map_port_queue_stats_mapping_registers(uint8_t pi, struct rte_port *port); @@ -962,12 +966,18 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd) for (sm_id = 0; sm_id < nb_fs; sm_id++) (*pkt_fwd)(fsm[sm_id]); #ifdef RTE_LIBRTE_BITRATE - tics_current = rte_rdtsc(); - if (tics_current - tics_datum >= tics_per_1sec) { - /* Periodic bitrate calculation */ - for (idx_port = 0; idx_port < cnt_ports; idx_port++) - rte_stats_bitrate_calc(bitrate_data, idx_port); - tics_datum = tics_current; + if (bitrate_enabled != 0 && + bitrate_lcore_id == rte_lcore_id()) { + tics_current = rte_rdtsc(); + if (tics_current - tics_datum >= tics_per_1sec) { + /* Periodic bitrate calculation */ + for (idx_port = 0; + idx_port < cnt_ports; + idx_port++) + rte_stats_bitrate_calc(bitrate_data, + idx_port); + tics_datum = tics_current; + } } #endif #ifdef RTE_LIBRTE_LATENCY_STATS @@ -2238,6 +2248,9 @@ main(int argc, char** argv) rte_panic("Empty set of forwarding logical cores - check the " "core mask supplied in the command parameters\n"); + /* Bitrate stats disabled by default */ + bitrate_enabled = 0; + argc -= diag; argv += diag; if (argc > 1) @@ -2275,10 +2288,13 @@ main(int argc, char** argv) /* Setup bitrate stats */ #ifdef RTE_LIBRTE_BITRATE - bitrate_data = rte_stats_bitrate_create(); - if (bitrate_data == NULL) - rte_exit(EXIT_FAILURE, "Could not allocate bitrate data.\n"); - rte_stats_bitrate_reg(bitrate_data); + if (bitrate_enabled != 0) { + bitrate_data = rte_stats_bitrate_create(); + if (bitrate_data == NULL) + rte_exit(EXIT_FAILURE, + "Could not allocate bitrate data.\n"); + rte_stats_bitrate_reg(bitrate_data); + } #endif diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index a9ff07e..6443f7e 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -380,6 +380,11 @@ extern uint8_t latencystats_enabled; extern lcoreid_t latencystats_lcore_id; #endif +#ifdef RTE_LIBRTE_BITRATE +extern lcoreid_t bitrate_lcore_id; +extern uint8_t bitrate_enabled; +#endif + extern struct rte_fdir_conf fdir_conf; /* diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index df5a0ee..b9be1e6 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -465,3 +465,7 @@ The commandline options are: * ``--disable-link-check`` Disable check on link status when starting/stopping ports. + +* ``--bitrate-stats=N`` + + Set the logical core N to perform bitrate calculation. -- 2.7.4