DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jerin Jacob <jerinjacobk@gmail.com>
To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Cc: dpdk-dev <dev@dpdk.org>, Ali Alnubani <alialnu@mellanox.com>,
	orgerlitz@mellanox.com,  Wenzhuo Lu <wenzhuo.lu@intel.com>,
	Beilei Xing <beilei.xing@intel.com>,
	 Bernard Iremonger <bernard.iremonger@intel.com>,
	Hemant Agrawal <hemant.agrawal@nxp.com>,
	 Jerin Jacob <jerinj@marvell.com>,
	Slava Ovsiienko <viacheslavo@mellanox.com>,
	 Thomas Monjalon <thomas@monjalon.net>,
	 "Ruifeng Wang (Arm Technology China)" <ruifeng.wang@arm.com>,
	Phil Yang <phil.yang@arm.com>, nd <nd@arm.com>,
	 Zhihong Wang <zhihong.wang@intel.com>,
	dpdk stable <stable@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 1/5] app/testpmd: clock gettime call in throughput calculation
Date: Wed, 17 Jun 2020 20:46:16 +0530
Message-ID: <CALBAE1NMmLEfMyky2in3JDjGT9U1sh2UciBAAXRo9Ug8jUpnOw@mail.gmail.com> (raw)
In-Reply-To: <20200617144307.9961-1-honnappa.nagarahalli@arm.com>

On Wed, Jun 17, 2020 at 8:13 PM Honnappa Nagarahalli
<honnappa.nagarahalli@arm.com> wrote:
>
> The throughput calculation requires a counter that measures
> passing of time. The PMU cycle counter does not do that. This


It is not clear from git commit on why PMU cycle counter does not do that?
On dpdk bootup, we are figuring out the Hz value based on PMU counter cycles.
What is the missing piece here?

IMO, PMU counter should have less latency and more granularity than
clock_getime.

