All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ananyev, Konstantin" <konstantin.ananyev-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: "stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org"
	<stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>,
	"dev-VfR2kkLFssw@public.gmane.org"
	<dev-VfR2kkLFssw@public.gmane.org>
Cc: Stephen Hemminger <shemming-43mecJUBy8ZBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [PATCH] ixgbe: do not include CRC in Tx byte count
Date: Mon, 23 Mar 2015 16:45:44 +0000	[thread overview]
Message-ID: <2601191342CEEE43887BDE71AB9772582140700B@irsmsx105.ger.corp.intel.com> (raw)
In-Reply-To: <1421994224-2127-1-git-send-email-stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>



> -----Original Message-----
> From: dev [mailto:dev-bounces-VfR2kkLFssw@public.gmane.org] On Behalf Of stephen@networkplumber.org
> Sent: Friday, January 23, 2015 6:24 AM
> To: dev-VfR2kkLFssw@public.gmane.org
> Cc: Stephen Hemminger
> Subject: [dpdk-dev] [PATCH] ixgbe: do not include CRC in Tx byte count
> 
> From: Stephen Hemminger <shemming-43mecJUBy8ZBDgjK7y7TUQ@public.gmane.org>
> 
> The ixgbe driver was including CRC in the transmit packet byte
> count, but not for packets received.
> This was notice when forwarding and
> the number of bytes received was greater than the number of bytes transmitted
> for the same number of packets. Make the driver behave like other
> virtual devices and not include CRC in byte count. Use the same queue
> counters already computed and used for Rx.

About RX side stats - as I remember it depends to what value hw_stip_crc is set at configure().
If hw_stip_crc==1, then, yes CRC bytes are not included into  QBRC value.
I If hw_stip_crc==0, then CRC bytes are included into QBRC. 

I.E:
./dpdk.org/x86_64-native-linuxapp-gcc/app/testpmd -c ff -n 4 -w 86:00.1 -- -i --tx-queue-stats-mapping='(0,0,0)' --rx-queue-stats-mapping='(0,0,0)' --crc-strip
testpmd> start
testpmd> show port stats all

######################## NIC statistics for port 0  ########################
  RX-packets:                       1    RX-errors:          0    RX-bytes:         60       // sum of QBRC[]
  RX-badcrc:                        0    RX-badlen:          0  RX-errors:           0
  RX-nombuf:                        0
  TX-packets:                       1    TX-errors:          0    TX-bytes:         64  //GOTC

  Stats reg  0 RX-packets:          1    RX-errors:          0    RX-bytes:         60 //QBRC[0]
  ...

  Stats reg  0 TX-packets:          1                             TX-bytes:         60   // QBTC[0]
   ############################################################################


./dpdk.org/x86_64-native-linuxapp-gcc/app/testpmd -c ff -n 4 -w 86:00.1 -- -i --tx-queue-stats-mapping='(0,0,0)' --rx-queue-stats-mapping='(0,0,0)'
testpmd> start
testpmd> show port stats all

  ######################## NIC statistics for port 0  ########################
  RX-packets:                       1    RX-errors:          0    RX-bytes:         64  // sum of QBRC[]
  RX-badcrc:                        0    RX-badlen:          0  RX-errors:           0
  RX-nombuf:                        0
  TX-packets:                       1    TX-errors:          0    TX-bytes:         64  //GOTC

  Stats reg  0 RX-packets:          1    RX-errors:          0    RX-bytes:         64 //QBRC[0]
  ....

  Stats reg  0 TX-packets:          1                             TX-bytes:         60  // QBTC[0]
    ############################################################################

So now, number of RX/TX stat bytes for simple forwarding are equal when hw_stip_crc==0 and
differ when hw_stip_crc==1,
With your change, as I understand, it would be visa-versa.
I don' t mind changing it yours way, but wonder why that is any better?
Probably the proper patch, should also do something like that:
stats->ibytes = total_qbrc - stats->ipackets  * dev->data->dev_conf. hw_strip_crc * CRC_LEN;
too? 

About using sum of QBRC[] for stats.ibytes instead of GORC, I think the initial reason was:

http://www.intel.com/content/www/us/en/ethernet-controllers/82599-10-gbe-controller-spec-update.html:
7 GPRC and GORCL/H Also Count Missed Packets
Problem:
GPRC (Good Packets Received Count) and GORCL/H (Good Octets Received Count) count missed
packets and missed packets bytes; this is not consistent with previous products.
Implication:
None.
331521-002 23
Errata-Intel(r) 82599 10 GbE Controller
Workaround:
Statistics are available indirectly for these registers. This workaround is included in Intel drivers.
* For GPRC - Subtract MPC (Missed Packet Count) from GPRC. Alternatively, use QPRC.
* For GORCL/H - use QBRCL/H (Quad Bytes Received).

