DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps
@ 2015-07-15 13:11 Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 1/9] ixgbe: move stats register reads to a new function Maryam Tahhan
                   ` (9 more replies)
  0 siblings, 10 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

This patch set implements xstats_get() and xstats_reset() in dev_ops for
ixgbe to expose detailed error statistics to DPDK applications. The
dump_cfg application was extended to demonstrate the usage of
retrieving statistics for DPDK interfaces and renamed to proc_info
in order reflect this new functionality. This patch set also removes non
generic statistics from the statistics strings at the ethdev level and
marks the relevant registers as depricated in struct rte_eth_stats.

v2:
 - Fixed patch dependencies.
 - Broke down patches into smaller logical changes.

v3:
 - Removes non-generic stats fields in rte_stats_strings and deprecates
   the fields related to them in struct rte_eth_stats.
 - Modifies rte_eth_xstats_get() to return generic stats and extended
   stats.
 
v4:
 - Replace count use in the loop in ixgbe_dev_xstats_get() function
   definition with i.
 - Breakdown "ixgbe: add NIC specific stats removed from ethdev" into
   two patches, one that adds the stats and another that extends
   ierrors to include more error stats.
 - Remove second call to ixgbe_dev_xstats_get() from
   rte_eth_xstats_get().

v5:
 - Added documentation for proc_info.
 - Fixed proc_info copyright year.
 - Display queue stats for all devices in proc_info.

v6:
 - Modified the driver implementation of ixgbe_dev_xstats_get() so that
   it doesn't worry about the generic stats written by the generic layer.

Maryam Tahhan (9):
  ixgbe: move stats register reads to a new function
  ixgbe: add functions to get and reset xstats
  ethdev: expose extended error stats
  ethdev: remove HW specific stats in stats structs
  ixgbe: add NIC specific stats removed from ethdev
  ixgbe: return more errors in ierrors
  app: remove dump_cfg
  app: add a new app proc_info
  doc: Add documentation for proc_info

 MAINTAINERS                            |   4 +
 app/Makefile                           |   2 +-
 app/dump_cfg/Makefile                  |  45 -----
 app/dump_cfg/main.c                    |  92 ---------
 app/proc_info/Makefile                 |  45 +++++
 app/proc_info/main.c                   | 354 +++++++++++++++++++++++++++++++++
 doc/guides/rel_notes/abi.rst           |  12 ++
 doc/guides/sample_app_ug/index.rst     |   1 +
 doc/guides/sample_app_ug/proc_info.rst |  71 +++++++
 drivers/net/ixgbe/ixgbe_ethdev.c       | 193 ++++++++++++++----
 lib/librte_ether/rte_ethdev.c          |  40 ++--
 lib/librte_ether/rte_ethdev.h          |  30 ++-
 mk/rte.sdktest.mk                      |   4 +-
 13 files changed, 685 insertions(+), 208 deletions(-)
 delete mode 100644 app/dump_cfg/Makefile
 delete mode 100644 app/dump_cfg/main.c
 create mode 100644 app/proc_info/Makefile
 create mode 100644 app/proc_info/main.c
 create mode 100644 doc/guides/sample_app_ug/proc_info.rst
 mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c

-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 1/9] ixgbe: move stats register reads to a new function
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 2/9] ixgbe: add functions to get and reset xstats Maryam Tahhan
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Move stats register reads to ixgbe_read_stats_registers() as it will be
used by the functions to retrieve stats and extended stats.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 64 +++++++++++++++++++++++++++-------------
 1 file changed, 44 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 8d68125..04ee8bb 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1787,24 +1787,16 @@ ixgbe_dev_close(struct rte_eth_dev *dev)
 	ixgbe_set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
 }
 
-/*
- * This function is based on ixgbe_update_stats_counters() in base/ixgbe.c
- */
 static void
-ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+ixgbe_read_stats_registers(struct ixgbe_hw *hw, struct ixgbe_hw_stats
+						   *hw_stats, uint64_t *total_missed_rx,
+						   uint64_t *total_qbrc, uint64_t *total_qprc,
+						   uint64_t *rxnfgpc, uint64_t *txdgpc,
+						   uint64_t *total_qprdc)
 {
-	struct ixgbe_hw *hw =
-			IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-	struct ixgbe_hw_stats *hw_stats =
-			IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
 	uint32_t bprc, lxon, lxoff, total;
-	uint64_t total_missed_rx, total_qbrc, total_qprc;
 	unsigned i;
 
-	total_missed_rx = 0;
-	total_qbrc = 0;
-	total_qprc = 0;
-
 	hw_stats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
 	hw_stats->illerrc += IXGBE_READ_REG(hw, IXGBE_ILLERRC);
 	hw_stats->errbc += IXGBE_READ_REG(hw, IXGBE_ERRBC);
@@ -1816,7 +1808,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 		/* global total per queue */
 		hw_stats->mpc[i] += mp;
 		/* Running comprehensive total for stats display */
-		total_missed_rx += hw_stats->mpc[i];
+		*total_missed_rx += hw_stats->mpc[i];
 		if (hw->mac.type == ixgbe_mac_82598EB)
 			hw_stats->rnbc[i] +=
 			    IXGBE_READ_REG(hw, IXGBE_RNBC(i));
@@ -1840,10 +1832,11 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 		hw_stats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
 		hw_stats->qbtc[i] +=
 		    ((uint64_t)IXGBE_READ_REG(hw, IXGBE_QBTC_H(i)) << 32);
-		hw_stats->qprdc[i] += IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
+		*total_qprdc += hw_stats->qprdc[i] +=
+				IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
 
-		total_qprc += hw_stats->qprc[i];
-		total_qbrc += hw_stats->qbrc[i];
+		*total_qprc += hw_stats->qprc[i];
+		*total_qbrc += hw_stats->qbrc[i];
 	}
 	hw_stats->mlfc += IXGBE_READ_REG(hw, IXGBE_MLFC);
 	hw_stats->mrfc += IXGBE_READ_REG(hw, IXGBE_MRFC);
@@ -1851,6 +1844,8 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
 	/* Note that gprc counts missed packets */
 	hw_stats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC);
+	*rxnfgpc += IXGBE_READ_REG(hw, IXGBE_RXNFGPC);
+	*txdgpc += IXGBE_READ_REG(hw, IXGBE_TXDGPC);
 
 	if (hw->mac.type != ixgbe_mac_82598EB) {
 		hw_stats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCL);
@@ -1928,6 +1923,35 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 		hw_stats->fcoedwtc += IXGBE_READ_REG(hw, IXGBE_FCOEDWTC);
 	}
 
+	/* Flow Director Stats registers */
+	hw_stats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
+	hw_stats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
+}
+
+/*
+ * This function is based on ixgbe_update_stats_counters() in ixgbe/ixgbe.c
+ */
+static void
+ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+{
+	struct ixgbe_hw *hw =
+			IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct ixgbe_hw_stats *hw_stats =
+			IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
+	uint64_t total_missed_rx, total_qbrc, total_qprc, total_qprdc;
+	uint64_t rxnfgpc, txdgpc;
+	unsigned i;
+
+	total_missed_rx = 0;
+	total_qbrc = 0;
+	total_qprc = 0;
+	total_qprdc = 0;
+	rxnfgpc = 0;
+	txdgpc = 0;
+
+	ixgbe_read_stats_registers(hw, hw_stats, &total_missed_rx, &total_qbrc,
+			&total_qprc, &rxnfgpc, &txdgpc, &total_qprdc);
+
 	if (stats == NULL)
 		return;
 
@@ -1956,7 +1980,9 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	                  hw_stats->illerrc + hw_stats->errbc;
 
 	/* Tx Errors */
-	stats->oerrors  = 0;
+	/*txdgpc: packets that are DMA'ed*/
+	/*gptc: packets that are sent*/
+	stats->oerrors  = txdgpc - hw_stats->gptc;
 
 	/* XON/XOFF pause frames */
 	stats->tx_pause_xon  = hw_stats->lxontxc;
@@ -1965,8 +1991,6 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	stats->rx_pause_xoff = hw_stats->lxoffrxc;
 
 	/* Flow Director Stats registers */
-	hw_stats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
-	hw_stats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
 	stats->fdirmatch = hw_stats->fdirmatch;
 	stats->fdirmiss = hw_stats->fdirmiss;
 }
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 2/9] ixgbe: add functions to get and reset xstats
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 1/9] ixgbe: move stats register reads to a new function Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats Maryam Tahhan
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Implement ixgbe_dev_xstats_reset and ixgbe_dev_xstats_get.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 87 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 04ee8bb..90280ca 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -139,7 +139,10 @@ static int ixgbe_dev_link_update(struct rte_eth_dev *dev,
 				int wait_to_complete);
 static void ixgbe_dev_stats_get(struct rte_eth_dev *dev,
 				struct rte_eth_stats *stats);
+static int ixgbe_dev_xstats_get(struct rte_eth_dev *dev,
+				struct rte_eth_xstats *xstats, unsigned n);
 static void ixgbe_dev_stats_reset(struct rte_eth_dev *dev);
+static void ixgbe_dev_xstats_reset(struct rte_eth_dev *dev);
 static int ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev *eth_dev,
 					     uint16_t queue_id,
 					     uint8_t stat_idx,
@@ -350,7 +353,9 @@ static const struct eth_dev_ops ixgbe_eth_dev_ops = {
 	.allmulticast_disable = ixgbe_dev_allmulticast_disable,
 	.link_update          = ixgbe_dev_link_update,
 	.stats_get            = ixgbe_dev_stats_get,
+	.xstats_get           = ixgbe_dev_xstats_get,
 	.stats_reset          = ixgbe_dev_stats_reset,
+	.xstats_reset         = ixgbe_dev_xstats_reset,
 	.queue_stats_mapping_set = ixgbe_dev_queue_stats_mapping_set,
 	.dev_infos_get        = ixgbe_dev_info_get,
 	.mtu_set              = ixgbe_dev_mtu_set,
@@ -434,6 +439,33 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops = {
 	.set_mc_addr_list     = ixgbe_dev_set_mc_addr_list,
 };
 
+/* store statistics names and its offset in stats structure  */ struct
+rte_ixgbe_xstats_name_off {
+	char name[RTE_ETH_XSTATS_NAME_SIZE];
+	unsigned offset;
+};
+
+static const struct rte_ixgbe_xstats_name_off rte_ixgbe_stats_strings[] = {
+	{"rx_illegal_byte_err", offsetof(struct ixgbe_hw_stats, errbc)},
+	{"rx_len_err", offsetof(struct ixgbe_hw_stats, rlec)},
+	{"rx_undersize_count", offsetof(struct ixgbe_hw_stats, ruc)},
+	{"rx_oversize_count", offsetof(struct ixgbe_hw_stats, roc)},
+	{"rx_fragment_count", offsetof(struct ixgbe_hw_stats, rfc)},
+	{"rx_jabber_count", offsetof(struct ixgbe_hw_stats, rjc)},
+	{"l3_l4_xsum_error", offsetof(struct ixgbe_hw_stats, xec)},
+	{"mac_local_fault", offsetof(struct ixgbe_hw_stats, mlfc)},
+	{"mac_remote_fault", offsetof(struct ixgbe_hw_stats, mrfc)},
+	{"mac_short_pkt_discard", offsetof(struct ixgbe_hw_stats, mspdc)},
+	{"fccrc_error", offsetof(struct ixgbe_hw_stats, fccrc)},
+	{"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
+	{"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
+	{"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
+	{"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
+};
+
+#define IXGBE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) /	\
+		sizeof(rte_ixgbe_stats_strings[0]))
+
 /**
  * Atomically reads the link status information from global
  * structure rte_eth_dev.
@@ -2008,6 +2040,61 @@ ixgbe_dev_stats_reset(struct rte_eth_dev *dev)
 	memset(stats, 0, sizeof(*stats));
 }
 
+static int
+ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats,
+					 unsigned n)
+{
+	struct ixgbe_hw *hw =
+			IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct ixgbe_hw_stats *hw_stats =
+			IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
+	uint64_t total_missed_rx, total_qbrc, total_qprc, total_qprdc;
+	uint64_t rxnfgpc, txdgpc;
+	unsigned i, count = IXGBE_NB_XSTATS;
+
+	if (n < count)
+		return count;
+
+	total_missed_rx = 0;
+	total_qbrc = 0;
+	total_qprc = 0;
+	total_qprdc = 0;
+	rxnfgpc = 0;
+	txdgpc = 0;
+
+	ixgbe_read_stats_registers(hw, hw_stats, &total_missed_rx, &total_qbrc,
+							   &total_qprc, &rxnfgpc, &txdgpc, &total_qprdc);
+
+	/* If this is a reset xstats is NULL, and we have cleared the
+	 * registers by reading them.
+	 */
+	if (!xstats)
+		return 0;
+
+	/* Extended stats */
+	for (i = 0; i < IXGBE_NB_XSTATS; i++) {
+		snprintf(xstats[i].name, sizeof(xstats[i].name),
+				"%s", rte_ixgbe_stats_strings[i].name);
+		xstats[i].value = *(uint64_t *)(((char *)hw_stats) +
+							rte_ixgbe_stats_strings[i].offset);
+	}
+
+	return count;
+}
+
+static void
+ixgbe_dev_xstats_reset(struct rte_eth_dev *dev)
+{
+	struct ixgbe_hw_stats *stats =
+			IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
+
+	/* HW registers are cleared on read */
+	ixgbe_dev_xstats_get(dev, NULL, IXGBE_NB_XSTATS);
+
+	/* Reset software totals */
+	memset(stats, 0, sizeof(*stats));
+}
+
 static void
 ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 1/9] ixgbe: move stats register reads to a new function Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 2/9] ixgbe: add functions to get and reset xstats Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-16 23:02   ` Thomas Monjalon
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs Maryam Tahhan
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Extend rte_eth_xstats_get to retrieve additional stats from the device
driver as well the ethdev generic stats.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 lib/librte_ether/rte_ethdev.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)
 mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