> results in incorrect throughput numbers when
> RTE_ARM_EAL_RDTSC_USE_PMU is enabled. Use clock_gettime
> system call to calculate the time passed since last call.
>
> Bugzilla ID: 450
> Fixes: 0e106980301d ("app/testpmd: show throughput in port stats")
> Cc: zhihong.wang@intel.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Reviewed-by: Phil Yang <phil.yang@arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> ---
>  app/test-pmd/config.c | 44 +++++++++++++++++++++++++++++--------------
>  1 file changed, 30 insertions(+), 14 deletions(-)
>
> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
> index 016bcb09c..91fbf99f8 100644
> --- a/app/test-pmd/config.c
> +++ b/app/test-pmd/config.c
> @@ -54,6 +54,14 @@
>
>  #define ETHDEV_FWVERS_LEN 32
>
> +#ifdef CLOCK_MONOTONIC_RAW /* Defined in glibc bits/time.h */
> +#define CLOCK_TYPE_ID CLOCK_MONOTONIC_RAW
> +#else
> +#define CLOCK_TYPE_ID CLOCK_MONOTONIC
> +#endif
> +
> +#define NS_PER_SEC 1E9
> +
>  static char *flowtype_to_str(uint16_t flow_type);
>
>  static const struct {
> @@ -136,9 +144,10 @@ nic_stats_display(portid_t port_id)
>         static uint64_t prev_pkts_tx[RTE_MAX_ETHPORTS];
>         static uint64_t prev_bytes_rx[RTE_MAX_ETHPORTS];
>         static uint64_t prev_bytes_tx[RTE_MAX_ETHPORTS];
> -       static uint64_t prev_cycles[RTE_MAX_ETHPORTS];
> +       static uint64_t prev_ns[RTE_MAX_ETHPORTS];
> +       struct timespec cur_time;
>         uint64_t diff_pkts_rx, diff_pkts_tx, diff_bytes_rx, diff_bytes_tx,
> -                                                               diff_cycles;
> +                                                               diff_ns;
>         uint64_t mpps_rx, mpps_tx, mbps_rx, mbps_tx;
>         struct rte_eth_stats stats;
>         struct rte_port *port = &ports[port_id];
> @@ -195,10 +204,17 @@ nic_stats_display(portid_t port_id)
>                 }
>         }
>
> -       diff_cycles = prev_cycles[port_id];
> -       prev_cycles[port_id] = rte_rdtsc();
> -       if (diff_cycles > 0)
> -               diff_cycles = prev_cycles[port_id] - diff_cycles;
> +       diff_ns = 0;
> +       if (clock_gettime(CLOCK_TYPE_ID, &cur_time) == 0) {
> +               uint64_t ns;
> +
> +               ns = cur_time.tv_sec * NS_PER_SEC;
> +               ns += cur_time.tv_nsec;
> +
> +               if (prev_ns[port_id] != 0)
> +                       diff_ns = ns - prev_ns[port_id];
> +               prev_ns[port_id] = ns;
> +       }
>
>         diff_pkts_rx = (stats.ipackets > prev_pkts_rx[port_id]) ?
>                 (stats.ipackets - prev_pkts_rx[port_id]) : 0;
> @@ -206,10 +222,10 @@ nic_stats_display(portid_t port_id)
>                 (stats.opackets - prev_pkts_tx[port_id]) : 0;
>         prev_pkts_rx[port_id] = stats.ipackets;
>         prev_pkts_tx[port_id] = stats.opackets;
> -       mpps_rx = diff_cycles > 0 ?
> -               diff_pkts_rx * rte_get_tsc_hz() / diff_cycles : 0;
> -       mpps_tx = diff_cycles > 0 ?
> -               diff_pkts_tx * rte_get_tsc_hz() / diff_cycles : 0;
> +       mpps_rx = diff_ns > 0 ?
> +               (double)diff_pkts_rx / diff_ns * NS_PER_SEC : 0;
> +       mpps_tx = diff_ns > 0 ?
> +               (double)diff_pkts_tx / diff_ns * NS_PER_SEC : 0;
>
>         diff_bytes_rx = (stats.ibytes > prev_bytes_rx[port_id]) ?
>                 (stats.ibytes - prev_bytes_rx[port_id]) : 0;
> @@ -217,10 +233,10 @@ nic_stats_display(portid_t port_id)
>                 (stats.obytes - prev_bytes_tx[port_id]) : 0;
>         prev_bytes_rx[port_id] = stats.ibytes;
>         prev_bytes_tx[port_id] = stats.obytes;
> -       mbps_rx = diff_cycles > 0 ?
> -               diff_bytes_rx * rte_get_tsc_hz() / diff_cycles : 0;
> -       mbps_tx = diff_cycles > 0 ?
> -               diff_bytes_tx * rte_get_tsc_hz() / diff_cycles : 0;
> +       mbps_rx = diff_ns > 0 ?
> +               (double)diff_bytes_rx / diff_ns * NS_PER_SEC : 0;
> +       mbps_tx = diff_ns > 0 ?
> +               (double)diff_bytes_tx / diff_ns * NS_PER_SEC : 0;
>
>         printf("\n  Throughput (since last show)\n");
>         printf("  Rx-pps: %12"PRIu64"          Rx-bps: %12"PRIu64"\n  Tx-pps: %12"
> --
> 2.17.1
>

  parent reply	other threads:[~2020-06-17 15:16 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-17 14:43 Honnappa Nagarahalli
2020-06-17 14:43 ` [dpdk-dev] [PATCH 2/5] app/testpmd: enable burst stats for flowgen mode rx path Honnappa Nagarahalli
2020-06-18 14:57   ` Phil Yang
2020-06-17 14:43 ` [dpdk-dev] [PATCH 3/5] app/testpmd: enable burst stats for noisy vnf mode Honnappa Nagarahalli
2020-06-18  7:16   ` Jens Freimann
2020-06-17 14:43 ` [dpdk-dev] [PATCH 4/5] app/testpmd: fix burst percentage calculation Honnappa Nagarahalli
2020-06-18 15:01   ` Phil Yang
2020-06-23 13:33   ` Ali Alnubani
2020-06-17 14:43 ` [dpdk-dev] [PATCH 5/5] app/testpmd: enable empty polls in burst stats Honnappa Nagarahalli
2020-06-18 15:05   ` Phil Yang
2020-06-23 13:34   ` Ali Alnubani
2020-06-17 15:16 ` Jerin Jacob [this message]
2020-06-18  4:03   ` [dpdk-dev] [PATCH 1/5] app/testpmd: clock gettime call in throughput calculation Honnappa Nagarahalli
2020-06-18 10:16     ` Jerin Jacob
2020-06-18 15:08 ` Phil Yang
2020-06-23 13:33 ` Ali Alnubani
2020-06-26 22:09 ` [dpdk-dev] [PATCH v2 " Honnappa Nagarahalli
2020-06-26 22:09   ` [dpdk-dev] [PATCH v2 2/5] app/testpmd: enable burst stats for flowgen mode rx path Honnappa Nagarahalli
2020-07-06 16:02     ` Ferruh Yigit
2020-07-06 17:06       ` Honnappa Nagarahalli
2020-07-06 17:17         ` Ferruh Yigit
2020-07-06 18:46           ` Honnappa Nagarahalli
2020-06-26 22:09   ` [dpdk-dev] [PATCH v2 3/5] app/testpmd: enable burst stats for noisy vnf mode Honnappa Nagarahalli
2020-07-06 16:08     ` Ferruh Yigit
2020-07-06 16:59       ` Honnappa Nagarahalli
2020-07-06 17:11         ` Ferruh Yigit
2020-07-06 17:41           ` Honnappa Nagarahalli
2020-06-26 22:09   ` [dpdk-dev] [PATCH v2 4/5] app/testpmd: fix burst percentage calculation Honnappa Nagarahalli
2020-07-06 16:10     ` Ferruh Yigit
2020-06-26 22:09   ` [dpdk-dev] [PATCH v2 5/5] app/testpmd: enable empty polls in burst stats Honnappa Nagarahalli
2020-07-06 17:05     ` Ferruh Yigit
2020-07-06 19:11       ` Honnappa Nagarahalli
2020-07-07  9:32         ` Ferruh Yigit
2020-07-06 15:36   ` [dpdk-dev] [PATCH v2 1/5] app/testpmd: clock gettime call in throughput calculation Ferruh Yigit
2020-07-06 16:53     ` Honnappa Nagarahalli
2020-07-06 17:19       ` Ferruh Yigit
2020-07-06 23:32 ` [dpdk-dev] [PATCH v3 1/3] " Honnappa Nagarahalli
2020-07-06 23:32   ` [dpdk-dev] [PATCH v3 2/3] app/testpmd: fix burst percentage calculation Honnappa Nagarahalli
2020-07-06 23:32   ` [dpdk-dev] [PATCH v3 3/3] app/testpmd: enable empty polls in burst stats Honnappa Nagarahalli
2020-07-07 17:47   ` [dpdk-dev] [PATCH v3 1/3] app/testpmd: clock gettime call in throughput calculation Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CALBAE1NMmLEfMyky2in3JDjGT9U1sh2UciBAAXRo9Ug8jUpnOw@mail.gmail.com \
    --to=jerinjacobk@gmail.com \
    --cc=alialnu@mellanox.com \
    --cc=beilei.xing@intel.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=jerinj@marvell.com \
    --cc=nd@arm.com \
    --cc=orgerlitz@mellanox.com \
    --cc=phil.yang@arm.com \
    --cc=ruifeng.wang@arm.com \
    --cc=stable@dpdk.org \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@mellanox.com \
    --cc=wenzhuo.lu@intel.com \
    --cc=zhihong.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git