[v4,17/17] net/mana: add function to report queue stats
Checks
Commit Message
From: Long Li <longli@microsoft.com>
Report packet statistics.
Signed-off-by: Long Li <longli@microsoft.com>
---
doc/guides/nics/features/mana.ini | 2 +
drivers/net/mana/mana.c | 77 +++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+)
Comments
On 7/9/2022 12:49 AM, longli@linuxonhyperv.com wrote:
> CAUTION: This message has originated from an External Source. Please use proper judgment and caution when opening attachments, clicking links, or responding to this email.
>
>
> From: Long Li <longli@microsoft.com>
>
> Report packet statistics.
>
> Signed-off-by: Long Li <longli@microsoft.com>
<...>
> +static int mana_dev_stats_get(struct rte_eth_dev *dev,
> + struct rte_eth_stats *stats)
> +{
> + unsigned int i;
> +
> + for (i = 0; i < dev->data->nb_tx_queues; i++) {
> + struct mana_txq *txq = dev->data->tx_queues[i];
> +
> + if (!txq)
> + continue;
> +
> + stats->opackets = txq->stats.packets;
> + stats->obytes = txq->stats.bytes;
> + stats->oerrors = txq->stats.errors;
Shouldn't these be "+=" ? Same for below Rx block.
> Subject: Re: [Patch v4 17/17] net/mana: add function to report queue stats
>
> On 7/9/2022 12:49 AM, longli@linuxonhyperv.com wrote:
> > CAUTION: This message has originated from an External Source. Please use
> proper judgment and caution when opening attachments, clicking links, or
> responding to this email.
> >
> >
> > From: Long Li <longli@microsoft.com>
> >
> > Report packet statistics.
> >
> > Signed-off-by: Long Li <longli@microsoft.com>
>
> <...>
>
> > +static int mana_dev_stats_get(struct rte_eth_dev *dev,
> > + struct rte_eth_stats *stats) {
> > + unsigned int i;
> > +
> > + for (i = 0; i < dev->data->nb_tx_queues; i++) {
> > + struct mana_txq *txq = dev->data->tx_queues[i];
> > +
> > + if (!txq)
> > + continue;
> > +
> > + stats->opackets = txq->stats.packets;
> > + stats->obytes = txq->stats.bytes;
> > + stats->oerrors = txq->stats.errors;
>
>
> Shouldn't these be "+=" ? Same for below Rx block.
Thank you. I will fix those.
@@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
+Basic stats = Y
Free Tx mbuf on demand = Y
Link status = P
Linux = Y
@@ -14,5 +15,6 @@ Queue start/stop = Y
Removal event = Y
RSS hash = Y
Speed capabilities = P
+Stats per queue = Y
Usage doc = Y
x86-64 = Y
@@ -501,6 +501,79 @@ static int mana_dev_link_update(struct rte_eth_dev *dev,
return rte_eth_linkstatus_set(dev, &link);
}
+static int mana_dev_stats_get(struct rte_eth_dev *dev,
+ struct rte_eth_stats *stats)
+{
+ unsigned int i;
+
+ for (i = 0; i < dev->data->nb_tx_queues; i++) {
+ struct mana_txq *txq = dev->data->tx_queues[i];
+
+ if (!txq)
+ continue;
+
+ stats->opackets = txq->stats.packets;
+ stats->obytes = txq->stats.bytes;
+ stats->oerrors = txq->stats.errors;
+
+ if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
+ stats->q_opackets[i] = txq->stats.packets;
+ stats->q_obytes[i] = txq->stats.bytes;
+ }
+ }
+
+ stats->rx_nombuf = 0;
+ for (i = 0; i < dev->data->nb_rx_queues; i++) {
+ struct mana_rxq *rxq = dev->data->rx_queues[i];
+
+ if (!rxq)
+ continue;
+
+ stats->ipackets = rxq->stats.packets;
+ stats->ibytes = rxq->stats.bytes;
+ stats->ierrors = rxq->stats.errors;
+
+ /* There is no good way to get stats->imissed, not setting it */
+
+ if (i < RTE_ETHDEV_QUEUE_STAT_CNTRS) {
+ stats->q_ipackets[i] = rxq->stats.packets;
+ stats->q_ibytes[i] = rxq->stats.bytes;
+ }
+
+ stats->rx_nombuf += rxq->stats.nombuf;
+ }
+
+ return 0;
+}
+
+static int
+mana_dev_stats_reset(struct rte_eth_dev *dev __rte_unused)
+{
+ unsigned int i;
+
+ PMD_INIT_FUNC_TRACE();
+
+ for (i = 0; i < dev->data->nb_tx_queues; i++) {
+ struct mana_txq *txq = dev->data->tx_queues[i];
+
+ if (!txq)
+ continue;
+
+ memset(&txq->stats, 0, sizeof(txq->stats));
+ }
+
+ for (i = 0; i < dev->data->nb_rx_queues; i++) {
+ struct mana_rxq *rxq = dev->data->rx_queues[i];
+
+ if (!rxq)
+ continue;
+
+ memset(&rxq->stats, 0, sizeof(rxq->stats));
+ }
+
+ return 0;
+}
+
const struct eth_dev_ops mana_dev_ops = {
.dev_configure = mana_dev_configure,
.dev_start = mana_dev_start,
@@ -517,9 +590,13 @@ const struct eth_dev_ops mana_dev_ops = {
.rx_queue_setup = mana_dev_rx_queue_setup,
.rx_queue_release = mana_dev_rx_queue_release,
.link_update = mana_dev_link_update,
+ .stats_get = mana_dev_stats_get,
+ .stats_reset = mana_dev_stats_reset,
};
const struct eth_dev_ops mana_dev_sec_ops = {
+ .stats_get = mana_dev_stats_get,
+ .stats_reset = mana_dev_stats_reset,
.dev_infos_get = mana_dev_info_get,
};