[dpdk-dev] [PATCH v3 03/11] ethdev: update xstats_get() strings and Q handling

Tahhan, Maryam maryam.tahhan at intel.com
Fri Oct 23 16:35:28 CEST 2015


> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Harry van Haaren
> Sent: Thursday, October 22, 2015 4:48 PM
> To: dev at dpdk.org
> Subject: [dpdk-dev] [PATCH v3 03/11] ethdev: update xstats_get() strings and
> Q handling
> 
> Update the strings used for presenting stats to adhere to the scheme
> previously presented. Updated xstats_get() function to handle Q information
> only if xstats() is not implemented in the PMD, providing the PMD with the
> needed flexibility to expose its extended Q stats.
> 
> Signed-off-by: Harry van Haaren <harry.van.haaren at intel.com>
> ---
>  lib/librte_ether/rte_ethdev.c | 38 +++++++++++++++++++++++---------------
>  1 file changed, 23 insertions(+), 15 deletions(-)
> 
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index f593f6e..07f0c26 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -137,27 +137,30 @@ struct rte_eth_xstats_name_off {  };
> 
>  static const struct rte_eth_xstats_name_off rte_stats_strings[] = {
> -	{"rx_packets", offsetof(struct rte_eth_stats, ipackets)},
> -	{"tx_packets", offsetof(struct rte_eth_stats, opackets)},
> -	{"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_good_packets", offsetof(struct rte_eth_stats, ipackets)},
> +	{"tx_good_packets", offsetof(struct rte_eth_stats, opackets)},
> +	{"rx_good_bytes", offsetof(struct rte_eth_stats, ibytes)},
> +	{"tx_good_bytes", offsetof(struct rte_eth_stats, obytes)},

Hi Harry
If there are any apps today scraping the existing stats this will cause an issue.
I think the "good" description breaks the meaning of the various stats defined in the header. For example rx_packets is Total number of successfully received packets rather than the "good" packets.

BR
Maryam
>  	{"rx_errors", offsetof(struct rte_eth_stats, ierrors)},
> -	{"alloc_rx_buff_failed", offsetof(struct rte_eth_stats, rx_nombuf)},
> +	{"tx_errors", offsetof(struct rte_eth_stats, oerrors)},
> +	{"rx_mbuf_allocation_errors", offsetof(struct rte_eth_stats,
> +		rx_nombuf)},
>  };
> +
>  #define RTE_NB_STATS (sizeof(rte_stats_strings) / sizeof(rte_stats_strings[0]))
> 
>  static const struct rte_eth_xstats_name_off rte_rxq_stats_strings[] = {
> -	{"rx_packets", offsetof(struct rte_eth_stats, q_ipackets)},
> -	{"rx_bytes", offsetof(struct rte_eth_stats, q_ibytes)},
> +	{"packets", offsetof(struct rte_eth_stats, q_ipackets)},
> +	{"bytes", offsetof(struct rte_eth_stats, q_ibytes)},
> +	{"errors", offsetof(struct rte_eth_stats, q_errors)},
>  };
> +
>  #define RTE_NB_RXQ_STATS (sizeof(rte_rxq_stats_strings) /	\
>  		sizeof(rte_rxq_stats_strings[0]))
> 
>  static const struct rte_eth_xstats_name_off rte_txq_stats_strings[] = {
> -	{"tx_packets", offsetof(struct rte_eth_stats, q_opackets)},
> -	{"tx_bytes", offsetof(struct rte_eth_stats, q_obytes)},
> -	{"tx_errors", offsetof(struct rte_eth_stats, q_errors)},
> +	{"packets", offsetof(struct rte_eth_stats, q_opackets)},
> +	{"bytes", offsetof(struct rte_eth_stats, q_obytes)},
>  };
>  #define RTE_NB_TXQ_STATS (sizeof(rte_txq_stats_strings) /	\
>  		sizeof(rte_txq_stats_strings[0]))
> @@ -1666,8 +1669,6 @@ rte_eth_xstats_get(uint8_t port_id, struct
> rte_eth_xstats *xstats,
> 
>  	/* 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;
> 
>  	/* implemented by the driver */
>  	if (dev->dev_ops->xstats_get != NULL) { @@ -1679,6 +1680,9 @@
> rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats,
> 
>  		if (xcount < 0)
>  			return xcount;
> +	} else {
> +		count += dev->data->nb_rx_queues * RTE_NB_RXQ_STATS;
> +		count += dev->data->nb_tx_queues * RTE_NB_TXQ_STATS;
>  	}
> 
>  	if (n < count + xcount)
> @@ -1698,6 +1702,10 @@ rte_eth_xstats_get(uint8_t port_id, struct
> rte_eth_xstats *xstats,
>  		xstats[count++].value = val;
>  	}
> 
> +	/* if xstats_get() is implemented by the PMD, the Q stats are done */
> +	if (dev->dev_ops->xstats_get != NULL)
> +		return count + xcount;
> +
>  	/* per-rxq stats */
>  	for (q = 0; q < dev->data->nb_rx_queues; q++) {
>  		for (i = 0; i < RTE_NB_RXQ_STATS; i++) { @@ -1706,7 +1714,7
> @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats,
>  					q * sizeof(uint64_t));
>  			val = *stats_ptr;
>  			snprintf(xstats[count].name,
> sizeof(xstats[count].name),
> -				"rx_queue_%u_%s", q,
> +				"rx_q%u_%s", q,
>  				rte_rxq_stats_strings[i].name);
>  			xstats[count++].value = val;
>  		}
> @@ -1720,7 +1728,7 @@ rte_eth_xstats_get(uint8_t port_id, struct
> rte_eth_xstats *xstats,
>  					q * sizeof(uint64_t));
>  			val = *stats_ptr;
>  			snprintf(xstats[count].name,
> sizeof(xstats[count].name),
> -				"tx_queue_%u_%s", q,
> +				"tx_q%u_%s", q,
>  				rte_txq_stats_strings[i].name);
>  			xstats[count++].value = val;
>  		}
> --
> 1.9.1



More information about the dev mailing list