bnxt: skip getting statistics for queues not started

Message ID 20210421230929.434822-1-stephen@networkplumber.org (mailing list archive)
State Accepted, archived
Delegated to: Ajit Khaparde
Headers
Series bnxt: skip getting statistics for queues not started |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot success github build: passed
ci/iol-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-mellanox-Functional success Functional Testing PASS

Commit Message

Stephen Hemminger April 21, 2021, 11:09 p.m. UTC
  An application using rte_flow may define a large number of queues
but only use a small subset of them at any one time.

Since querying the status of each queue requires a request/spin/reply
with the firmware, optimize by skipping the request for queues not running.
For those queues the statistics will be 0.

This cuts the cost of single xstats query in half and has even
bigger gain for simple stats query.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/bnxt/bnxt_stats.c | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Ajit Khaparde April 24, 2021, 6:56 p.m. UTC | #1
On Wed, Apr 21, 2021 at 4:09 PM Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
> An application using rte_flow may define a large number of queues
> but only use a small subset of them at any one time.
>
> Since querying the status of each queue requires a request/spin/reply
> with the firmware, optimize by skipping the request for queues not running.
> For those queues the statistics will be 0.
>
> This cuts the cost of single xstats query in half and has even
> bigger gain for simple stats query.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Changed the commit headline to
"net/bnxt: skip get statistics for stopped queues"
Patch applied to dpdk-next-net-brcm. Thanks

> ---
>  drivers/net/bnxt/bnxt_stats.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c
> index bb4b2eee194e..11767e06d074 100644
> --- a/drivers/net/bnxt/bnxt_stats.c
> +++ b/drivers/net/bnxt/bnxt_stats.c
> @@ -528,6 +528,8 @@ int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
>                 struct bnxt_rx_queue *rxq = bp->rx_queues[i];
>                 struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
>
> +               if (!rxq->rx_started)
> +                       continue;
>                 rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
>                                      bnxt_stats, 1);
>                 if (unlikely(rc))
> @@ -543,6 +545,8 @@ int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
>                 struct bnxt_tx_queue *txq = bp->tx_queues[i];
>                 struct bnxt_cp_ring_info *cpr = txq->cp_ring;
>
> +               if (!txq->tx_started)
> +                       continue;
>                 rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
>                                      bnxt_stats, 0);
>                 if (unlikely(rc))
> --
> 2.30.2
>
  

Patch

diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c
index bb4b2eee194e..11767e06d074 100644
--- a/drivers/net/bnxt/bnxt_stats.c
+++ b/drivers/net/bnxt/bnxt_stats.c
@@ -528,6 +528,8 @@  int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
 		struct bnxt_rx_queue *rxq = bp->rx_queues[i];
 		struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
 
+		if (!rxq->rx_started)
+			continue;
 		rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
 				     bnxt_stats, 1);
 		if (unlikely(rc))
@@ -543,6 +545,8 @@  int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
 		struct bnxt_tx_queue *txq = bp->tx_queues[i];
 		struct bnxt_cp_ring_info *cpr = txq->cp_ring;
 
+		if (!txq->tx_started)
+			continue;
 		rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
 				     bnxt_stats, 0);
 		if (unlikely(rc))