* [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets
@ 2014-05-22 18:28 David Marchand
2014-06-11 14:19 ` De Lara Guarch, Pablo
0 siblings, 1 reply; 5+ messages in thread
From: David Marchand @ 2014-05-22 18:28 UTC (permalink / raw)
To: dev
From: Ivan Boule <ivan.boule@6wind.com>
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@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
---
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 [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets
2014-05-22 18:28 [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets David Marchand
@ 2014-06-11 14:19 ` De Lara Guarch, Pablo
2014-06-12 21:55 ` [dpdk-dev] [PATCH v2] ethdev: add Rx error counters " Thomas Monjalon
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
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of David Marchand
> Sent: Thursday, May 22, 2014 7:28 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed,
> badcrc and badlen packets
>
> From: Ivan Boule <ivan.boule@6wind.com>
>
> 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@6wind.com>
> Signed-off-by: David Marchand <david.marchand@6wind.com>
> ---
> 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
* [dpdk-dev] [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets
2014-06-11 14:19 ` De Lara Guarch, Pablo
@ 2014-06-12 21:55 ` Thomas Monjalon
2014-06-17 9:17 ` De Lara Guarch, Pablo
0 siblings, 1 reply; 5+ messages in thread
From: Thomas Monjalon @ 2014-06-12 21:55 UTC (permalink / raw)
To: dev
From: Ivan Boule <ivan.boule@6wind.com>
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@6wind.com>
Signed-off-by: David Marchand <david.marchand@6wind.com>
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
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 [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets
2014-06-12 21:55 ` [dpdk-dev] [PATCH v2] ethdev: add Rx error counters " Thomas Monjalon
@ 2014-06-17 9:17 ` De Lara Guarch, Pablo
2014-06-17 9:34 ` Thomas Monjalon
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
> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Thursday, June 12, 2014 10:56 PM
> To: dev@dpdk.org
> Cc: david.marchand@6wind.com; 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@6wind.com>
>
> 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@6wind.com>
> Signed-off-by: David Marchand <david.marchand@6wind.com>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> ---
> 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@intel.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets
2014-06-17 9:17 ` De Lara Guarch, Pablo
@ 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
> > From: Ivan Boule <ivan.boule@6wind.com>
> >
> > 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@6wind.com>
> > Signed-off-by: David Marchand <david.marchand@6wind.com>
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
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 [dpdk-dev] [PATCH] ethdev: add RX errors counter for missed, badcrc and badlen packets David Marchand
2014-06-11 14:19 ` De Lara Guarch, Pablo
2014-06-12 21:55 ` [dpdk-dev] [PATCH v2] ethdev: add Rx error counters " Thomas Monjalon
2014-06-17 9:17 ` De Lara Guarch, Pablo
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).