old mode 100644
new mode 100755
index ddf3658..7689328
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -1661,33 +1661,42 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats,
 {
 	struct rte_eth_stats eth_stats;
 	struct rte_eth_dev *dev;
-	unsigned count, i, q;
+	unsigned count = 0, i, q;
+	signed xcount = 0;
 	uint64_t val, *stats_ptr;
 
 	VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
 
 	dev = &rte_eth_devices[port_id];
 
-	/* implemented by the driver */
-	if (dev->dev_ops->xstats_get != NULL)
-		return (*dev->dev_ops->xstats_get)(dev, xstats, n);
-
-	/* else, return generic statistics */
+	/* Return generic statistics */
 	count = RTE_NB_STATS;
 	count += dev->data->nb_rx_queues * RTE_NB_RXQ_STATS;
 	count += dev->data->nb_tx_queues * RTE_NB_TXQ_STATS;
-	if (n < count)
-		return count;
 
-	/* now fill the xstats structure */
+	/* implemented by the driver */
+	if (dev->dev_ops->xstats_get != NULL) {
+		/* Retrieve the xstats from the driver at the end of the
+		 * xstats struct.
+		 */
+		xcount = (*dev->dev_ops->xstats_get)(dev, &xstats[count],
+			 (n > count) ? n - count : 0);
 
+		if (xcount < 0)
+			return xcount;
+	}
+
+	if (n < count + xcount)
+		return count + xcount;
+
+	/* now fill the xstats structure */
 	count = 0;
 	rte_eth_stats_get(port_id, &eth_stats);
 
 	/* global stats */
 	for (i = 0; i < RTE_NB_STATS; i++) {
 		stats_ptr = RTE_PTR_ADD(&eth_stats,
-					rte_stats_strings[i].offset);
+				  	rte_stats_strings[i].offset);
 		val = *stats_ptr;
 		snprintf(xstats[count].name, sizeof(xstats[count].name),
 			"%s", rte_stats_strings[i].name);
@@ -1722,7 +1731,7 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats,
 		}
 	}
 
