* [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets @ 2014-05-22 18:28 David Marchand [not found] ` <1400783309-14666-1-git-send-email-david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: David Marchand @ 2014-05-22 18:28 UTC (permalink / raw) To: dev-VfR2kkLFssw From: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> Split input error stats to have a better understanding of why packets have been dropped. Keep ierrors field untouched for backward compatibility. Signed-off-by: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> --- app/test-pmd/config.c | 24 +++++++++++++++++------- app/test-pmd/testpmd.c | 32 ++++++++++++++++++++------------ examples/load_balancer/runtime.c | 2 +- lib/librte_ether/rte_ethdev.h | 3 +++ lib/librte_pmd_e1000/em_ethdev.c | 9 +++++++-- lib/librte_pmd_e1000/igb_ethdev.c | 9 +++++++-- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 12 +++++++++--- 7 files changed, 64 insertions(+), 27 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 89aa8b2..d3934e5 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -126,19 +126,29 @@ nic_stats_display(portid_t port_id) nic_stats_border, port_id, nic_stats_border); if ((!port->rx_queue_stats_mapping_enabled) && (!port->tx_queue_stats_mapping_enabled)) { - printf(" RX-packets: %-10"PRIu64" RX-errors: %-10"PRIu64"RX-bytes: " - "%-"PRIu64"\n" - " TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64"TX-bytes: " + printf(" RX-packets: %-10"PRIu64" RX-missed: %-10"PRIu64" RX-bytes: " + "%-"PRIu64"\n", + stats.ipackets, stats.imissed, stats.ibytes); + printf(" RX-badcrc: %-10"PRIu64" RX-badlen: %-10"PRIu64" RX-errors: " + "%-"PRIu64"\n", + stats.ibadcrc, stats.ibadlen, stats.ierrors); + printf(" RX-nombuf: %-10"PRIu64"\n", + stats.rx_nombuf); + printf(" TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64" TX-bytes: " "%-"PRIu64"\n", - stats.ipackets, stats.ierrors, stats.ibytes, stats.opackets, stats.oerrors, stats.obytes); } else { printf(" RX-packets: %10"PRIu64" RX-errors: %10"PRIu64 - " RX-bytes: %10"PRIu64"\n" - " TX-packets: %10"PRIu64" TX-errors: %10"PRIu64 + " RX-bytes: %10"PRIu64"\n", + stats.ipackets, stats.ierrors, stats.ibytes); + printf(" RX-badcrc: %10"PRIu64" RX-badlen: %10"PRIu64 + " RX-errors: %10"PRIu64"\n", + stats.ibadcrc, stats.ibadlen, stats.ierrors); + printf(" RX-nombuf: %10"PRIu64"\n", + stats.rx_nombuf); + printf(" TX-packets: %10"PRIu64" TX-errors: %10"PRIu64 " TX-bytes: %10"PRIu64"\n", - stats.ipackets, stats.ierrors, stats.ibytes, stats.opackets, stats.oerrors, stats.obytes); } diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index bc38305..ac8c9f3 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -770,8 +770,8 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) if ((!port->rx_queue_stats_mapping_enabled) && (!port->tx_queue_stats_mapping_enabled)) { printf(" RX-packets: %-14"PRIu64" RX-dropped: %-14"PRIu64"RX-total: " "%-"PRIu64"\n", - stats->ipackets, stats->ierrors, - (uint64_t) (stats->ipackets + stats->ierrors)); + stats->ipackets, stats->imissed, + (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %-14"PRIu64" \n", @@ -782,15 +782,19 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) stats->opackets, port->tx_dropped, (uint64_t) (stats->opackets + port->tx_dropped)); - if (stats->rx_nombuf > 0) - printf(" RX-nombufs: %-14"PRIu64"\n", stats->rx_nombuf); + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { + printf(" RX-badcrc: %-14"PRIu64" RX-badlen: %-14"PRIu64"RX-errors: %-"PRIu64"\n", + stats->ibadcrc, stats->ibadlen, stats->ierrors); + printf(" RX-nombufs: %-14"PRIu64"\n", + stats->rx_nombuf); + } } else { printf(" RX-packets: %14"PRIu64" RX-dropped:%14"PRIu64" RX-total:" "%14"PRIu64"\n", - stats->ipackets, stats->ierrors, - (uint64_t) (stats->ipackets + stats->ierrors)); + stats->ipackets, stats->imissed, + (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) printf(" Bad-ipcsum:%14"PRIu64" Bad-l4csum:%14"PRIu64"\n", @@ -800,9 +804,13 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) "%14"PRIu64"\n", stats->opackets, port->tx_dropped, (uint64_t) (stats->opackets + port->tx_dropped)); - - if (stats->rx_nombuf > 0) - printf(" RX-nombufs:%14"PRIu64"\n", stats->rx_nombuf); + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { + printf(" RX-badcrc: %14"PRIu64" RX-badlen: %14"PRIu64" RX-errors:" + "%"PRIu64"\n", + stats->ibadcrc, stats->ibadlen, stats->ierrors); + printf(" RX-nombufs: %14"PRIu64"\n", + stats->rx_nombuf); + } } /* Display statistics of XON/XOFF pause frames, if any. */ @@ -1164,8 +1172,8 @@ stop_packet_forwarding(void) port->stats.ibytes = 0; stats.obytes -= port->stats.obytes; port->stats.obytes = 0; - stats.ierrors -= port->stats.ierrors; - port->stats.ierrors = 0; + stats.imissed -= port->stats.imissed; + port->stats.imissed = 0; stats.oerrors -= port->stats.oerrors; port->stats.oerrors = 0; stats.rx_nombuf -= port->stats.rx_nombuf; @@ -1177,7 +1185,7 @@ stop_packet_forwarding(void) total_recv += stats.ipackets; total_xmit += stats.opackets; - total_rx_dropped += stats.ierrors; + total_rx_dropped += stats.imissed; total_tx_dropped += port->tx_dropped; total_rx_nombuf += stats.rx_nombuf; diff --git a/examples/load_balancer/runtime.c b/examples/load_balancer/runtime.c index e85abdb..6c63c26 100644 --- a/examples/load_balancer/runtime.c +++ b/examples/load_balancer/runtime.c @@ -215,7 +215,7 @@ app_lcore_io_rx( printf("I/O RX %u in (NIC port %u): NIC drop ratio = %.2f avg burst size = %.2f\n", lcore, (unsigned) port, - (double) stats.ierrors / (double) (stats.ierrors + stats.ipackets), + (double) stats.imissed / (double) (stats.imissed + stats.ipackets), ((double) lp->rx.nic_queues_count[i]) / ((double) lp->rx.nic_queues_iters[i])); lp->rx.nic_queues_iters[i] = 0; lp->rx.nic_queues_count[i] = 0; diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 4bf2383..d839b8c 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -186,6 +186,9 @@ struct rte_eth_stats { uint64_t opackets; /**< Total number of successfully transmitted packets.*/ uint64_t ibytes; /**< Total number of successfully received bytes. */ uint64_t obytes; /**< Total number of successfully transmitted bytes. */ + uint64_t imissed; /**< Total of RX missed packets (e.g full FIFO). */ + uint64_t ibadcrc; /**< Total of RX packets with CRC error. */ + uint64_t ibadlen; /**< Total of RX packets with bad length. */ uint64_t ierrors; /**< Total number of erroneous received packets. */ uint64_t oerrors; /**< Total number of failed transmitted packets. */ uint64_t imcasts; /**< Total number of multicast received packets. */ diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c index 493806c..2f0e1a0 100644 --- a/lib/librte_pmd_e1000/em_ethdev.c +++ b/lib/librte_pmd_e1000/em_ethdev.c @@ -793,8 +793,13 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) return; /* Rx Errors */ - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + - stats->ruc + stats->roc + stats->mpc + stats->cexterr; + rte_stats->ibadcrc = stats->crcerrs; + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; + rte_stats->imissed = stats->mpc; + rte_stats->ierrors = rte_stats->ibadcrc + + rte_stats->ibadlen + + rte_stats->imissed + + stats->rxerrc + stats->algnerrc + stats->cexterr; /* Tx Errors */ rte_stats->oerrors = stats->ecol + stats->latecol; diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c index 5f93bcf..777413e 100644 --- a/lib/librte_pmd_e1000/igb_ethdev.c +++ b/lib/librte_pmd_e1000/igb_ethdev.c @@ -1087,8 +1087,13 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) return; /* Rx Errors */ - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + - stats->ruc + stats->roc + stats->mpc + stats->cexterr; + rte_stats->ibadcrc = stats->crcerrs; + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; + rte_stats->imissed = stats->mpc; + rte_stats->ierrors = rte_stats->ibadcrc + + rte_stats->ibadlen + + rte_stats->imissed + + stats->rxerrc + stats->algnerrc + stats->cexterr; /* Tx Errors */ rte_stats->oerrors = stats->ecol + stats->latecol; diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index 327da0b..d1718e1 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -1702,9 +1702,15 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) } /* Rx Errors */ - stats->ierrors = total_missed_rx + hw_stats->crcerrs + - hw_stats->rlec; - + stats->ibadcrc = hw_stats->crcerrs; + stats->ibadlen = hw_stats->rlec + hw_stats->ruc + hw_stats->roc; + stats->imissed = total_missed_rx; + stats->ierrors = stats->ibadcrc + + stats->ibadlen + + stats->imissed + + hw_stats->illerrc + hw_stats->errbc; + + /* Tx Errors */ stats->oerrors = 0; /* XON/XOFF pause frames */ -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1400783309-14666-1-git-send-email-david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets [not found] ` <1400783309-14666-1-git-send-email-david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> @ 2014-06-11 14:19 ` De Lara Guarch, Pablo [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082C9DD7-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: De Lara Guarch, Pablo @ 2014-06-11 14:19 UTC (permalink / raw) To: David Marchand, dev-VfR2kkLFssw@public.gmane.org > -----Original Message----- > From: dev [mailto:dev-bounces-VfR2kkLFssw@public.gmane.org] On Behalf Of David Marchand > Sent: Thursday, May 22, 2014 7:28 PM > To: dev-VfR2kkLFssw@public.gmane.org > Subject: [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed, > badcrc and badlen packets > > From: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > Split input error stats to have a better understanding of why packets have > been > dropped. > Keep ierrors field untouched for backward compatibility. > > Signed-off-by: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > --- > app/test-pmd/config.c | 24 +++++++++++++++++------- > app/test-pmd/testpmd.c | 32 ++++++++++++++++++++------------ > examples/load_balancer/runtime.c | 2 +- > lib/librte_ether/rte_ethdev.h | 3 +++ > lib/librte_pmd_e1000/em_ethdev.c | 9 +++++++-- > lib/librte_pmd_e1000/igb_ethdev.c | 9 +++++++-- > lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 12 +++++++++--- > 7 files changed, 64 insertions(+), 27 deletions(-) > > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 89aa8b2..d3934e5 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -126,19 +126,29 @@ nic_stats_display(portid_t port_id) > nic_stats_border, port_id, nic_stats_border); > > if ((!port->rx_queue_stats_mapping_enabled) && (!port- > >tx_queue_stats_mapping_enabled)) { > - printf(" RX-packets: %-10"PRIu64" RX-errors: %- > 10"PRIu64"RX-bytes: " > - "%-"PRIu64"\n" > - " TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64"TX- > bytes: " > + printf(" RX-packets: %-10"PRIu64" RX-missed: %-10"PRIu64" > RX-bytes: " > + "%-"PRIu64"\n", > + stats.ipackets, stats.imissed, stats.ibytes); > + printf(" RX-badcrc: %-10"PRIu64" RX-badlen: %-10"PRIu64" > RX-errors: " > + "%-"PRIu64"\n", > + stats.ibadcrc, stats.ibadlen, stats.ierrors); > + printf(" RX-nombuf: %-10"PRIu64"\n", > + stats.rx_nombuf); > + printf(" TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64" > TX-bytes: " > "%-"PRIu64"\n", > - stats.ipackets, stats.ierrors, stats.ibytes, > stats.opackets, stats.oerrors, stats.obytes); > } > else { > printf(" RX-packets: %10"PRIu64" RX-errors: > %10"PRIu64 > - " RX-bytes: %10"PRIu64"\n" > - " TX-packets: %10"PRIu64" TX-errors: > %10"PRIu64 > + " RX-bytes: %10"PRIu64"\n", > + stats.ipackets, stats.ierrors, stats.ibytes); > + printf(" RX-badcrc: %10"PRIu64" RX-badlen: > %10"PRIu64 > + " RX-errors: %10"PRIu64"\n", > + stats.ibadcrc, stats.ibadlen, stats.ierrors); > + printf(" RX-nombuf: %10"PRIu64"\n", > + stats.rx_nombuf); > + printf(" TX-packets: %10"PRIu64" TX-errors: > %10"PRIu64 > " TX-bytes: %10"PRIu64"\n", > - stats.ipackets, stats.ierrors, stats.ibytes, > stats.opackets, stats.oerrors, stats.obytes); > } > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index bc38305..ac8c9f3 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -770,8 +770,8 @@ fwd_port_stats_display(portid_t port_id, struct > rte_eth_stats *stats) > if ((!port->rx_queue_stats_mapping_enabled) && (!port- > >tx_queue_stats_mapping_enabled)) { > printf(" RX-packets: %-14"PRIu64" RX-dropped: %- > 14"PRIu64"RX-total: " > "%-"PRIu64"\n", > - stats->ipackets, stats->ierrors, > - (uint64_t) (stats->ipackets + stats->ierrors)); > + stats->ipackets, stats->imissed, > + (uint64_t) (stats->ipackets + stats->imissed)); > > if (cur_fwd_eng == &csum_fwd_engine) > printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %- > 14"PRIu64" \n", > @@ -782,15 +782,19 @@ fwd_port_stats_display(portid_t port_id, struct > rte_eth_stats *stats) > stats->opackets, port->tx_dropped, > (uint64_t) (stats->opackets + port->tx_dropped)); > > - if (stats->rx_nombuf > 0) > - printf(" RX-nombufs: %-14"PRIu64"\n", stats- > >rx_nombuf); > + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { > + printf(" RX-badcrc: %-14"PRIu64" RX-badlen: %- > 14"PRIu64"RX-errors: %-"PRIu64"\n", > + stats->ibadcrc, stats->ibadlen, stats->ierrors); > + printf(" RX-nombufs: %-14"PRIu64"\n", > + stats->rx_nombuf); > + } > > } > else { > printf(" RX-packets: %14"PRIu64" RX- > dropped:%14"PRIu64" RX-total:" > "%14"PRIu64"\n", > - stats->ipackets, stats->ierrors, > - (uint64_t) (stats->ipackets + stats->ierrors)); > + stats->ipackets, stats->imissed, > + (uint64_t) (stats->ipackets + stats->imissed)); > > if (cur_fwd_eng == &csum_fwd_engine) > printf(" Bad-ipcsum:%14"PRIu64" Bad- > l4csum:%14"PRIu64"\n", > @@ -800,9 +804,13 @@ fwd_port_stats_display(portid_t port_id, struct > rte_eth_stats *stats) > "%14"PRIu64"\n", > stats->opackets, port->tx_dropped, > (uint64_t) (stats->opackets + port->tx_dropped)); > - > - if (stats->rx_nombuf > 0) > - printf(" RX-nombufs:%14"PRIu64"\n", stats- > >rx_nombuf); > + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { > + printf(" RX-badcrc: %14"PRIu64" RX-badlen: > %14"PRIu64" RX-errors:" > + "%"PRIu64"\n", > + stats->ibadcrc, stats->ibadlen, stats->ierrors); > + printf(" RX-nombufs: %14"PRIu64"\n", > + stats->rx_nombuf); > + } > } > > /* Display statistics of XON/XOFF pause frames, if any. */ > @@ -1164,8 +1172,8 @@ stop_packet_forwarding(void) > port->stats.ibytes = 0; > stats.obytes -= port->stats.obytes; > port->stats.obytes = 0; > - stats.ierrors -= port->stats.ierrors; > - port->stats.ierrors = 0; > + stats.imissed -= port->stats.imissed; > + port->stats.imissed = 0; > stats.oerrors -= port->stats.oerrors; > port->stats.oerrors = 0; > stats.rx_nombuf -= port->stats.rx_nombuf; > @@ -1177,7 +1185,7 @@ stop_packet_forwarding(void) > > total_recv += stats.ipackets; > total_xmit += stats.opackets; > - total_rx_dropped += stats.ierrors; > + total_rx_dropped += stats.imissed; > total_tx_dropped += port->tx_dropped; > total_rx_nombuf += stats.rx_nombuf; > > diff --git a/examples/load_balancer/runtime.c > b/examples/load_balancer/runtime.c > index e85abdb..6c63c26 100644 > --- a/examples/load_balancer/runtime.c > +++ b/examples/load_balancer/runtime.c > @@ -215,7 +215,7 @@ app_lcore_io_rx( > printf("I/O RX %u in (NIC port %u): NIC drop ratio = > %.2f avg burst size = %.2f\n", > lcore, > (unsigned) port, > - (double) stats.ierrors / (double) (stats.ierrors > + stats.ipackets), > + (double) stats.imissed / (double) > (stats.imissed + stats.ipackets), > ((double) lp->rx.nic_queues_count[i]) / > ((double) lp->rx.nic_queues_iters[i])); > lp->rx.nic_queues_iters[i] = 0; > lp->rx.nic_queues_count[i] = 0; > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 4bf2383..d839b8c 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -186,6 +186,9 @@ struct rte_eth_stats { > uint64_t opackets; /**< Total number of successfully transmitted > packets.*/ > uint64_t ibytes; /**< Total number of successfully received bytes. > */ > uint64_t obytes; /**< Total number of successfully transmitted > bytes. */ > + uint64_t imissed; /**< Total of RX missed packets (e.g full FIFO). */ > + uint64_t ibadcrc; /**< Total of RX packets with CRC error. */ > + uint64_t ibadlen; /**< Total of RX packets with bad length. */ > uint64_t ierrors; /**< Total number of erroneous received packets. > */ > uint64_t oerrors; /**< Total number of failed transmitted packets. > */ > uint64_t imcasts; /**< Total number of multicast received packets. > */ > diff --git a/lib/librte_pmd_e1000/em_ethdev.c > b/lib/librte_pmd_e1000/em_ethdev.c > index 493806c..2f0e1a0 100644 > --- a/lib/librte_pmd_e1000/em_ethdev.c > +++ b/lib/librte_pmd_e1000/em_ethdev.c > @@ -793,8 +793,13 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct > rte_eth_stats *rte_stats) > return; > > /* Rx Errors */ > - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + > - stats->ruc + stats->roc + stats->mpc + stats->cexterr; > + rte_stats->ibadcrc = stats->crcerrs; > + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; > + rte_stats->imissed = stats->mpc; > + rte_stats->ierrors = rte_stats->ibadcrc + > + rte_stats->ibadlen + > + rte_stats->imissed + > + stats->rxerrc + stats->algnerrc + stats->cexterr; > > /* Tx Errors */ > rte_stats->oerrors = stats->ecol + stats->latecol; > diff --git a/lib/librte_pmd_e1000/igb_ethdev.c > b/lib/librte_pmd_e1000/igb_ethdev.c > index 5f93bcf..777413e 100644 > --- a/lib/librte_pmd_e1000/igb_ethdev.c > +++ b/lib/librte_pmd_e1000/igb_ethdev.c > @@ -1087,8 +1087,13 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct > rte_eth_stats *rte_stats) > return; > > /* Rx Errors */ > - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + > - stats->ruc + stats->roc + stats->mpc + stats->cexterr; > + rte_stats->ibadcrc = stats->crcerrs; > + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; > + rte_stats->imissed = stats->mpc; > + rte_stats->ierrors = rte_stats->ibadcrc + > + rte_stats->ibadlen + > + rte_stats->imissed + > + stats->rxerrc + stats->algnerrc + stats->cexterr; > > /* Tx Errors */ > rte_stats->oerrors = stats->ecol + stats->latecol; > diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > index 327da0b..d1718e1 100644 > --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > @@ -1702,9 +1702,15 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, > struct rte_eth_stats *stats) > } > > /* Rx Errors */ > - stats->ierrors = total_missed_rx + hw_stats->crcerrs + > - hw_stats->rlec; > - > + stats->ibadcrc = hw_stats->crcerrs; > + stats->ibadlen = hw_stats->rlec + hw_stats->ruc + hw_stats->roc; > + stats->imissed = total_missed_rx; > + stats->ierrors = stats->ibadcrc + > + stats->ibadlen + > + stats->imissed + > + hw_stats->illerrc + hw_stats->errbc; > + > + /* Tx Errors */ > stats->oerrors = 0; > > /* XON/XOFF pause frames */ > -- > 1.7.10.4 In function fwd_port_stats_display(), for aligning purposes, the following change should be made: if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { - printf(" RX-badcrc: %-14"PRIu64" RX-badlen: %-14"PRIu64"RX-errors: %-"PRIu64"\n", + printf(" RX-badcrc: %-15"PRIu64" RX-badlen: %-15"PRIu64"RX-errors: %-"PRIu64"\n", stats->ibadcrc, stats->ibadlen, stats->ierrors); So, Rx-badlen will be aligned to TX-dropped in the line above and RX-errors will be aligned to TX-total. Thanks, Pablo ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <E115CCD9D858EF4F90C690B0DCB4D897082C9DD7-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082C9DD7-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2014-06-12 21:55 ` Thomas Monjalon [not found] ` <1402610141-27148-1-git-send-email-thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: Thomas Monjalon @ 2014-06-12 21:55 UTC (permalink / raw) To: dev-VfR2kkLFssw From: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> Split input error stats to have a better understanding of why packets have been dropped. Keep ierrors field untouched for backward compatibility. Signed-off-by: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> Signed-off-by: Thomas Monjalon <thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> --- app/test-pmd/config.c | 24 +++++++++++++++++------- app/test-pmd/testpmd.c | 34 ++++++++++++++++++++-------------- examples/load_balancer/runtime.c | 2 +- lib/librte_ether/rte_ethdev.h | 3 +++ lib/librte_pmd_e1000/em_ethdev.c | 9 +++++++-- lib/librte_pmd_e1000/igb_ethdev.c | 9 +++++++-- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 12 +++++++++--- 7 files changed, 64 insertions(+), 29 deletions(-) changes in v2: - fix alignments when displaying fwd and nic statistics in testpmd diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index e0298c6..2137fd3 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -126,19 +126,29 @@ nic_stats_display(portid_t port_id) nic_stats_border, port_id, nic_stats_border); if ((!port->rx_queue_stats_mapping_enabled) && (!port->tx_queue_stats_mapping_enabled)) { - printf(" RX-packets: %-10"PRIu64" RX-errors: %-10"PRIu64"RX-bytes: " - "%-"PRIu64"\n" - " TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64"TX-bytes: " + printf(" RX-packets: %-10"PRIu64" RX-missed: %-10"PRIu64" RX-bytes: " + "%-"PRIu64"\n", + stats.ipackets, stats.imissed, stats.ibytes); + printf(" RX-badcrc: %-10"PRIu64" RX-badlen: %-10"PRIu64" RX-errors: " + "%-"PRIu64"\n", + stats.ibadcrc, stats.ibadlen, stats.ierrors); + printf(" RX-nombuf: %-10"PRIu64"\n", + stats.rx_nombuf); + printf(" TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64" TX-bytes: " "%-"PRIu64"\n", - stats.ipackets, stats.ierrors, stats.ibytes, stats.opackets, stats.oerrors, stats.obytes); } else { printf(" RX-packets: %10"PRIu64" RX-errors: %10"PRIu64 - " RX-bytes: %10"PRIu64"\n" - " TX-packets: %10"PRIu64" TX-errors: %10"PRIu64 + " RX-bytes: %10"PRIu64"\n", + stats.ipackets, stats.ierrors, stats.ibytes); + printf(" RX-badcrc: %10"PRIu64" RX-badlen: %10"PRIu64 + " RX-errors: %10"PRIu64"\n", + stats.ibadcrc, stats.ibadlen, stats.ierrors); + printf(" RX-nombuf: %10"PRIu64"\n", + stats.rx_nombuf); + printf(" TX-packets: %10"PRIu64" TX-errors: %10"PRIu64 " TX-bytes: %10"PRIu64"\n", - stats.ipackets, stats.ierrors, stats.ibytes, stats.opackets, stats.oerrors, stats.obytes); } diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 2529dc3..0727fb3 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -770,39 +770,45 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) if ((!port->rx_queue_stats_mapping_enabled) && (!port->tx_queue_stats_mapping_enabled)) { printf(" RX-packets: %-14"PRIu64" RX-dropped: %-14"PRIu64"RX-total: " "%-"PRIu64"\n", - stats->ipackets, stats->ierrors, - (uint64_t) (stats->ipackets + stats->ierrors)); + stats->ipackets, stats->imissed, + (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %-14"PRIu64" \n", port->rx_bad_ip_csum, port->rx_bad_l4_csum); + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { + printf(" RX-badcrc: %-14"PRIu64" RX-badlen: %-14"PRIu64 + "RX-error: %-"PRIu64"\n", + stats->ibadcrc, stats->ibadlen, stats->ierrors); + printf(" RX-nombufs: %-14"PRIu64"\n", stats->rx_nombuf); + } printf(" TX-packets: %-14"PRIu64" TX-dropped: %-14"PRIu64"TX-total: " "%-"PRIu64"\n", stats->opackets, port->tx_dropped, (uint64_t) (stats->opackets + port->tx_dropped)); - - if (stats->rx_nombuf > 0) - printf(" RX-nombufs: %-14"PRIu64"\n", stats->rx_nombuf); - } else { printf(" RX-packets: %14"PRIu64" RX-dropped:%14"PRIu64" RX-total:" "%14"PRIu64"\n", - stats->ipackets, stats->ierrors, - (uint64_t) (stats->ipackets + stats->ierrors)); + stats->ipackets, stats->imissed, + (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) printf(" Bad-ipcsum:%14"PRIu64" Bad-l4csum:%14"PRIu64"\n", port->rx_bad_ip_csum, port->rx_bad_l4_csum); + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { + printf(" RX-badcrc: %14"PRIu64" RX-badlen: %14"PRIu64 + " RX-error:%"PRIu64"\n", + stats->ibadcrc, stats->ibadlen, stats->ierrors); + printf(" RX-nombufs: %14"PRIu64"\n", + stats->rx_nombuf); + } printf(" TX-packets: %14"PRIu64" TX-dropped:%14"PRIu64" TX-total:" "%14"PRIu64"\n", stats->opackets, port->tx_dropped, (uint64_t) (stats->opackets + port->tx_dropped)); - - if (stats->rx_nombuf > 0) - printf(" RX-nombufs:%14"PRIu64"\n", stats->rx_nombuf); } /* Display statistics of XON/XOFF pause frames, if any. */ @@ -1164,8 +1170,8 @@ stop_packet_forwarding(void) port->stats.ibytes = 0; stats.obytes -= port->stats.obytes; port->stats.obytes = 0; - stats.ierrors -= port->stats.ierrors; - port->stats.ierrors = 0; + stats.imissed -= port->stats.imissed; + port->stats.imissed = 0; stats.oerrors -= port->stats.oerrors; port->stats.oerrors = 0; stats.rx_nombuf -= port->stats.rx_nombuf; @@ -1177,7 +1183,7 @@ stop_packet_forwarding(void) total_recv += stats.ipackets; total_xmit += stats.opackets; - total_rx_dropped += stats.ierrors; + total_rx_dropped += stats.imissed; total_tx_dropped += port->tx_dropped; total_rx_nombuf += stats.rx_nombuf; diff --git a/examples/load_balancer/runtime.c b/examples/load_balancer/runtime.c index 438224a..9612392 100644 --- a/examples/load_balancer/runtime.c +++ b/examples/load_balancer/runtime.c @@ -215,7 +215,7 @@ app_lcore_io_rx( printf("I/O RX %u in (NIC port %u): NIC drop ratio = %.2f avg burst size = %.2f\n", lcore, (unsigned) port, - (double) stats.ierrors / (double) (stats.ierrors + stats.ipackets), + (double) stats.imissed / (double) (stats.imissed + stats.ipackets), ((double) lp->rx.nic_queues_count[i]) / ((double) lp->rx.nic_queues_iters[i])); lp->rx.nic_queues_iters[i] = 0; lp->rx.nic_queues_count[i] = 0; diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 202c899..807aa42 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -186,6 +186,9 @@ struct rte_eth_stats { uint64_t opackets; /**< Total number of successfully transmitted packets.*/ uint64_t ibytes; /**< Total number of successfully received bytes. */ uint64_t obytes; /**< Total number of successfully transmitted bytes. */ + uint64_t imissed; /**< Total of RX missed packets (e.g full FIFO). */ + uint64_t ibadcrc; /**< Total of RX packets with CRC error. */ + uint64_t ibadlen; /**< Total of RX packets with bad length. */ uint64_t ierrors; /**< Total number of erroneous received packets. */ uint64_t oerrors; /**< Total number of failed transmitted packets. */ uint64_t imcasts; /**< Total number of multicast received packets. */ diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c index 398838f..ef2408c 100644 --- a/lib/librte_pmd_e1000/em_ethdev.c +++ b/lib/librte_pmd_e1000/em_ethdev.c @@ -793,8 +793,13 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) return; /* Rx Errors */ - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + - stats->ruc + stats->roc + stats->mpc + stats->cexterr; + rte_stats->ibadcrc = stats->crcerrs; + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; + rte_stats->imissed = stats->mpc; + rte_stats->ierrors = rte_stats->ibadcrc + + rte_stats->ibadlen + + rte_stats->imissed + + stats->rxerrc + stats->algnerrc + stats->cexterr; /* Tx Errors */ rte_stats->oerrors = stats->ecol + stats->latecol; diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c index f043c28..b24bf0a 100644 --- a/lib/librte_pmd_e1000/igb_ethdev.c +++ b/lib/librte_pmd_e1000/igb_ethdev.c @@ -1138,8 +1138,13 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) return; /* Rx Errors */ - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + - stats->ruc + stats->roc + stats->mpc + stats->cexterr; + rte_stats->ibadcrc = stats->crcerrs; + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; + rte_stats->imissed = stats->mpc; + rte_stats->ierrors = rte_stats->ibadcrc + + rte_stats->ibadlen + + rte_stats->imissed + + stats->rxerrc + stats->algnerrc + stats->cexterr; /* Tx Errors */ rte_stats->oerrors = stats->ecol + stats->latecol; diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index 5f6a0f7..e2988e5 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -1816,9 +1816,15 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) } /* Rx Errors */ - stats->ierrors = total_missed_rx + hw_stats->crcerrs + - hw_stats->rlec; - + stats->ibadcrc = hw_stats->crcerrs; + stats->ibadlen = hw_stats->rlec + hw_stats->ruc + hw_stats->roc; + stats->imissed = total_missed_rx; + stats->ierrors = stats->ibadcrc + + stats->ibadlen + + stats->imissed + + hw_stats->illerrc + hw_stats->errbc; + + /* Tx Errors */ stats->oerrors = 0; /* XON/XOFF pause frames */ -- 2.0.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <1402610141-27148-1-git-send-email-thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets [not found] ` <1402610141-27148-1-git-send-email-thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> @ 2014-06-17 9:17 ` De Lara Guarch, Pablo [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082CB85B-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: De Lara Guarch, Pablo @ 2014-06-17 9:17 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev-VfR2kkLFssw@public.gmane.org > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org] > Sent: Thursday, June 12, 2014 10:56 PM > To: dev-VfR2kkLFssw@public.gmane.org > Cc: david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org; De Lara Guarch, Pablo; Ivan Boule > Subject: [PATCH v2] ethdev: add Rx error counters for missed, badcrc and > badlen packets > > From: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > Split input error stats to have a better understanding of why packets > have been dropped. > Keep ierrors field untouched for backward compatibility. > > Signed-off-by: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > Signed-off-by: Thomas Monjalon <thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > --- > app/test-pmd/config.c | 24 +++++++++++++++++------- > app/test-pmd/testpmd.c | 34 ++++++++++++++++++++-------------- > examples/load_balancer/runtime.c | 2 +- > lib/librte_ether/rte_ethdev.h | 3 +++ > lib/librte_pmd_e1000/em_ethdev.c | 9 +++++++-- > lib/librte_pmd_e1000/igb_ethdev.c | 9 +++++++-- > lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 12 +++++++++--- > 7 files changed, 64 insertions(+), 29 deletions(-) > > changes in v2: > - fix alignments when displaying fwd and nic statistics in testpmd > > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index e0298c6..2137fd3 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -126,19 +126,29 @@ nic_stats_display(portid_t port_id) > nic_stats_border, port_id, nic_stats_border); > > if ((!port->rx_queue_stats_mapping_enabled) && (!port- > >tx_queue_stats_mapping_enabled)) { > - printf(" RX-packets: %-10"PRIu64" RX-errors: %- > 10"PRIu64"RX-bytes: " > - "%-"PRIu64"\n" > - " TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64"TX- > bytes: " > + printf(" RX-packets: %-10"PRIu64" RX-missed: %-10"PRIu64" > RX-bytes: " > + "%-"PRIu64"\n", > + stats.ipackets, stats.imissed, stats.ibytes); > + printf(" RX-badcrc: %-10"PRIu64" RX-badlen: %-10"PRIu64" > RX-errors: " > + "%-"PRIu64"\n", > + stats.ibadcrc, stats.ibadlen, stats.ierrors); > + printf(" RX-nombuf: %-10"PRIu64"\n", > + stats.rx_nombuf); > + printf(" TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64" > TX-bytes: " > "%-"PRIu64"\n", > - stats.ipackets, stats.ierrors, stats.ibytes, > stats.opackets, stats.oerrors, stats.obytes); > } > else { > printf(" RX-packets: %10"PRIu64" RX-errors: > %10"PRIu64 > - " RX-bytes: %10"PRIu64"\n" > - " TX-packets: %10"PRIu64" TX-errors: > %10"PRIu64 > + " RX-bytes: %10"PRIu64"\n", > + stats.ipackets, stats.ierrors, stats.ibytes); > + printf(" RX-badcrc: %10"PRIu64" RX-badlen: > %10"PRIu64 > + " RX-errors: %10"PRIu64"\n", > + stats.ibadcrc, stats.ibadlen, stats.ierrors); > + printf(" RX-nombuf: %10"PRIu64"\n", > + stats.rx_nombuf); > + printf(" TX-packets: %10"PRIu64" TX-errors: > %10"PRIu64 > " TX-bytes: %10"PRIu64"\n", > - stats.ipackets, stats.ierrors, stats.ibytes, > stats.opackets, stats.oerrors, stats.obytes); > } > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 2529dc3..0727fb3 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -770,39 +770,45 @@ fwd_port_stats_display(portid_t port_id, struct > rte_eth_stats *stats) > if ((!port->rx_queue_stats_mapping_enabled) && (!port- > >tx_queue_stats_mapping_enabled)) { > printf(" RX-packets: %-14"PRIu64" RX-dropped: %- > 14"PRIu64"RX-total: " > "%-"PRIu64"\n", > - stats->ipackets, stats->ierrors, > - (uint64_t) (stats->ipackets + stats->ierrors)); > + stats->ipackets, stats->imissed, > + (uint64_t) (stats->ipackets + stats->imissed)); > > if (cur_fwd_eng == &csum_fwd_engine) > printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %- > 14"PRIu64" \n", > port->rx_bad_ip_csum, port->rx_bad_l4_csum); > + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { > + printf(" RX-badcrc: %-14"PRIu64" RX-badlen: %- > 14"PRIu64 > + "RX-error: %-"PRIu64"\n", > + stats->ibadcrc, stats->ibadlen, stats->ierrors); > + printf(" RX-nombufs: %-14"PRIu64"\n", stats- > >rx_nombuf); > + } > > printf(" TX-packets: %-14"PRIu64" TX-dropped: %- > 14"PRIu64"TX-total: " > "%-"PRIu64"\n", > stats->opackets, port->tx_dropped, > (uint64_t) (stats->opackets + port->tx_dropped)); > - > - if (stats->rx_nombuf > 0) > - printf(" RX-nombufs: %-14"PRIu64"\n", stats- > >rx_nombuf); > - > } > else { > printf(" RX-packets: %14"PRIu64" RX- > dropped:%14"PRIu64" RX-total:" > "%14"PRIu64"\n", > - stats->ipackets, stats->ierrors, > - (uint64_t) (stats->ipackets + stats->ierrors)); > + stats->ipackets, stats->imissed, > + (uint64_t) (stats->ipackets + stats->imissed)); > > if (cur_fwd_eng == &csum_fwd_engine) > printf(" Bad-ipcsum:%14"PRIu64" Bad- > l4csum:%14"PRIu64"\n", > port->rx_bad_ip_csum, port->rx_bad_l4_csum); > + if (((stats->ierrors - stats->imissed) + stats->rx_nombuf) > 0) { > + printf(" RX-badcrc: %14"PRIu64" RX-badlen: > %14"PRIu64 > + " RX-error:%"PRIu64"\n", > + stats->ibadcrc, stats->ibadlen, stats->ierrors); > + printf(" RX-nombufs: %14"PRIu64"\n", > + stats->rx_nombuf); > + } > > printf(" TX-packets: %14"PRIu64" TX- > dropped:%14"PRIu64" TX-total:" > "%14"PRIu64"\n", > stats->opackets, port->tx_dropped, > (uint64_t) (stats->opackets + port->tx_dropped)); > - > - if (stats->rx_nombuf > 0) > - printf(" RX-nombufs:%14"PRIu64"\n", stats- > >rx_nombuf); > } > > /* Display statistics of XON/XOFF pause frames, if any. */ > @@ -1164,8 +1170,8 @@ stop_packet_forwarding(void) > port->stats.ibytes = 0; > stats.obytes -= port->stats.obytes; > port->stats.obytes = 0; > - stats.ierrors -= port->stats.ierrors; > - port->stats.ierrors = 0; > + stats.imissed -= port->stats.imissed; > + port->stats.imissed = 0; > stats.oerrors -= port->stats.oerrors; > port->stats.oerrors = 0; > stats.rx_nombuf -= port->stats.rx_nombuf; > @@ -1177,7 +1183,7 @@ stop_packet_forwarding(void) > > total_recv += stats.ipackets; > total_xmit += stats.opackets; > - total_rx_dropped += stats.ierrors; > + total_rx_dropped += stats.imissed; > total_tx_dropped += port->tx_dropped; > total_rx_nombuf += stats.rx_nombuf; > > diff --git a/examples/load_balancer/runtime.c > b/examples/load_balancer/runtime.c > index 438224a..9612392 100644 > --- a/examples/load_balancer/runtime.c > +++ b/examples/load_balancer/runtime.c > @@ -215,7 +215,7 @@ app_lcore_io_rx( > printf("I/O RX %u in (NIC port %u): NIC drop ratio = > %.2f avg burst size = %.2f\n", > lcore, > (unsigned) port, > - (double) stats.ierrors / (double) (stats.ierrors > + stats.ipackets), > + (double) stats.imissed / (double) > (stats.imissed + stats.ipackets), > ((double) lp->rx.nic_queues_count[i]) / > ((double) lp->rx.nic_queues_iters[i])); > lp->rx.nic_queues_iters[i] = 0; > lp->rx.nic_queues_count[i] = 0; > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 202c899..807aa42 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -186,6 +186,9 @@ struct rte_eth_stats { > uint64_t opackets; /**< Total number of successfully transmitted > packets.*/ > uint64_t ibytes; /**< Total number of successfully received bytes. > */ > uint64_t obytes; /**< Total number of successfully transmitted > bytes. */ > + uint64_t imissed; /**< Total of RX missed packets (e.g full FIFO). */ > + uint64_t ibadcrc; /**< Total of RX packets with CRC error. */ > + uint64_t ibadlen; /**< Total of RX packets with bad length. */ > uint64_t ierrors; /**< Total number of erroneous received packets. > */ > uint64_t oerrors; /**< Total number of failed transmitted packets. > */ > uint64_t imcasts; /**< Total number of multicast received packets. > */ > diff --git a/lib/librte_pmd_e1000/em_ethdev.c > b/lib/librte_pmd_e1000/em_ethdev.c > index 398838f..ef2408c 100644 > --- a/lib/librte_pmd_e1000/em_ethdev.c > +++ b/lib/librte_pmd_e1000/em_ethdev.c > @@ -793,8 +793,13 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct > rte_eth_stats *rte_stats) > return; > > /* Rx Errors */ > - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + > - stats->ruc + stats->roc + stats->mpc + stats->cexterr; > + rte_stats->ibadcrc = stats->crcerrs; > + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; > + rte_stats->imissed = stats->mpc; > + rte_stats->ierrors = rte_stats->ibadcrc + > + rte_stats->ibadlen + > + rte_stats->imissed + > + stats->rxerrc + stats->algnerrc + stats->cexterr; > > /* Tx Errors */ > rte_stats->oerrors = stats->ecol + stats->latecol; > diff --git a/lib/librte_pmd_e1000/igb_ethdev.c > b/lib/librte_pmd_e1000/igb_ethdev.c > index f043c28..b24bf0a 100644 > --- a/lib/librte_pmd_e1000/igb_ethdev.c > +++ b/lib/librte_pmd_e1000/igb_ethdev.c > @@ -1138,8 +1138,13 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct > rte_eth_stats *rte_stats) > return; > > /* Rx Errors */ > - rte_stats->ierrors = stats->rxerrc + stats->crcerrs + stats->algnerrc + > - stats->ruc + stats->roc + stats->mpc + stats->cexterr; > + rte_stats->ibadcrc = stats->crcerrs; > + rte_stats->ibadlen = stats->rlec + stats->ruc + stats->roc; > + rte_stats->imissed = stats->mpc; > + rte_stats->ierrors = rte_stats->ibadcrc + > + rte_stats->ibadlen + > + rte_stats->imissed + > + stats->rxerrc + stats->algnerrc + stats->cexterr; > > /* Tx Errors */ > rte_stats->oerrors = stats->ecol + stats->latecol; > diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > index 5f6a0f7..e2988e5 100644 > --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > @@ -1816,9 +1816,15 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, > struct rte_eth_stats *stats) > } > > /* Rx Errors */ > - stats->ierrors = total_missed_rx + hw_stats->crcerrs + > - hw_stats->rlec; > - > + stats->ibadcrc = hw_stats->crcerrs; > + stats->ibadlen = hw_stats->rlec + hw_stats->ruc + hw_stats->roc; > + stats->imissed = total_missed_rx; > + stats->ierrors = stats->ibadcrc + > + stats->ibadlen + > + stats->imissed + > + hw_stats->illerrc + hw_stats->errbc; > + > + /* Tx Errors */ > stats->oerrors = 0; > > /* XON/XOFF pause frames */ > -- > 2.0.0 Acked-by: Pablo de Lara <pablo.de.lara.guarch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <E115CCD9D858EF4F90C690B0DCB4D897082CB85B-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org>]
* Re: [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082CB85B-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> @ 2014-06-17 9:34 ` Thomas Monjalon 0 siblings, 0 replies; 5+ messages in thread From: Thomas Monjalon @ 2014-06-17 9:34 UTC (permalink / raw) To: De Lara Guarch, Pablo, Ivan Boule, David Marchand; +Cc: dev-VfR2kkLFssw > > From: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > > > Split input error stats to have a better understanding of why packets > > have been dropped. > > Keep ierrors field untouched for backward compatibility. > > > > Signed-off-by: Ivan Boule <ivan.boule-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > Signed-off-by: Thomas Monjalon <thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> > > Acked-by: Pablo de Lara <pablo.de.lara.guarch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Applied for version 1.7.0. Thanks -- Thomas ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-06-17 9:34 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-05-22 18:28 [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets David Marchand [not found] ` <1400783309-14666-1-git-send-email-david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> 2014-06-11 14:19 ` De Lara Guarch, Pablo [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082C9DD7-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2014-06-12 21:55 ` [PATCH v2] ethdev: add Rx error counters " Thomas Monjalon [not found] ` <1402610141-27148-1-git-send-email-thomas.monjalon-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> 2014-06-17 9:17 ` De Lara Guarch, Pablo [not found] ` <E115CCD9D858EF4F90C690B0DCB4D897082CB85B-kPTMFJFq+rELt2AQoY/u9bfspsVTdybXVpNB7YpNyf8@public.gmane.org> 2014-06-17 9:34 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).