DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com
Subject: [dpdk-dev] [PATCH v2 03/23] net/bnxt: optimize receive processing code
Date: Thu, 28 Jun 2018 13:15:29 -0700	[thread overview]
Message-ID: <20180628201549.3507-4-ajit.khaparde@broadcom.com> (raw)
In-Reply-To: <20180628201549.3507-1-ajit.khaparde@broadcom.com>

1) Use nb_rx_pkts instead of checking producer indices of Rx and
aggregator rings to decide if any Rx completions were processed.
2) Post Rx buffers early in Rx processing instead of waiting for
the budgeted burst quota.
3) Ring Rx CQ DB after Rx buffers are posted.

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
--
v1->v2: fix commit log
---
 drivers/net/bnxt/bnxt_rxr.c | 12 ++++++++----
 drivers/net/bnxt/bnxt_rxr.h |  2 ++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index 9d8842926..b6b72c553 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -540,8 +540,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 	int rc = 0;
 	bool evt = false;
 
-	/* If Rx Q was stopped return */
-	if (rxq->rx_deferred_start)
+	/* If Rx Q was stopped return. RxQ0 cannot be stopped. */
+	if (rxq->rx_deferred_start && rxq->queue_id)
 		return 0;
 
 	/* Handle RX burst request */
@@ -572,10 +572,13 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 		raw_cons = NEXT_RAW_CMP(raw_cons);
 		if (nb_rx_pkts == nb_pkts || evt)
 			break;
+		/* Post some Rx buf early in case of larger burst processing */
+		if (nb_rx_pkts == BNXT_RX_POST_THRESH)
+			B_RX_DB(rxr->rx_doorbell, rxr->rx_prod);
 	}
 
 	cpr->cp_raw_cons = raw_cons;
-	if ((prod == rxr->rx_prod && ag_prod == rxr->ag_prod) && !evt) {
+	if (!nb_rx_pkts && !evt) {
 		/*
 		 * For PMD, there is no need to keep on pushing to REARM
 		 * the doorbell if there are no new completions
@@ -583,7 +586,6 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 		return nb_rx_pkts;
 	}
 
-	B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
 	if (prod != rxr->rx_prod)
 		B_RX_DB(rxr->rx_doorbell, rxr->rx_prod);
 
@@ -591,6 +593,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 	if (ag_prod != rxr->ag_prod)
 		B_RX_DB(rxr->ag_doorbell, rxr->ag_prod);
 
+	B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
+
 	/* Attempt to alloc Rx buf in case of a previous allocation failure. */
 	if (rc == -ENOMEM) {
 		int i;
diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h
index 5b28f0321..3815a2199 100644
--- a/drivers/net/bnxt/bnxt_rxr.h
+++ b/drivers/net/bnxt/bnxt_rxr.h
@@ -54,6 +54,8 @@
 #define RX_CMP_IP_CS_UNKNOWN(rxcmp1)					\
 		!((rxcmp1)->flags2 & RX_CMP_IP_CS_BITS)
 
+#define BNXT_RX_POST_THRESH	32
+
 enum pkt_hash_types {
 	PKT_HASH_TYPE_NONE,	/* Undefined type */
 	PKT_HASH_TYPE_L2,	/* Input: src_MAC, dest_MAC */
-- 
2.15.2 (Apple Git-101.1)

  parent reply	other threads:[~2018-06-28 20:15 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-19 21:30 [dpdk-dev] [PATCH 00/31] bnxt patchset Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 01/31] net/bnxt: fix clear port stats Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 02/31] net/bnxt: add Tx batching support Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 03/31] net/bnxt: Rx processing optimization Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 04/31] net/bnxt: set min and max descriptor count for Tx and Rx rings Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 05/31] net/bnxt: fix dev close operation Ajit Khaparde
