From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6CF0AA00C2; Sun, 26 Apr 2020 03:58:30 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 781061BFBF; Sun, 26 Apr 2020 03:58:29 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 5E4491BFA1 for ; Sun, 26 Apr 2020 03:58:27 +0200 (CEST) IronPort-SDR: dCX+jsWxeRD2U/Z508E+wzJ/NPvnVsvY+4yJy/98Q+ruFsQi/bRkyW3+UBrgS9tbcSc4HxasmB EuDsgpi7MKBQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2020 18:58:26 -0700 IronPort-SDR: lKAXRgKShWDAIiHY8skWGClEIT16FVUm1oyJoqQZzBXFM66V5Hr0HjqtVNEdWh2vyc/vDVJqQj +Cds7YQg8HIg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,318,1583222400"; d="scan'208";a="458377678" Received: from sfoy-mobl3.ger.corp.intel.com (HELO [10.213.192.193]) ([10.213.192.193]) by fmsmga006.fm.intel.com with ESMTP; 25 Apr 2020 18:58:25 -0700 To: "Wei Hu (Xavier)" , dev@dpdk.org References: <20200424110750.42456-1-huwei013@chinasoftinc.com> <1d83b9c8-a722-48db-18e5-b01a4bb382bb@intel.com> From: Ferruh Yigit Autocrypt: addr=ferruh.yigit@intel.com; prefer-encrypt=mutual; keydata= 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 dYuOYKR9nbPv+2zK9pwwQ2NXbUBystaGyQ== Message-ID: <4f421cd0-fb97-115e-7987-b19a14c6bb47@intel.com> Date: Sun, 26 Apr 2020 02:58:24 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH] app/testpmd: fix Rx/Tx stats after clear stats command 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" On 4/26/2020 2:36 AM, Wei Hu (Xavier) wrote: > Hi, Ferruh Yigit > > On 2020/4/25 0:12, Ferruh Yigit wrote: >> On 4/24/2020 12:07 PM, Wei Hu (Xavier) wrote: >>> From: Chengwen Feng >>> >>> Currently, when running start/clear stats&xstats/stop command many times >>> based on testpmd application, there are incorrect RX/TX-packets stats as >>> below: >>> ---------------------- Forward statistics for port 0 -------------- >>> RX-packets: 18446744073709544808 RX-dropped: 0 ...ignore >>> TX-packets: 18446744073709536616 TX-dropped: 0 ...ignore >>> -------------------------------------------------------------------- >>> >>> The root cause as below: >>> 1. The struct rte_port of testpmd.h has a member variable >>> "struct rte_eth_stats stats" to store the last port statistics. >>> 2. When runnig start command, it execute cmd_start_parsed -> >>> start_packet_forwarding -> fwd_stats_reset, which call rte_eth_stats_get >>> API function to save current port statistics. >>> 3. When running stop command, it execute fwd_stats_display, which call >>> rte_eth_stats_get to get current port statistics, and then minus last >>> port statistics. >>> 4. If we run clear stats or xstats after start command, then run stop, >>> it may display above incorrect stats because the current Rx/Tx-packets >>> is lower than the last saved RX/TX-packets(uint64_t overflow). >> >> Looks like valid issue. >> >> Can you please update the title to mention this fixes the forward stats (to >> prevent the misunderstanding that issue is in the port stats). >> >> Also can you please update the documentation >> (doc/guides/testpmd_app_ug/testpmd_funcs.rst), "clear port" command to say this >> will also affect the forward stats output (show fwd)? >> > OK, Thanks for your comments. > I will send V2. > > Regards > Xavier >>> >>> This patch fixes it by clearing last port statistics when executing >>> "clear stats/xstats" command. >>> >>> Fixes: af75078fece3 ("first public release") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Chengwen Feng >>> Signed-off-by: Wei Hu (Xavier) >>> --- >>> app/test-pmd/config.c | 11 +++++++++++ >>> 1 file changed, 11 insertions(+) >>> >>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c >>> index 72f25d152..0d2375607 100644 >>> --- a/app/test-pmd/config.c >>> +++ b/app/test-pmd/config.c >>> @@ -234,10 +234,16 @@ nic_stats_display(portid_t port_id) >>> void >>> nic_stats_clear(portid_t port_id) >>> { >>> + struct rte_port *port; >>> + >>> if (port_id_is_invalid(port_id, ENABLED_WARN)) { >>> print_valid_ports(); >>> return; >>> } >>> + >>> + port = &ports[port_id]; >>> + /* clear last port statistics because eth stats reset */ >>> + memset(&port->stats, 0, sizeof(port->stats)); >> >> "clear fwd stats" command does same thing in "fwd_stats_reset()" as: >> rte_eth_stats_get(pt_id, &ports[pt_id].stats); >> >> I suggest doing same here for consistency, but it should be after >> 'rte_eth_stats_reset()' in that case. What do you think about above comment? >> >>> rte_eth_stats_reset(port_id); >>> printf("\n NIC statistics for port %d cleared\n", port_id); >>> } >>> @@ -308,12 +314,17 @@ nic_xstats_display(portid_t port_id) >>> void >>> nic_xstats_clear(portid_t port_id) >>> { >>> + struct rte_port *port; >>> int ret; >>> >>> if (port_id_is_invalid(port_id, ENABLED_WARN)) { >>> print_valid_ports(); >>> return; >>> } >>> + >>> + port = &ports[port_id]; >>> + /* clear last port statistics because eth xstats(include stats) reset */ >>> + memset(&port->stats, 0, sizeof(port->stats)); >>> ret = rte_eth_xstats_reset(port_id); >>> if (ret != 0) { >>> printf("%s: Error: failed to reset xstats (port %u): %s", >>>