From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by dpdk.org (Postfix) with ESMTP id 90D8758D7 for ; Thu, 12 Jun 2014 23:56:02 +0200 (CEST) Received: by mail-wi0-f177.google.com with SMTP id r20so2344783wiv.16 for ; Thu, 12 Jun 2014 14:56:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Z/P9Bskj2JFo6lRIQU86HUazeDXvxoGT5B41Qzq7eGI=; b=QDCgUTBwXk2Gfkg4JUJlM5oaTDn631Khy3IIuONYnjLr8EPi7KH+DX7/JKoje8Vx0n wHX3ha4Gm8dvB3rN7LVzE/Cj7PPOGEItpXBV/ERZoNqV+eUGHxwCjpPnIidaIl9z6paf 5B/E0RhcMGsKUel2I96Smx49G5dkz2Q4SBEzZg87gfvusxfmlfnKqO+edsjLxLDO36KG 3Bp9vznD5bmDsmSALxd28u2Lc4rdYGYRrOiKrQn9ZBYforfC1iJjLSatOLLCDF9w2hmM XMv2xSFFUFQcquECkxovapPWbCBSSxZnzsiKcGQfuBoazWkVq0h0/z3rWVPmO9KOWQZ3 K+Pg== X-Gm-Message-State: ALoCoQk1P0rN+YqyY1LRGcXZmYZhlbCIaXSzpOI2O0R+oynjSs2QWaeNfsmyH2CgrPr2fPzsLAOk X-Received: by 10.180.84.168 with SMTP id a8mr10003248wiz.36.1402610177405; Thu, 12 Jun 2014 14:56:17 -0700 (PDT) Received: from localhost.localdomain (136-92-190-109.dsl.ovh.fr. [109.190.92.136]) by mx.google.com with ESMTPSA id l9sm6263418wic.21.2014.06.12.14.56.15 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 12 Jun 2014 14:56:16 -0700 (PDT) From: Thomas Monjalon To: dev@dpdk.org Date: Thu, 12 Jun 2014 23:55:41 +0200 Message-Id: <1402610141-27148-1-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.0.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2] ethdev: add Rx error counters for missed, badcrc and badlen packets X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Jun 2014 21:56:03 -0000 From: Ivan Boule 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 Signed-off-by: David Marchand Signed-off-by: Thomas Monjalon --- 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