Konstantin

> 
> Signed-off-by: Stephen Hemminger <stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
> ---
>  lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
> index b58ec45..27355eb 100644
> --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
> +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
> @@ -1724,12 +1724,15 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
>  	struct ixgbe_hw_stats *hw_stats =
>  			IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
>  	uint32_t bprc, lxon, lxoff, total;
> -	uint64_t total_missed_rx, total_qbrc, total_qprc;
> +	uint64_t total_missed_rx;
> +	uint64_t total_qbrc, total_qprc, total_qbtc, total_qptc;
>  	unsigned i;
> 
>  	total_missed_rx = 0;
>  	total_qbrc = 0;
>  	total_qprc = 0;
> +	total_qbtc = 0;
> +	total_qptc = 0;
> 
>  	hw_stats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
>  	hw_stats->illerrc += IXGBE_READ_REG(hw, IXGBE_ILLERRC);
> @@ -1770,6 +1773,8 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
> 
>  		total_qprc += hw_stats->qprc[i];
>  		total_qbrc += hw_stats->qbrc[i];
> +		total_qptc += hw_stats->qptc[i];
> +		total_qbtc += hw_stats->qbtc[i];
>  	}
>  	hw_stats->mlfc += IXGBE_READ_REG(hw, IXGBE_MLFC);
>  	hw_stats->mrfc += IXGBE_READ_REG(hw, IXGBE_MRFC);
> @@ -1860,8 +1865,8 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
>  	/* Fill out the rte_eth_stats statistics structure */
>  	stats->ipackets = total_qprc;
>  	stats->ibytes = total_qbrc;
> -	stats->opackets = hw_stats->gptc;
> -	stats->obytes = hw_stats->gotc;
> +	stats->opackets = total_qptc;
> +	stats->obytes = total_qbtc;
>  	stats->imcasts = hw_stats->mprc;
> 
>  	for (i = 0; i < IXGBE_QUEUE_STAT_COUNTERS; i++) {
> --
> 2.1.4

  parent reply	other threads:[~2015-03-23 16:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-23  6:23 [PATCH] ixgbe: do not include CRC in Tx byte count stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ
     [not found] ` <1421994224-2127-1-git-send-email-stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
2015-01-27 10:11   ` Thomas Monjalon
2015-01-27 11:38     ` Stephen Hemminger
     [not found]       ` <20150127113847.3d4d32a0-CA4OZQ/Yy2Lykuyl+CZolw@public.gmane.org>
2015-03-04 20:55         ` Thomas Monjalon
     [not found]       ` <9265c0d3b03e4f33b7823139be7b3b91@BRMWP-EXMB11.corp.brocade.com>
     [not found]         ` <9265c0d3b03e4f33b7823139be7b3b91-sI283RzA5cMA50eAn2D9H4CDckiq/fhJZeezCHUQhQ4@public.gmane.org>
2015-03-04 23:06           ` Stephen Hemminger
2015-03-23 14:08   ` Thomas Monjalon
2015-03-23 16:45   ` Ananyev, Konstantin [this message]
     [not found]     ` <2601191342CEEE43887BDE71AB9772582140700B-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-03-24 15:55       ` Stephen Hemminger
2015-04-02 20:20         ` Butler, Siobhan A
2015-03-24 23:54 Ananyev, Konstantin
     [not found] ` <2601191342CEEE43887BDE71AB977258214074F6-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-04-01  7:45   ` Thomas Monjalon
2015-07-09 23:03     ` Stephen Hemminger
     [not found] ` <c8d4fd5c400c4beaa4577b8b1069fe04@BRMWP-EXMB12.corp.brocade.com>
     [not found]   ` <c8d4fd5c400c4beaa4577b8b1069fe04-sI283RzA5cNU5qdSg20wvYCDckiq/fhJZeezCHUQhQ4@public.gmane.org>
2015-04-01 18:36     ` Stephen Hemminger
2015-07-09 22:59       ` Thomas Monjalon

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=2601191342CEEE43887BDE71AB9772582140700B@irsmsx105.ger.corp.intel.com \
    --to=konstantin.ananyev-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    --cc=shemming-43mecJUBy8ZBDgjK7y7TUQ@public.gmane.org \
    --cc=stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.