-	return count;
+	return count + xcount;
 }
 
 /* reset ethdev extended statistics */
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (2 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-16 23:04   ` Thomas Monjalon
  2015-08-17 14:53   ` Olivier MATZ
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 5/9] ixgbe: add NIC specific stats removed from ethdev Maryam Tahhan
                   ` (5 subsequent siblings)
  9 siblings, 2 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Remove non generic stats in rte_stats_strings and mark the relevant
fields in struct rte_eth_stats as deprecated.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 doc/guides/rel_notes/abi.rst  | 12 ++++++++++++
 lib/librte_ether/rte_ethdev.c |  9 ---------
 lib/librte_ether/rte_ethdev.h | 30 ++++++++++++++++++++----------
 3 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/doc/guides/rel_notes/abi.rst b/doc/guides/rel_notes/abi.rst
index 931e785..d5bf625 100644
--- a/doc/guides/rel_notes/abi.rst
+++ b/doc/guides/rel_notes/abi.rst
@@ -24,3 +24,15 @@ Deprecation Notices
 
 * The Macros RTE_HASH_BUCKET_ENTRIES_MAX and RTE_HASH_KEY_LENGTH_MAX are
   deprecated and will be removed with version 2.2.
+
+* The following fields have been deprecated in rte_eth_stats:
+  * uint64_t imissed
+  * uint64_t ibadcrc
+  * uint64_t ibadlen
+  * uint64_t imcasts
+  * uint64_t fdirmatch
+  * uint64_t fdirmiss
+  * uint64_t tx_pause_xon
+  * uint64_t rx_pause_xon
+  * uint64_t tx_pause_xoff
+  * uint64_t rx_pause_xoff
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 7689328..c8f0e9a 100755
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -142,17 +142,8 @@ static const struct rte_eth_xstats_name_off rte_stats_strings[] = {
 	{"rx_bytes", offsetof(struct rte_eth_stats, ibytes)},
 	{"tx_bytes", offsetof(struct rte_eth_stats, obytes)},
 	{"tx_errors", offsetof(struct rte_eth_stats, oerrors)},
-	{"rx_missed_errors", offsetof(struct rte_eth_stats, imissed)},
-	{"rx_crc_errors", offsetof(struct rte_eth_stats, ibadcrc)},
-	{"rx_bad_length_errors", offsetof(struct rte_eth_stats, ibadlen)},
 	{"rx_errors", offsetof(struct rte_eth_stats, ierrors)},
 	{"alloc_rx_buff_failed", offsetof(struct rte_eth_stats, rx_nombuf)},
-	{"fdir_match", offsetof(struct rte_eth_stats, fdirmatch)},
-	{"fdir_miss", offsetof(struct rte_eth_stats, fdirmiss)},
-	{"tx_flow_control_xon", offsetof(struct rte_eth_stats, tx_pause_xon)},
-	{"rx_flow_control_xon", offsetof(struct rte_eth_stats, rx_pause_xon)},
-	{"tx_flow_control_xoff", offsetof(struct rte_eth_stats, tx_pause_xoff)},
-	{"rx_flow_control_xoff", offsetof(struct rte_eth_stats, rx_pause_xoff)},
 };
 #define RTE_NB_STATS (sizeof(rte_stats_strings) / sizeof(rte_stats_strings[0]))
 
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index d76bbb3..a862027 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -193,19 +193,29 @@ 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. */
+	/**< Deprecated; Total of RX missed packets (e.g full FIFO). */
+	uint64_t imissed;
+	/**< Deprecated; Total of RX packets with CRC error. */
+	uint64_t ibadcrc;
+	/**< Deprecated; Total of RX packets with bad length. */
+	uint64_t ibadlen;
 	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. */
+	uint64_t imcasts;
+	/**< Deprecated; Total number of multicast received packets. */
 	uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */
-	uint64_t fdirmatch; /**< Total number of RX packets matching a filter. */
-	uint64_t fdirmiss;  /**< Total number of RX packets not matching any filter. */
-	uint64_t tx_pause_xon;  /**< Total nb. of XON pause frame sent. */
-	uint64_t rx_pause_xon;  /**< Total nb. of XON pause frame received. */
-	uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */
-	uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */
+	uint64_t fdirmatch;
+	/**< Deprecated; Total number of RX packets matching a filter. */
+	uint64_t fdirmiss;
+	/**< Deprecated; Total number of RX packets not matching any filter. */
+	uint64_t tx_pause_xon;
+	 /**< Deprecated; Total nb. of XON pause frame sent. */
+	uint64_t rx_pause_xon;
+	/**< Deprecated; Total nb. of XON pause frame received. */
+	uint64_t tx_pause_xoff;
+	/**< Deprecated; Total nb. of XOFF pause frame sent. */
+	uint64_t rx_pause_xoff;
+	/**< Deprecated; Total nb. of XOFF pause frame received. */
 	uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
 	/**< Total number of queue RX packets. */
 	uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 5/9] ixgbe: add NIC specific stats removed from ethdev
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (3 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 6/9] ixgbe: return more errors in ierrors Maryam Tahhan
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Add the NIC/HW specific stats that were removed from rte_ethdev.c to
the extended stats in ixgbe.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 90280ca..1cbf314 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -460,7 +460,15 @@ static const struct rte_ixgbe_xstats_name_off rte_ixgbe_stats_strings[] = {
 	{"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
 	{"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
 	{"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
+	{"rx_phy_multicast_packets", offsetof(struct ixgbe_hw_stats, mprc)},
 	{"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
+	{"rx_crc_errors", offsetof(struct ixgbe_hw_stats, crcerrs)},
+	{"fdir_match", offsetof(struct ixgbe_hw_stats, fdirmatch)},
+	{"fdir_miss", offsetof(struct ixgbe_hw_stats, fdirmiss)},
+	{"tx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxontxc)},
+	{"rx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxonrxc)},
+	{"tx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxofftxc)},
+	{"rx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxoffrxc)},
 };
 
 #define IXGBE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) /	\
@@ -1992,7 +2000,6 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	stats->ibytes = total_qbrc;
 	stats->opackets = hw_stats->gptc;
 	stats->obytes = hw_stats->gotc;
-	stats->imcasts = hw_stats->mprc;
 
 	for (i = 0; i < IXGBE_QUEUE_STAT_COUNTERS; i++) {
 		stats->q_ipackets[i] = hw_stats->qprc[i];
@@ -2003,28 +2010,17 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	}
 
 	/* Rx Errors */
-	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 +
+	stats->ierrors  = hw_stats->crcerrs +
+	                  hw_stats->rlec +
+	                  hw_stats->ruc +
+	                  hw_stats->roc +
+	                  total_missed_rx +
 	                  hw_stats->illerrc + hw_stats->errbc;
 
 	/* Tx Errors */
 	/*txdgpc: packets that are DMA'ed*/
 	/*gptc: packets that are sent*/
 	stats->oerrors  = txdgpc - hw_stats->gptc;
-
-	/* XON/XOFF pause frames */
-	stats->tx_pause_xon  = hw_stats->lxontxc;
-	stats->rx_pause_xon  = hw_stats->lxonrxc;
-	stats->tx_pause_xoff = hw_stats->lxofftxc;
-	stats->rx_pause_xoff = hw_stats->lxoffrxc;
-
-	/* Flow Director Stats registers */
-	stats->fdirmatch = hw_stats->fdirmatch;
-	stats->fdirmiss = hw_stats->fdirmiss;
 }
 
 static void
@@ -2130,6 +2126,7 @@ ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	stats->opackets = hw_stats->vfgptc;
 	stats->obytes = hw_stats->vfgotc;
 	stats->imcasts = hw_stats->vfmprc;
+	/* stats->imcasts should be removed as imcasts is deprecated */
 }
 
 static void
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 6/9] ixgbe: return more errors in ierrors
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (4 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 5/9] ixgbe: add NIC specific stats removed from ethdev Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 7/9] app: remove dump_cfg Maryam Tahhan
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

ierrors only included a base set of error statistics, this patch adds
additional error registers to ierrors.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 1cbf314..1002af4 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -2015,7 +2015,16 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	                  hw_stats->ruc +
 	                  hw_stats->roc +
 	                  total_missed_rx +
-	                  hw_stats->illerrc + hw_stats->errbc;
+	                  hw_stats->illerrc +
+	                  hw_stats->errbc +
+	                  hw_stats->xec +
+	                  hw_stats->mlfc +
+	                  hw_stats->mrfc +
+	                  hw_stats->rfc +
+	                  hw_stats->rjc +
+	                  hw_stats->fccrc +
+	                  hw_stats->fclast +
+	                  (rxnfgpc - hw_stats->gprc); /* PHY Errors*/
 
 	/* Tx Errors */
 	/*txdgpc: packets that are DMA'ed*/
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 7/9] app: remove dump_cfg
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (5 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 6/9] ixgbe: return more errors in ierrors Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 8/9] app: add a new app proc_info Maryam Tahhan
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Remove the dump_cfg application, this will be replaced by a new app
called proc_info that will implement the same functionality as dump_cfg
and extend it to retrieve statistics for DPDK ports.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 app/Makefile          |  1 -
 app/dump_cfg/Makefile | 45 -------------------------
 app/dump_cfg/main.c   | 92 ---------------------------------------------------
 mk/rte.sdktest.mk     |  1 -
 4 files changed, 139 deletions(-)
 delete mode 100644 app/dump_cfg/Makefile
 delete mode 100644 app/dump_cfg/main.c

diff --git a/app/Makefile b/app/Makefile
index 50c670b..81bd222 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -36,6 +36,5 @@ DIRS-$(CONFIG_RTE_LIBRTE_ACL) += test-acl
 DIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test-pipeline
 DIRS-$(CONFIG_RTE_TEST_PMD) += test-pmd
 DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_test
-DIRS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += dump_cfg
 
 include $(RTE_SDK)/mk/rte.subdir.mk
diff --git a/app/dump_cfg/Makefile b/app/dump_cfg/Makefile
deleted file mode 100644
index 3257127..0000000
--- a/app/dump_cfg/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-#   BSD LICENSE
-#
-#   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-#   All rights reserved.
-#
-#   Redistribution and use in source and binary forms, with or without
-#   modification, are permitted provided that the following conditions
-#   are met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the name of Intel Corporation nor the names of its
-#       contributors may be used to endorse or promote products derived
-#       from this software without specific prior written permission.
-#
-#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
-APP = dump_cfg
-
-CFLAGS += $(WERROR_FLAGS)
-
-# all source are stored in SRCS-y
-
-SRCS-y := main.c
-
-# this application needs libraries first
-DEPDIRS-y += lib
-
-include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/dump_cfg/main.c b/app/dump_cfg/main.c
deleted file mode 100644
index 127dbb1..0000000
--- a/app/dump_cfg/main.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- *   All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <inttypes.h>
-#include <sys/queue.h>
-#include <stdlib.h>
-
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_tailq.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_debug.h>
-#include <rte_log.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_string_fns.h>
-
-int
-main(int argc, char **argv)
-{
-	int ret;
-	int i;
-	char c_flag[] = "-c1";
-	char n_flag[] = "-n4";
-	char mp_flag[] = "--proc-type=secondary";
-	char *argp[argc + 3];
-	argp[0] = argv[0];
-	argp[1] = c_flag;
-	argp[2] = n_flag;
-	argp[3] = mp_flag;
-
-	for(i = 1; i < argc; i++) {
-		argp[i + 3] = argv[i];
-	}
-	argc += 3;
-
-	ret = rte_eal_init(argc, argp);
-	if (ret < 0)
-		rte_panic("Cannot init EAL\n");
-
-	printf("----------- MEMORY_SEGMENTS -----------\n");
-	rte_dump_physmem_layout(stdout);
-	printf("--------- END_MEMORY_SEGMENTS ---------\n");
-
-	printf("------------ MEMORY_ZONES -------------\n");
-	rte_memzone_dump(stdout);
-	printf("---------- END_MEMORY_ZONES -----------\n");
-
-	printf("------------- TAIL_QUEUES -------------\n");
-	rte_dump_tailq(stdout);
-	printf("---------- END_TAIL_QUEUES ------------\n");
-
-	return 0;
-}
diff --git a/mk/rte.sdktest.mk b/mk/rte.sdktest.mk
index 2696142..60a4fd9 100644
--- a/mk/rte.sdktest.mk
+++ b/mk/rte.sdktest.mk
@@ -78,7 +78,6 @@ coverage:
 			$(RTE_OUTPUT)/app/test \
 			$(RTE_TARGET) \
 			$(BLACKLIST) $(WHITELIST) ; \
-		$(RTE_OUTPUT)/app/dump_cfg --file-prefix=ring_perf ; \
 	else \
 		echo "No test found, please do a 'make build' first, or specify O=" ;\
 	fi
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 8/9] app: add a new app proc_info
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (6 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 7/9] app: remove dump_cfg Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 9/9] doc: Add documentation for proc_info Maryam Tahhan
  2015-07-16  7:54 ` [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Olivier MATZ
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

proc_info displays statistics information including extended stats for
given DPDK ports and dumps the memory information for DPDK.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 MAINTAINERS            |   4 +
 app/Makefile           |   1 +
 app/proc_info/Makefile |  45 +++++++
 app/proc_info/main.c   | 354 +++++++++++++++++++++++++++++++++++++++++++++++++
 mk/rte.sdktest.mk      |   3 +-
 5 files changed, 406 insertions(+), 1 deletion(-)
 create mode 100644 app/proc_info/Makefile
 create mode 100644 app/proc_info/main.c

diff --git a/MAINTAINERS b/MAINTAINERS
index a15105d..529ab92 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -502,3 +502,7 @@ F: examples/tep_termination/
 F: examples/vmdq/
 F: examples/vmdq_dcb/
 F: doc/guides/sample_app_ug/vmdq_dcb_forwarding.rst
+
+M: Maryam Tahhan <maryam.tahhan@intel.com>
+M: John McNamara <john.mcnamara@intel.com>
+F: app/proc_info/
diff --git a/app/Makefile b/app/Makefile
index 81bd222..88c0bad 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -36,5 +36,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_ACL) += test-acl
 DIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test-pipeline
 DIRS-$(CONFIG_RTE_TEST_PMD) += test-pmd
 DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_test
