From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailfilter01.viettel.com.vn (mailfilter01.viettel.com.vn [125.235.240.53]) by dpdk.org (Postfix) with ESMTP id 1AB2C255 for ; Sat, 22 Sep 2018 04:58:30 +0200 (CEST) X-IronPort-AV: E=Sophos;i="5.54,287,1534784400"; d="scan'208";a="94927700" Received: from 125.235.240.44.adsl.viettel.vn (HELO mta1.viettel.com.vn) ([125.235.240.44]) by mailfilter01.viettel.com.vn with ESMTP; 22 Sep 2018 09:58:29 +0700 Received: from localhost (localhost [127.0.0.1]) by mta1.viettel.com.vn (Postfix) with ESMTP id EFB6F60E790; Sat, 22 Sep 2018 09:58:24 +0700 (ICT) Received: from mta1.viettel.com.vn ([127.0.0.1]) by localhost (mta1.viettel.com.vn [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id rkFLHsOqvFcs; Sat, 22 Sep 2018 09:58:24 +0700 (ICT) Received: from localhost (localhost [127.0.0.1]) by mta1.viettel.com.vn (Postfix) with ESMTP id CC53F60E8E1; Sat, 22 Sep 2018 09:58:24 +0700 (ICT) X-Virus-Scanned: amavisd-new at Received: from mta1.viettel.com.vn ([127.0.0.1]) by localhost (mta1.viettel.com.vn [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id u12odaKlOVXP; Sat, 22 Sep 2018 09:58:24 +0700 (ICT) Received: from ANMLONGTB5 (unknown [27.68.241.28]) by mta1.viettel.com.vn (Postfix) with ESMTPSA id 91BF660E790; Sat, 22 Sep 2018 09:58:24 +0700 (ICT) To: , , References: <1537545703-9599-1-git-send-email-reshma.pattan@intel.com> In-Reply-To: <1537545703-9599-1-git-send-email-reshma.pattan@intel.com> Message-ID: <000201d45221$394a8350$abdf89f0$@viettel.com.vn> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQEZSjJHjKzSgdwHO1OVrBYHKtcySqZxpkXA Content-Language: en-us MilterAction: FORWARD Date: Sat, 22 Sep 2018 09:58:24 +0700 (ICT) From: longtb5@viettel.com.vn Subject: Re: [dpdk-dev] [PATCH] latencystats: fix timestamp marking and latency calculation 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: Sat, 22 Sep 2018 02:58:31 -0000 Hi Reshma, > -----Original Message----- > From: reshma.pattan@intel.com [mailto:reshma.pattan@intel.com] > Sent: Friday, September 21, 2018 11:02 PM > To: longtb5@viettel.com.vn; konstantin.ananyev@intel.com; dev@dpdk.org > Cc: Reshma Pattan > Subject: [PATCH] latencystats: fix timestamp marking and latency calculation > > Latency calculation logic is not correct for the case where packets gets > dropped before TX. As for the dropped packets, the timestamp is not > cleared, and such packets still gets counted for latency calculation in next > runs, that will result in inaccurate latency measurement. > > So fix this issue as below, > > Before setting timestamp in mbuf, check mbuf don't have any prior valid > time stamp flag set and after marking the timestamp, set mbuf flags to > indicate timestamp is valid. > > Before calculating timestamp check mbuf flags are set to indicate timestamp > is valid. > This solution as suggested by Konstantin is great. Not only does it solve the problem but also now the usage of mbuf->timestamp is not exclusive to latencystats anymore. The application can make use of timestamp at the same as latencystats simply by toggling PKT_RX_TIMESTAMP. I think we should update the doc to include this information. > With the above logic it is guaranteed that correct timestamps have been > used. > > Fixes: 5cd3cac9ed ("latency: added new library for latency stats") > > Reported-by: Bao-Long Tran > Signed-off-by: Reshma Pattan > --- > lib/librte_latencystats/rte_latencystats.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_latencystats/rte_latencystats.c > b/lib/librte_latencystats/rte_latencystats.c > index 1fdec68e3..8870226bb 100644 > --- a/lib/librte_latencystats/rte_latencystats.c > +++ b/lib/librte_latencystats/rte_latencystats.c > @@ -125,8 +125,11 @@ add_time_stamps(uint16_t pid __rte_unused, > for (i = 0; i < nb_pkts; i++) { > diff_tsc = now - prev_tsc; > timer_tsc += diff_tsc; > - if (timer_tsc >= samp_intvl) { > + > + if ((pkts[i]->ol_flags & PKT_RX_TIMESTAMP) == 0 > + && (timer_tsc >= samp_intvl)) { > pkts[i]->timestamp = now; > + pkts[i]->ol_flags |= PKT_RX_TIMESTAMP; > timer_tsc = 0; > } > prev_tsc = now; > @@ -156,7 +159,8 @@ calc_latency(uint16_t pid __rte_unused, > > now = rte_rdtsc(); > for (i = 0; i < nb_pkts; i++) { > - if (pkts[i]->timestamp) > + if ((pkts[i]->ol_flags & PKT_RX_TIMESTAMP) && > + pkts[i]->timestamp) Just a nit, but I think we don't have to check for pkts[i]->timestamp here. > latency[cnt++] = now - pkts[i]->timestamp; > } > > -- > 2.14.4 Best regards, BL