2018-06-26 15:28   ` Ferruh Yigit
2018-06-28 20:16     ` Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 06/31] net/bnxt: set ring coalesce parameters for Stratus NIC Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 07/31] net/bnxt: fix HW Tx checksum offload check Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 08/31] net/bnxt: add support for VF id 0xd800 Ajit Khaparde
2018-06-26 15:28   ` Ferruh Yigit
2018-06-28 20:14     ` Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 09/31] net/bnxt: fix rx/tx queue start/stop operations Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 10/31] net/bnxt: code cleanup style of bnxt cpr Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 11/31] net/bnxt: code cleanup style of bnxt rxr Ajit Khaparde
2018-06-26 15:29   ` Ferruh Yigit
2018-06-19 21:30 ` [dpdk-dev] [PATCH 12/31] net/bnxt: code cleanup style of rte pmd bnxt file Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 13/31] net/bnxt: code cleanup style of bnxt stats Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 14/31] net/bnxt: code cleanup style of bnxt vnic Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 15/31] net/bnxt: code cleanup style of bnxt txq Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 16/31] net/bnxt: code cleanup style of bnxt rxq Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 17/31] net/bnxt: code cleanup style of bnxt vnic Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 18/31] net/bnxt: code cleanup style of bnxt txr Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 19/31] net/bnxt: code cleanup style of bnxt ring Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 20/31] net/bnxt: code cleanup style of bnxt ethdev Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 21/31] net/bnxt: move function check zero bytes to bnxt util.h Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 22/31] net/bnxt: filter/flow refactoring Ajit Khaparde
2018-06-26 15:29   ` Ferruh Yigit
2018-06-19 21:30 ` [dpdk-dev] [PATCH 23/31] net/bnxt: check for invalid vnic id Ajit Khaparde
2018-06-26 15:30   ` Ferruh Yigit
2018-06-19 21:30 ` [dpdk-dev] [PATCH 24/31] net/bnxt: update HWRM API to v1.9.2.9 Ajit Khaparde
2018-06-26 15:30   ` Ferruh Yigit
2018-06-28 20:14     ` Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 25/31] net/bnxt: fix Tx with multiple mbuf Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 26/31] net/bnxt: Revert reset of L2 filter id in clear_ntuple_filter Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 27/31] net/bnxt: check filter type before clearing it Ajit Khaparde
2018-06-26 15:30   ` Ferruh Yigit
2018-06-19 21:30 ` [dpdk-dev] [PATCH 28/31] net/bnxt: fix set MTU Ajit Khaparde
2018-06-26 15:30   ` Ferruh Yigit
2018-06-28 20:13     ` Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 29/31] net/bnxt: fix incorrect IO address handling in Tx Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 30/31] net/bnxt: allocate RSS context only if RSS mode is enabled Ajit Khaparde
2018-06-19 21:30 ` [dpdk-dev] [PATCH 31/31] net/bnxt: fix to move a flow to a different queue Ajit Khaparde
2018-06-26 15:27 ` [dpdk-dev] [PATCH 00/31] bnxt patchset Ferruh Yigit
2018-06-28 20:15   ` Ajit Khaparde
2018-06-28 20:15   ` [dpdk-dev] [PATCH v2 00/23] " Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 01/23] net/bnxt: fix clear port stats Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 02/23] net/bnxt: add Tx batching support Ajit Khaparde
2018-06-28 20:15     ` Ajit Khaparde [this message]
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 04/23] net/bnxt: set MIN/MAX descriptor count fox Tx and Rx Rings Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 05/23] net/bnxt: fix dev close operation Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 06/23] net/bnxt: set ring coalesce parameters for Stratus NIC Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 07/23] net/bnxt: fix HW Tx checksum offload check Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 08/23] net/bnxt: add support for VF id 0xd800 Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 09/23] net/bnxt: fix Rx/Tx queue start/stop operations Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 10/23] net/bnxt: move function check zero bytes to bnxt util.h Ajit Khaparde
2018-07-02 12:20       ` Ferruh Yigit
2018-07-02 12:55         ` Ferruh Yigit
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 11/23] net/bnxt: refactor filter/flow Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 12/23] net/bnxt: check for invalid vnic id Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 13/23] net/bnxt: update HWRM API to v1.9.2.9 Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 14/23] net/bnxt: fix Tx with multiple mbuf Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 15/23] net/bnxt: revert reset of L2 filter id Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 16/23] net/bnxt: check filter type before clearing it Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 17/23] net/bnxt: fix set MTU Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 18/23] net/bnxt: fix incorrect IO address handling in Tx Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 19/23] net/bnxt: allocate RSS context only if RSS mode is enabled Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 20/23] net/bnxt: fix to move a flow to a different queue Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 21/23] net/bnxt: check VF resources if resource manager is enabled Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 22/23] net/bnxt: fix Rx ring count limitation Ajit Khaparde
2018-06-28 20:15     ` [dpdk-dev] [PATCH v2 23/23] net/bnxt: use correct flags during VLAN configuration Ajit Khaparde
2018-07-02 15:48     ` [dpdk-dev] [PATCH v2 00/23] bnxt patchset Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180628201549.3507-4-ajit.khaparde@broadcom.com \
    --to=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).