ethdev: add Rx error counters for missed, badcrc and badlen packets
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>
This commit is contained in:
parent
5205954791
commit
70bdb18657
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
|
@ -1140,8 +1140,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;
|
||||
|
@ -1818,9 +1818,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user