From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 430F841CB3; Thu, 16 Feb 2023 19:58:25 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0B9B642DBA; Thu, 16 Feb 2023 19:58:24 +0100 (CET) Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by mails.dpdk.org (Postfix) with ESMTP id 157E742DB8 for ; Thu, 16 Feb 2023 19:58:23 +0100 (CET) Received: by mail-wr1-f53.google.com with SMTP id l2so2855869wry.0 for ; Thu, 16 Feb 2023 10:58:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JHafvf9hjJeQLsIeaBva92p9wZQ+UBMca9wslxye298=; b=dx7McA7Z/asNdlXOmjLMeTxIRaRZN6hGTh853Yttv0YqvbMjRu9Zho83YL6N0hsrz1 Xm9HkDDoCbYbC5xKWh5GMgdn5KVbYeWC/hCROMLOvXBlGlpeqrrlK2l48uRITLX40fUI d9mhE/PjnvWfIPLJZtT8DXxTgy5ZEMpf7VffdSx9LXLUMXAU135RXq1bOcd52QgF/rkI tPyTYlnr21JcO6JMjqQ2Rt1oV2EyHDKUMkLsXr0XqdfL1Gn9R1jr9Z8ZEeDm0TDEeme+ qE1yAZPVdLT9WWMjhiQ1JrvsBWOfvj3tfw+F5CfmSYrHJbVKZuKNFn3/KVffOtcWCfIk WYdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JHafvf9hjJeQLsIeaBva92p9wZQ+UBMca9wslxye298=; b=vp6nhUmmiG1zNrCdxybohFrPZ5IyYWEWRu6WabJsQTucQWd1HgBQL16DoO22gRKA+m 5Dc4i9m0ZTbWBfVd2zWIk+aE11zJpWb5nnQTIUqr7Y9mwybJZLxJHe8LTG5Q9q4A3SIa nPC5s74ZoqJjuzB2YL7L0uHpBlCKbkSZOa8jFpG24ojxZA2Whz9wEGHbdOOkbG0mT+j9 9aiLRqlCxsivIsj0mfFFdc1QWq2ddVvAnRGL0810bvX42wOdAbE/q+k65plokrFvQe0y YmoSFAK8gJfdv3LaGkURiuPJodv7qwgbhLeK0xRN7TBt7f989D3Z5AEM9ZXhm99q8wkj Tp6g== X-Gm-Message-State: AO0yUKV2GivHUOWA1PZo00GuyAmDUGQq2cptcQa+cTJ9Ompw5aZOdKIs k8/vumCQd5PJMU1wFWA9otA= X-Google-Smtp-Source: AK7set+JUhN2CyBYxPY52u0eT1ygvh78MF0vwBSbJMY6eq6+JzxcJ3C66lrozLO3vAp8wg8809sD2A== X-Received: by 2002:adf:dd52:0:b0:2c5:52b7:8436 with SMTP id u18-20020adfdd52000000b002c552b78436mr6527680wrm.21.1676573902824; Thu, 16 Feb 2023 10:58:22 -0800 (PST) Received: from localhost.localdomain ([176.41.28.141]) by smtp.gmail.com with ESMTPSA id m11-20020a5d6a0b000000b002c55ec7f661sm2169249wru.5.2023.02.16.10.58.22 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 16 Feb 2023 10:58:22 -0800 (PST) From: Levend Sayar To: junfeng.guo@intel.com Cc: dev@dpdk.org, Levend Sayar Subject: [PATCH 2/2] net/gve: add extended statistics Date: Thu, 16 Feb 2023 21:58:14 +0300 Message-Id: <20230216185814.27830-2-levendsayar@gmail.com> X-Mailer: git-send-email 2.37.1 (Apple Git-137.1) In-Reply-To: <20230216185814.27830-1-levendsayar@gmail.com> References: <20230216185814.27830-1-levendsayar@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Google Virtual NIC PMD is enriched with extended statistics info. eth_dev_ops callback names are also synched with eth_dev_ops field names Signed-off-by: Levend Sayar --- drivers/net/gve/gve_ethdev.c | 152 ++++++++++++++++++++++++++++++----- drivers/net/gve/gve_rx.c | 8 +- 2 files changed, 138 insertions(+), 22 deletions(-) diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index fef2458a16..e31fdce960 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -266,7 +266,7 @@ gve_dev_close(struct rte_eth_dev *dev) } static int -gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) +gve_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { struct gve_priv *priv = dev->data->dev_private; @@ -319,15 +319,12 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) } static int -gve_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) +gve_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { uint16_t i; for (i = 0; i < dev->data->nb_tx_queues; i++) { struct gve_tx_queue *txq = dev->data->tx_queues[i]; - if (txq == NULL) - continue; - stats->opackets += txq->packets; stats->obytes += txq->bytes; stats->oerrors += txq->errors; @@ -335,9 +332,6 @@ gve_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) for (i = 0; i < dev->data->nb_rx_queues; i++) { struct gve_rx_queue *rxq = dev->data->rx_queues[i]; - if (rxq == NULL) - continue; - stats->ipackets += rxq->packets; stats->ibytes += rxq->bytes; stats->ierrors += rxq->errors; @@ -348,15 +342,12 @@ gve_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) } static int -gve_dev_stats_reset(struct rte_eth_dev *dev) +gve_stats_reset(struct rte_eth_dev *dev) { uint16_t i; for (i = 0; i < dev->data->nb_tx_queues; i++) { struct gve_tx_queue *txq = dev->data->tx_queues[i]; - if (txq == NULL) - continue; - txq->packets = 0; txq->bytes = 0; txq->errors = 0; @@ -364,9 +355,6 @@ gve_dev_stats_reset(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_rx_queues; i++) { struct gve_rx_queue *rxq = dev->data->rx_queues[i]; - if (rxq == NULL) - continue; - rxq->packets = 0; rxq->bytes = 0; rxq->errors = 0; @@ -377,7 +365,7 @@ gve_dev_stats_reset(struct rte_eth_dev *dev) } static int -gve_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) +gve_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) { struct gve_priv *priv = dev->data->dev_private; int err; @@ -403,20 +391,144 @@ gve_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) return 0; } +static int +gve_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, unsigned int n) +{ + if (xstats) { + uint requested = n; + uint64_t indx = 0; + struct rte_eth_xstat *xstat = xstats; + uint16_t i; + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + struct gve_rx_queue *rxq = dev->data->rx_queues[i]; + xstat->id = indx++; + xstat->value = rxq->packets; + if (--requested == 0) + return n; + xstat++; + + xstat->id = indx++; + xstat->value = rxq->bytes; + if (--requested == 0) + return n; + xstat++; + + xstat->id = indx++; + xstat->value = rxq->errors; + if (--requested == 0) + return n; + xstat++; + + xstat->id = indx++; + xstat->value = rxq->no_mbufs; + if (--requested == 0) + return n; + xstat++; + } + + for (i = 0; i < dev->data->nb_tx_queues; i++) { + struct gve_tx_queue *txq = dev->data->tx_queues[i]; + xstat->id = indx++; + xstat->value = txq->packets; + if (--requested == 0) + return n; + xstat++; + + xstat->id = indx++; + xstat->value = txq->bytes; + if (--requested == 0) + return n; + xstat++; + + xstat->id = indx++; + xstat->value = txq->errors; + if (--requested == 0) + return n; + xstat++; + } + } + + return (dev->data->nb_rx_queues * 4) + (dev->data->nb_tx_queues * 3); +} + +static int +gve_xstats_reset(struct rte_eth_dev *dev) +{ + return gve_stats_reset(dev); +} + +static int +gve_xstats_get_names(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats_names, + unsigned int n) +{ + if (xstats_names) { + uint requested = n; + struct rte_eth_xstat_name *xstats_name = xstats_names; + uint16_t i; + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + snprintf(xstats_name->name, sizeof(xstats_name->name), + "rx_q%d_packets", i); + if (--requested == 0) + return n; + xstats_name++; + snprintf(xstats_name->name, sizeof(xstats_name->name), + "rx_q%d_bytes", i); + if (--requested == 0) + return n; + xstats_name++; + snprintf(xstats_name->name, sizeof(xstats_name->name), + "rx_q%d_errors", i); + if (--requested == 0) + return n; + xstats_name++; + snprintf(xstats_name->name, sizeof(xstats_name->name), + "rx_q%d_no_mbufs", i); + if (--requested == 0) + return n; + xstats_name++; + } + + for (i = 0; i < dev->data->nb_tx_queues; i++) { + snprintf(xstats_name->name, sizeof(xstats_name->name), + "tx_q%d_packets", i); + if (--requested == 0) + return n; + xstats_name++; + snprintf(xstats_name->name, sizeof(xstats_name->name), + "tx_q%d_bytes", i); + if (--requested == 0) + return n; + xstats_name++; + snprintf(xstats_name->name, sizeof(xstats_name->name), + "tx_q%d_errors", i); + if (--requested == 0) + return n; + xstats_name++; + } + } + + return (dev->data->nb_rx_queues * 4) + (dev->data->nb_tx_queues * 3); +} + static const struct eth_dev_ops gve_eth_dev_ops = { .dev_configure = gve_dev_configure, .dev_start = gve_dev_start, .dev_stop = gve_dev_stop, .dev_close = gve_dev_close, - .dev_infos_get = gve_dev_info_get, + .dev_infos_get = gve_dev_infos_get, .rx_queue_setup = gve_rx_queue_setup, .tx_queue_setup = gve_tx_queue_setup, .rx_queue_release = gve_rx_queue_release, .tx_queue_release = gve_tx_queue_release, .link_update = gve_link_update, - .stats_get = gve_dev_stats_get, - .stats_reset = gve_dev_stats_reset, - .mtu_set = gve_dev_mtu_set, + .stats_get = gve_stats_get, + .stats_reset = gve_stats_reset, + .mtu_set = gve_mtu_set, + .xstats_get = gve_xstats_get, + .xstats_reset = gve_xstats_reset, + .xstats_get_names = gve_xstats_get_names, }; static void diff --git a/drivers/net/gve/gve_rx.c b/drivers/net/gve/gve_rx.c index 66fbcf3930..7687977003 100644 --- a/drivers/net/gve/gve_rx.c +++ b/drivers/net/gve/gve_rx.c @@ -22,8 +22,10 @@ gve_rx_refill(struct gve_rx_queue *rxq) if (diag < 0) { for (i = 0; i < nb_alloc; i++) { nmb = rte_pktmbuf_alloc(rxq->mpool); - if (!nmb) + if (!nmb) { + rxq->no_mbufs++; break; + } rxq->sw_ring[idx + i] = nmb; } if (i != nb_alloc) { @@ -57,8 +59,10 @@ gve_rx_refill(struct gve_rx_queue *rxq) if (diag < 0) { for (i = 0; i < nb_alloc; i++) { nmb = rte_pktmbuf_alloc(rxq->mpool); - if (!nmb) + if (!nmb) { + rxq->no_mbufs++; break; + } rxq->sw_ring[idx + i] = nmb; } nb_alloc = i; -- 2.37.1 (Apple Git-137.1)