+DIRS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += proc_info
 
 include $(RTE_SDK)/mk/rte.subdir.mk
diff --git a/app/proc_info/Makefile b/app/proc_info/Makefile
new file mode 100644
index 0000000..243b060
--- /dev/null
+++ b/app/proc_info/Makefile
@@ -0,0 +1,45 @@
+#   BSD LICENSE
+#
+#   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+#   All rights reserved.
+#
+#   Redistribution and use in source and binary forms, with or without
+#   modification, are permitted provided that the following conditions
+#   are met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in
+#       the documentation and/or other materials provided with the
+#       distribution.
+#     * Neither the name of Intel Corporation nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = proc_info
+
+CFLAGS += $(WERROR_FLAGS)
+
+# all source are stored in SRCS-y
+
+SRCS-y := main.c
+
+# this application needs libraries first
+DEPDIRS-y += lib
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/proc_info/main.c b/app/proc_info/main.c
new file mode 100644
index 0000000..14fda8a
--- /dev/null
+++ b/app/proc_info/main.c
@@ -0,0 +1,354 @@
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Intel Corporation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <inttypes.h>
+#include <sys/queue.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+#include <rte_eal.h>
+#include <rte_config.h>
+#include <rte_common.h>
+#include <rte_debug.h>
+#include <rte_ethdev.h>
+#include <rte_malloc.h>
+#include <rte_memory.h>
+#include <rte_memzone.h>
+#include <rte_launch.h>
+#include <rte_tailq.h>
+#include <rte_per_lcore.h>
+#include <rte_lcore.h>
+#include <rte_debug.h>
+#include <rte_log.h>
+#include <rte_atomic.h>
+#include <rte_branch_prediction.h>
+#include <rte_string_fns.h>
+
+/* Maximum long option length for option parsing. */
+#define MAX_LONG_OPT_SZ 64
+#define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
+
+/**< mask of enabled ports */
+static uint32_t enabled_port_mask;
+/**< Enable stats. */
+static uint32_t enable_stats;
+/**< Enable xstats. */
+static uint32_t enable_xstats;
+/**< Enable stats reset. */
+static uint32_t reset_stats;
+/**< Enable xstats reset. */
+static uint32_t reset_xstats;
+/**< Enable memory info. */
+static uint32_t mem_info;
+
+/**< display usage */
+static void
+proc_info_usage(const char *prgname)
+{
+	printf("%s [EAL options] -- -p PORTMASK\n"
+		"  -m to display DPDK memory zones, segments and TAILQ information\n"
+		"  -p PORTMASK: hexadecimal bitmask of ports to retrieve stats for\n"
+		"  --stats: to display port statistics, enabled by default\n"
+		"  --xstats: to display extended port statistics, disabled by "
+			"default\n"
+		"  --stats-reset: to reset port statistics\n"
+		"  --xstats-reset: to reset port extended statistics\n",
+		prgname);
+	return;
+}
+
+/*
+ * Parse the portmask provided at run time.
+ */
+static int
+parse_portmask(const char *portmask)
+{
+	char *end = NULL;
+	unsigned long pm;
+
+	errno = 0;
+
+	/* parse hexadecimal string */
+	pm = strtoul(portmask, &end, 16);
+	if ((portmask[0] == '\0') || (end == NULL) || (*end != '\0') ||
+		(errno != 0)) {
+		printf("%s ERROR parsing the port mask\n", __func__);
+		return -1;
+	}
+
+	if (pm == 0)
+		return -1;
+
+	return pm;
+
+}
+
+/* Parse the argument given in the command line of the application */
+static int
+proc_info_parse_args(int argc, char **argv)
+{
+	int opt;
+	int option_index;
+	char *prgname = argv[0];
+	static struct option long_option[] = {
+		{"stats", 0, NULL, 0},
+		{"stats-reset", 0, NULL, 0},
+		{"xstats", 0, NULL, 0},
+		{"xstats-reset", 0, NULL, 0},
+		{NULL, 0, 0, 0}
+	};
+
+	if (argc == 1)
+		proc_info_usage(prgname);
+
+	/* Parse command line */
+	while ((opt = getopt_long(argc, argv, "p:m",
+			long_option, &option_index)) != EOF) {
+		switch (opt) {
+		/* portmask */
+		case 'p':
+			enabled_port_mask = parse_portmask(optarg);
+			if (enabled_port_mask == 0) {
+				printf("invalid portmask\n");
+				proc_info_usage(prgname);
+				return -1;
+			}
+			break;
+		case 'm':
+			mem_info = 1;
+			break;
+		case 0:
+			/* Print stats */
+			if (!strncmp(long_option[option_index].name, "stats",
+					MAX_LONG_OPT_SZ))
+				enable_stats = 1;
+			/* Print xstats */
+			else if (!strncmp(long_option[option_index].name, "xstats",
+					MAX_LONG_OPT_SZ))
+				enable_xstats = 1;
+			/* Reset stats */
+			if (!strncmp(long_option[option_index].name, "stats-reset",
+					MAX_LONG_OPT_SZ))
+				reset_stats = 1;
+			/* Reset xstats */
+			else if (!strncmp(long_option[option_index].name, "xstats-reset",
+					MAX_LONG_OPT_SZ))
+				reset_xstats = 1;
+			break;
+
+		default:
+			proc_info_usage(prgname);
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static void
+meminfo_display(void)
+{
+	printf("----------- MEMORY_SEGMENTS -----------\n");
+	rte_dump_physmem_layout(stdout);
+	printf("--------- END_MEMORY_SEGMENTS ---------\n");
+
+	printf("------------ MEMORY_ZONES -------------\n");
+	rte_memzone_dump(stdout);
+	printf("---------- END_MEMORY_ZONES -----------\n");
+
+	printf("------------- TAIL_QUEUES -------------\n");
+	rte_dump_tailq(stdout);
+	printf("---------- END_TAIL_QUEUES ------------\n");
+}
+
+static void
+nic_stats_display(uint8_t port_id)
+{
+	struct rte_eth_stats stats;
+	uint8_t i;
+
+	static const char *nic_stats_border = "########################";
+
+	rte_eth_stats_get(port_id, &stats);
+	printf("\n  %s NIC statistics for port %-2d %s\n",
+		   nic_stats_border, port_id, nic_stats_border);
+
+	printf("  RX-packets: %-10"PRIu64"  RX-errors:  %-10"PRIu64
+	       "  RX-bytes:  %-10"PRIu64"\n", stats.ipackets, stats.ierrors,
+	       stats.ibytes);
+	printf("  RX-nombuf:  %-10"PRIu64"\n", stats.rx_nombuf);
+	printf("  TX-packets: %-10"PRIu64"  TX-errors:  %-10"PRIu64
+	       "  TX-bytes:  %-10"PRIu64"\n", stats.opackets, stats.oerrors,
+	       stats.obytes);
+
+	printf("\n");
+	for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS; i++) {
+		printf("  Stats reg %2d RX-packets: %-10"PRIu64
+		       "  RX-errors: %-10"PRIu64
+		       "  RX-bytes: %-10"PRIu64"\n",
+		       i, stats.q_ipackets[i], stats.q_errors[i], stats.q_ibytes[i]);
+	}
+
+	printf("\n");
+	for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS; i++) {
+		printf("  Stats reg %2d TX-packets: %-10"PRIu64
+		       "  TX-bytes: %-10"PRIu64"\n",
+		       i, stats.q_opackets[i], stats.q_obytes[i]);
+	}
+
+	printf("  %s############################%s\n",
+		   nic_stats_border, nic_stats_border);
+}
+
+static void
+nic_stats_clear(uint8_t port_id)
+{
+	printf("\n Clearing NIC stats for port %d\n", port_id);
+	rte_eth_stats_reset(port_id);
+	printf("\n  NIC statistics for port %d cleared\n", port_id);
+}
+
+static void
+nic_xstats_display(uint8_t port_id)
+{
+	struct rte_eth_xstats *xstats;
+	int len, ret, i;
+	static const char *nic_stats_border = "########################";
+
+	len = rte_eth_xstats_get(port_id, NULL, 0);
+	if (len < 0) {
+		printf("Cannot get xstats count\n");
+		return;
+	}
+	xstats = malloc(sizeof(xstats[0]) * len);
+	if (xstats == NULL) {
+		printf("Cannot allocate memory for xstats\n");
+		return;
+	}
+
+	printf("###### NIC extended statistics for port %-2d #########\n",
+			   port_id);
+	printf("%s############################\n",
+			   nic_stats_border);
+	ret = rte_eth_xstats_get(port_id, xstats, len);
+	if (ret < 0 || ret > len) {
+		printf("Cannot get xstats\n");
+		free(xstats);
+		return;
+	}
+
+	for (i = 0; i < len; i++)
+		printf("%s: %"PRIu64"\n", xstats[i].name, xstats[i].value);
+
+	printf("%s############################\n",
+			   nic_stats_border);
+	free(xstats);
+}
+
+static void
+nic_xstats_clear(uint8_t port_id)
+{
+	printf("\n Clearing NIC xstats for port %d\n", port_id);
+	rte_eth_xstats_reset(port_id);
+	printf("\n  NIC extended statistics for port %d cleared\n", port_id);
+}
+
+int
+main(int argc, char **argv)
+{
+	int ret;
+	int i;
+	char c_flag[] = "-c1";
+	char n_flag[] = "-n4";
+	char mp_flag[] = "--proc-type=secondary";
+	char *argp[argc + 3];
+	uint8_t nb_ports;
+
+	argp[0] = argv[0];
+	argp[1] = c_flag;
+	argp[2] = n_flag;
+	argp[3] = mp_flag;
+
+	for (i = 1; i < argc; i++)
+		argp[i + 3] = argv[i];
+
+	argc += 3;
+
+	ret = rte_eal_init(argc, argp);
+	if (ret < 0)
+		rte_panic("Cannot init EAL\n");
+
+	argc -= ret;
+	argv += (ret - 3);
+
+	/* parse app arguments */
+	ret = proc_info_parse_args(argc, argv);
+	if (ret < 0)
+		rte_exit(EXIT_FAILURE, "Invalid argument\n");
+
+	if (mem_info) {
+		meminfo_display();
+		return 0;
+	}
+
+	nb_ports = rte_eth_dev_count();
+	if (nb_ports == 0)
+		rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n");
+
+
+	if (nb_ports > RTE_MAX_ETHPORTS)
+		nb_ports = RTE_MAX_ETHPORTS;
+
+	/* If no port mask was specified*/
+	if (enabled_port_mask == 0)
+		enabled_port_mask = 0xffff;
+
+	for (i = 0; i < nb_ports; i++) {
+		if (enabled_port_mask & (1 << i)) {
+			if (enable_stats)
+				nic_stats_display(i);
+			else if (enable_xstats)
+				nic_xstats_display(i);
+			else if (reset_stats)
+				nic_stats_clear(i);
+			else if (reset_xstats)
+				nic_xstats_clear(i);
+		}
+	}
+
+	return 0;
+}
diff --git a/mk/rte.sdktest.mk b/mk/rte.sdktest.mk
index 60a4fd9..59a29de 100644
--- a/mk/rte.sdktest.mk
+++ b/mk/rte.sdktest.mk
@@ -66,7 +66,7 @@ test fast_test ring_test mempool_test perf_test:
 	fi
 
 # this is a special target to ease the pain of running coverage tests
-# this runs all the autotests, cmdline_test script and dump_cfg
+# this runs all the autotests, cmdline_test script and proc_info
 coverage:
 	@mkdir -p $(AUTOTEST_DIR) ; \
 	cd $(AUTOTEST_DIR) ; \
@@ -78,6 +78,7 @@ coverage:
 			$(RTE_OUTPUT)/app/test \
 			$(RTE_TARGET) \
 			$(BLACKLIST) $(WHITELIST) ; \
+		$(RTE_OUTPUT)/app/proc_info --file-prefix=ring_perf -- -m; \
 	else \
 		echo "No test found, please do a 'make build' first, or specify O=" ;\
 	fi
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [dpdk-dev] [PATCH v6 9/9] doc: Add documentation for proc_info
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (7 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 8/9] app: add a new app proc_info Maryam Tahhan
@ 2015-07-15 13:11 ` Maryam Tahhan
  2015-07-16  7:54 ` [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Olivier MATZ
  9 siblings, 0 replies; 17+ messages in thread
From: Maryam Tahhan @ 2015-07-15 13:11 UTC (permalink / raw)
  To: dev

Add a guide for the proc_info application.

Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
---
 doc/guides/sample_app_ug/index.rst     |  1 +
 doc/guides/sample_app_ug/proc_info.rst | 71 ++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 doc/guides/sample_app_ug/proc_info.rst

diff --git a/doc/guides/sample_app_ug/index.rst b/doc/guides/sample_app_ug/index.rst
index e1a0c56..8a3572f 100644
--- a/doc/guides/sample_app_ug/index.rst
+++ b/doc/guides/sample_app_ug/index.rst
@@ -71,6 +71,7 @@ Sample Applications User Guide
     test_pipeline
     dist_app
     vm_power_management
+    proc_info
 
 **Figures**
 
diff --git a/doc/guides/sample_app_ug/proc_info.rst b/doc/guides/sample_app_ug/proc_info.rst
new file mode 100644
index 0000000..73cd4ef
--- /dev/null
+++ b/doc/guides/sample_app_ug/proc_info.rst
@@ -0,0 +1,71 @@
+
+..  BSD LICENSE
+    Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+    * Neither the name of Intel Corporation nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+proc_info Application
+========================
+
+The proc_info application is a Data Plane Development Kit (DPDK) application
+that runs as a DPDK secondary process and is capable of retrieving port
+statistics, resetting port statistics and printing DPDK memory information.
+This application extends the original functionality that was supported by
+dump_cfg.
+
+Running the Application
+-----------------------
+The application has a number of command line options:
+
+.. code-block:: console
+
+   ./$(RTE_TARGET)/app/proc_info -- -m | [-p PORTMASK] [--stats | --xstats |
+   --stats-reset | --xstats-reset]
+
+Parameters
+~~~~~~~~~~
+**-p PORTMASK**: Hexadecimal bitmask of ports to configure.
+
+**--stats**
+The stats parameter controls the printing of generic port statistics. If no
+port mask is specified stats are printed for all DPDK ports.
+
+**--xstats**
+The stats parameter controls the printing of extended port statistics. If no
+port mask is specified xstats are printed for all DPDK ports.
+
+**--stats-reset**
+The stats-reset parameter controls the resetting of generic port statistics. If
+no port mask is specified, the generic stats are reset for all DPDK ports.
+
+**--xstats-reset**
+The xstats-reset parameter controls the resetting of extended port statistics.
+If no port mask is specified xstats are reset for all DPDK ports.
+
+**-m**: Print DPDK memory information.
-- 
2.4.3

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps
  2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
                   ` (8 preceding siblings ...)
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 9/9] doc: Add documentation for proc_info Maryam Tahhan
@ 2015-07-16  7:54 ` Olivier MATZ
  2015-07-17  0:32   ` Thomas Monjalon
  9 siblings, 1 reply; 17+ messages in thread
From: Olivier MATZ @ 2015-07-16  7:54 UTC (permalink / raw)
  To: Maryam Tahhan, dev

Hi Maryam,

On 07/15/2015 03:11 PM, Maryam Tahhan wrote:
> This patch set implements xstats_get() and xstats_reset() in dev_ops for
> ixgbe to expose detailed error statistics to DPDK applications. The
> dump_cfg application was extended to demonstrate the usage of
> retrieving statistics for DPDK interfaces and renamed to proc_info
> in order reflect this new functionality. This patch set also removes non
> generic statistics from the statistics strings at the ethdev level and
> marks the relevant registers as depricated in struct rte_eth_stats.
>
> v2:
>   - Fixed patch dependencies.
>   - Broke down patches into smaller logical changes.
>
> v3:
>   - Removes non-generic stats fields in rte_stats_strings and deprecates
>     the fields related to them in struct rte_eth_stats.
>   - Modifies rte_eth_xstats_get() to return generic stats and extended
>     stats.
>
> v4:
>   - Replace count use in the loop in ixgbe_dev_xstats_get() function
>     definition with i.
>   - Breakdown "ixgbe: add NIC specific stats removed from ethdev" into
>     two patches, one that adds the stats and another that extends
>     ierrors to include more error stats.
>   - Remove second call to ixgbe_dev_xstats_get() from
>     rte_eth_xstats_get().
>
> v5:
>   - Added documentation for proc_info.
>   - Fixed proc_info copyright year.
>   - Display queue stats for all devices in proc_info.
>
> v6:
>   - Modified the driver implementation of ixgbe_dev_xstats_get() so that
>     it doesn't worry about the generic stats written by the generic layer.
>
> Maryam Tahhan (9):
>    ixgbe: move stats register reads to a new function
>    ixgbe: add functions to get and reset xstats
>    ethdev: expose extended error stats
>    ethdev: remove HW specific stats in stats structs
>    ixgbe: add NIC specific stats removed from ethdev
>    ixgbe: return more errors in ierrors
>    app: remove dump_cfg
>    app: add a new app proc_info
>    doc: Add documentation for proc_info
>
>   MAINTAINERS                            |   4 +
>   app/Makefile                           |   2 +-
>   app/dump_cfg/Makefile                  |  45 -----
>   app/dump_cfg/main.c                    |  92 ---------
>   app/proc_info/Makefile                 |  45 +++++
>   app/proc_info/main.c                   | 354 +++++++++++++++++++++++++++++++++
>   doc/guides/rel_notes/abi.rst           |  12 ++
>   doc/guides/sample_app_ug/index.rst     |   1 +
>   doc/guides/sample_app_ug/proc_info.rst |  71 +++++++
>   drivers/net/ixgbe/ixgbe_ethdev.c       | 193 ++++++++++++++----
>   lib/librte_ether/rte_ethdev.c          |  40 ++--
>   lib/librte_ether/rte_ethdev.h          |  30 ++-
>   mk/rte.sdktest.mk                      |   4 +-
>   13 files changed, 685 insertions(+), 208 deletions(-)
>   delete mode 100644 app/dump_cfg/Makefile
>   delete mode 100644 app/dump_cfg/main.c
>   create mode 100644 app/proc_info/Makefile
>   create mode 100644 app/proc_info/main.c
>   create mode 100644 doc/guides/sample_app_ug/proc_info.rst
>   mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c

Acked-by: Olivier Matz <olivier.matz@6wind.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats Maryam Tahhan
@ 2015-07-16 23:02   ` Thomas Monjalon
  0 siblings, 0 replies; 17+ messages in thread
From: Thomas Monjalon @ 2015-07-16 23:02 UTC (permalink / raw)
  To: Maryam Tahhan; +Cc: dev

2015-07-15 14:11, Maryam Tahhan:
> Extend rte_eth_xstats_get to retrieve additional stats from the device
> driver as well the ethdev generic stats.
> 
> Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
> ---
>  lib/librte_ether/rte_ethdev.c | 31 ++++++++++++++++++++-----------
>  1 file changed, 20 insertions(+), 11 deletions(-)
>  mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c
> 
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> old mode 100644
> new mode 100755

Beware of not changing file mode.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs Maryam Tahhan
@ 2015-07-16 23:04   ` Thomas Monjalon
  2015-08-17 14:53   ` Olivier MATZ
  1 sibling, 0 replies; 17+ messages in thread
From: Thomas Monjalon @ 2015-07-16 23:04 UTC (permalink / raw)
  To: Maryam Tahhan; +Cc: dev

2015-07-15 14:11, Maryam Tahhan:
> Remove non generic stats in rte_stats_strings and mark the relevant
> fields in struct rte_eth_stats as deprecated.
> 
> Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>

> -	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. */
> +	/**< Deprecated; Total of RX missed packets (e.g full FIFO). */
> +	uint64_t imissed;
> +	/**< Deprecated; Total of RX packets with CRC error. */
> +	uint64_t ibadcrc;
> +	/**< Deprecated; Total of RX packets with bad length. */
> +	uint64_t ibadlen;

The /**< style comments must be put *after* the field.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps
  2015-07-16  7:54 ` [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Olivier MATZ
@ 2015-07-17  0:32   ` Thomas Monjalon
  0 siblings, 0 replies; 17+ messages in thread
From: Thomas Monjalon @ 2015-07-17  0:32 UTC (permalink / raw)
  To: Maryam Tahhan; +Cc: dev

2015-07-16 09:54, Olivier MATZ:
> On 07/15/2015 03:11 PM, Maryam Tahhan wrote:
> > This patch set implements xstats_get() and xstats_reset() in dev_ops for
> > ixgbe to expose detailed error statistics to DPDK applications. The
> > dump_cfg application was extended to demonstrate the usage of
> > retrieving statistics for DPDK interfaces and renamed to proc_info
> > in order reflect this new functionality. This patch set also removes non
> > generic statistics from the statistics strings at the ethdev level and
> > marks the relevant registers as depricated in struct rte_eth_stats.
> 
> Acked-by: Olivier Matz <olivier.matz@6wind.com>

Applied with minor fixes, thanks

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs
  2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs Maryam Tahhan
  2015-07-16 23:04   ` Thomas Monjalon
@ 2015-08-17 14:53   ` Olivier MATZ
  2015-08-19 12:53     ` Tahhan, Maryam
  1 sibling, 1 reply; 17+ messages in thread
From: Olivier MATZ @ 2015-08-17 14:53 UTC (permalink / raw)
  To: Maryam Tahhan, dev

Hi Maryam,

On 07/15/2015 03:11 PM, Maryam Tahhan wrote:
> Remove non generic stats in rte_stats_strings and mark the relevant
> fields in struct rte_eth_stats as deprecated.
> 
> Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
> ---
>  doc/guides/rel_notes/abi.rst  | 12 ++++++++++++
>  lib/librte_ether/rte_ethdev.c |  9 ---------
>  lib/librte_ether/rte_ethdev.h | 30 ++++++++++++++++++++----------
>  3 files changed, 32 insertions(+), 19 deletions(-)
> 
> diff --git a/doc/guides/rel_notes/abi.rst b/doc/guides/rel_notes/abi.rst
> index 931e785..d5bf625 100644
> --- a/doc/guides/rel_notes/abi.rst
> +++ b/doc/guides/rel_notes/abi.rst
> @@ -24,3 +24,15 @@ Deprecation Notices
>  
>  * The Macros RTE_HASH_BUCKET_ENTRIES_MAX and RTE_HASH_KEY_LENGTH_MAX are
>    deprecated and will be removed with version 2.2.
> +
> +* The following fields have been deprecated in rte_eth_stats:
> +  * uint64_t imissed
> +  * uint64_t ibadcrc
> +  * uint64_t ibadlen
> +  * uint64_t imcasts
> +  * uint64_t fdirmatch
> +  * uint64_t fdirmiss
> +  * uint64_t tx_pause_xon
> +  * uint64_t rx_pause_xon
> +  * uint64_t tx_pause_xoff
> +  * uint64_t rx_pause_xoff

Looking again at this patch, I'm wondering if "imissed" should
be kept instead of beeing deprecated. I think it could be useful to
differentiate ierrors from imissed, and it's not a hw-specific
statistic. What do you think?

One more comment: it seems these fields are marked as deprecated but
they are still used on other drivers (e1000, i40e, ...).

Regards,
Olivier


> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index 7689328..c8f0e9a 100755
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -142,17 +142,8 @@ static const struct rte_eth_xstats_name_off rte_stats_strings[] = {
>  	{"rx_bytes", offsetof(struct rte_eth_stats, ibytes)},
>  	{"tx_bytes", offsetof(struct rte_eth_stats, obytes)},
>  	{"tx_errors", offsetof(struct rte_eth_stats, oerrors)},
> -	{"rx_missed_errors", offsetof(struct rte_eth_stats, imissed)},
> -	{"rx_crc_errors", offsetof(struct rte_eth_stats, ibadcrc)},
> -	{"rx_bad_length_errors", offsetof(struct rte_eth_stats, ibadlen)},
>  	{"rx_errors", offsetof(struct rte_eth_stats, ierrors)},
>  	{"alloc_rx_buff_failed", offsetof(struct rte_eth_stats, rx_nombuf)},
> -	{"fdir_match", offsetof(struct rte_eth_stats, fdirmatch)},
> -	{"fdir_miss", offsetof(struct rte_eth_stats, fdirmiss)},
> -	{"tx_flow_control_xon", offsetof(struct rte_eth_stats, tx_pause_xon)},
> -	{"rx_flow_control_xon", offsetof(struct rte_eth_stats, rx_pause_xon)},
> -	{"tx_flow_control_xoff", offsetof(struct rte_eth_stats, tx_pause_xoff)},
> -	{"rx_flow_control_xoff", offsetof(struct rte_eth_stats, rx_pause_xoff)},
>  };
>  #define RTE_NB_STATS (sizeof(rte_stats_strings) / sizeof(rte_stats_strings[0]))
>  
> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
> index d76bbb3..a862027 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -193,19 +193,29 @@ 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. */
> +	/**< Deprecated; Total of RX missed packets (e.g full FIFO). */
> +	uint64_t imissed;
> +	/**< Deprecated; Total of RX packets with CRC error. */
> +	uint64_t ibadcrc;
> +	/**< Deprecated; Total of RX packets with bad length. */
> +	uint64_t ibadlen;
>  	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. */
> +	uint64_t imcasts;
> +	/**< Deprecated; Total number of multicast received packets. */
>  	uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */
> -	uint64_t fdirmatch; /**< Total number of RX packets matching a filter. */
> -	uint64_t fdirmiss;  /**< Total number of RX packets not matching any filter. */
> -	uint64_t tx_pause_xon;  /**< Total nb. of XON pause frame sent. */
> -	uint64_t rx_pause_xon;  /**< Total nb. of XON pause frame received. */
> -	uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */
> -	uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */
> +	uint64_t fdirmatch;
> +	/**< Deprecated; Total number of RX packets matching a filter. */
> +	uint64_t fdirmiss;
> +	/**< Deprecated; Total number of RX packets not matching any filter. */
> +	uint64_t tx_pause_xon;
> +	 /**< Deprecated; Total nb. of XON pause frame sent. */
> +	uint64_t rx_pause_xon;
> +	/**< Deprecated; Total nb. of XON pause frame received. */
> +	uint64_t tx_pause_xoff;
> +	/**< Deprecated; Total nb. of XOFF pause frame sent. */
> +	uint64_t rx_pause_xoff;
> +	/**< Deprecated; Total nb. of XOFF pause frame received. */
>  	uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
>  	/**< Total number of queue RX packets. */
>  	uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs
  2015-08-17 14:53   ` Olivier MATZ
@ 2015-08-19 12:53     ` Tahhan, Maryam
  2015-08-19 13:44       ` Olivier MATZ
  0 siblings, 1 reply; 17+ messages in thread
From: Tahhan, Maryam @ 2015-08-19 12:53 UTC (permalink / raw)
  To: Olivier MATZ, dev

> From: Olivier MATZ [mailto:olivier.matz@6wind.com]
> Sent: Monday, August 17, 2015 3:54 PM
> To: Tahhan, Maryam; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in
> stats structs
> 
> Hi Maryam,
> 
> On 07/15/2015 03:11 PM, Maryam Tahhan wrote:
> > Remove non generic stats in rte_stats_strings and mark the relevant
> > fields in struct rte_eth_stats as deprecated.
> >
> > Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
> > ---
> >  doc/guides/rel_notes/abi.rst  | 12 ++++++++++++
> > lib/librte_ether/rte_ethdev.c |  9 ---------
> > lib/librte_ether/rte_ethdev.h | 30 ++++++++++++++++++++----------
> >  3 files changed, 32 insertions(+), 19 deletions(-)
> >
> > diff --git a/doc/guides/rel_notes/abi.rst
> > b/doc/guides/rel_notes/abi.rst index 931e785..d5bf625 100644
> > --- a/doc/guides/rel_notes/abi.rst
> > +++ b/doc/guides/rel_notes/abi.rst
> > @@ -24,3 +24,15 @@ Deprecation Notices
> >
> >  * The Macros RTE_HASH_BUCKET_ENTRIES_MAX and
> RTE_HASH_KEY_LENGTH_MAX are
> >    deprecated and will be removed with version 2.2.
> > +
> > +* The following fields have been deprecated in rte_eth_stats:
> > +  * uint64_t imissed
> > +  * uint64_t ibadcrc
> > +  * uint64_t ibadlen
> > +  * uint64_t imcasts
> > +  * uint64_t fdirmatch
> > +  * uint64_t fdirmiss
> > +  * uint64_t tx_pause_xon
> > +  * uint64_t rx_pause_xon
> > +  * uint64_t tx_pause_xoff
> > +  * uint64_t rx_pause_xoff
> 
> Looking again at this patch, I'm wondering if "imissed" should be kept instead
> of beeing deprecated. I think it could be useful to differentiate ierrors from
> imissed, and it's not a hw-specific statistic. What do you think?
> 
> One more comment: it seems these fields are marked as deprecated but they
> are still used on other drivers (e1000, i40e, ...).
> 
> Regards,
> Olivier
> 


Hi Olivier
I can remove the deprecated status for imissed to leave the differentiation between errors and missed packets.
igb and i40e will be updated soon to reflect this. I marked them as deprecated to deter their use in the future. Older instances/use will need to be resolved.

Regards
Maryam
<snip>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs
  2015-08-19 12:53     ` Tahhan, Maryam
@ 2015-08-19 13:44       ` Olivier MATZ
  0 siblings, 0 replies; 17+ messages in thread
From: Olivier MATZ @ 2015-08-19 13:44 UTC (permalink / raw)
  To: Tahhan, Maryam, dev

Hi Maryam,

On 08/19/2015 02:53 PM, Tahhan, Maryam wrote:
>> From: Olivier MATZ [mailto:olivier.matz@6wind.com]
>> Sent: Monday, August 17, 2015 3:54 PM
>> To: Tahhan, Maryam; dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in
>> stats structs
>>
>> Hi Maryam,
>>
>> On 07/15/2015 03:11 PM, Maryam Tahhan wrote:
>>> Remove non generic stats in rte_stats_strings and mark the relevant
>>> fields in struct rte_eth_stats as deprecated.
>>>
>>
>> Looking again at this patch, I'm wondering if "imissed" should be kept instead
>> of beeing deprecated. I think it could be useful to differentiate ierrors from
>> imissed, and it's not a hw-specific statistic. What do you think?
>>
>> One more comment: it seems these fields are marked as deprecated but they
>> are still used on other drivers (e1000, i40e, ...).
>>
>> Regards,
>> Olivier
>>
>
>
> Hi Olivier
> I can remove the deprecated status for imissed to leave the differentiation between errors and missed packets.
> igb and i40e will be updated soon to reflect this. I marked them as deprecated to deter their use in the future. Older instances/use will need to be resolved.

 From my point of view, yes, I think it's better to keep different stats
for imissed and ierrors as it can be useful to determinine the cause of
packet losses. If nobody disagrees, I think we could remove the
deprecation notice for imissed.

Regards,
Olivier

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2015-08-19 13:44 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-15 13:11 [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 1/9] ixgbe: move stats register reads to a new function Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 2/9] ixgbe: add functions to get and reset xstats Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 3/9] ethdev: expose extended error stats Maryam Tahhan
2015-07-16 23:02   ` Thomas Monjalon
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 4/9] ethdev: remove HW specific stats in stats structs Maryam Tahhan
2015-07-16 23:04   ` Thomas Monjalon
2015-08-17 14:53   ` Olivier MATZ
2015-08-19 12:53     ` Tahhan, Maryam
2015-08-19 13:44       ` Olivier MATZ
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 5/9] ixgbe: add NIC specific stats removed from ethdev Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 6/9] ixgbe: return more errors in ierrors Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 7/9] app: remove dump_cfg Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 8/9] app: add a new app proc_info Maryam Tahhan
2015-07-15 13:11 ` [dpdk-dev] [PATCH v6 9/9] doc: Add documentation for proc_info Maryam Tahhan
2015-07-16  7:54 ` [dpdk-dev] [PATCH v6 0/9] Expose IXGBE extended stats to DPDK apps Olivier MATZ
2015-07-17  0:32   ` 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).