All of lore.kernel.org
 help / color / mirror / Atom feed
From: Radu Nicolau <radu.nicolau@intel.com>
To: dev@dpdk.org
Cc: beilei.xing@intel.com, jia.guo@intel.com,
	bruce.richardson@intel.com, konstantin.ananyev@intel.com,
	jerinjacobk@gmail.com, david.marchand@redhat.com,
	fiona.trahe@intel.com, wei.zhao1@intel.com, ruifeng.wang@arm.com,
	Radu Nicolau <radu.nicolau@intel.com>
Subject: [dpdk-dev] [PATCH v8 4/4] net/ixgbe: use WC store to update queue tail registers
Date: Fri, 17 Jul 2020 11:49:45 +0100	[thread overview]
Message-ID: <1594982985-31551-5-git-send-email-radu.nicolau@intel.com> (raw)
In-Reply-To: <1594982985-31551-1-git-send-email-radu.nicolau@intel.com>

Performance improvement: use a write combining store
instead of a regular mmio write to update queue tail
registers.

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
---
 drivers/net/ixgbe/base/ixgbe_osdep.h   |  6 ++++++
 drivers/net/ixgbe/ixgbe_rxtx.c         | 12 ++++++------
 drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c |  4 ++--
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_osdep.h b/drivers/net/ixgbe/base/ixgbe_osdep.h
index dc712b7..cacf724 100644
--- a/drivers/net/ixgbe/base/ixgbe_osdep.h
+++ b/drivers/net/ixgbe/base/ixgbe_osdep.h
@@ -105,6 +105,12 @@ static inline uint32_t ixgbe_read_addr(volatile void* addr)
 #define IXGBE_PCI_REG_WRITE_RELAXED(reg, value)		\
 	rte_write32_relaxed((rte_cpu_to_le_32(value)), reg)
 
+#define IXGBE_PCI_REG_WC_WRITE(reg, value)			\
+	rte_write32_wc((rte_cpu_to_le_32(value)), reg)
+
+#define IXGBE_PCI_REG_WC_WRITE_RELAXED(reg, value)		\
+	rte_write32_wc_relaxed((rte_cpu_to_le_32(value)), reg)
+
 #define IXGBE_PCI_REG_ADDR(hw, reg) \
 	((volatile uint32_t *)((char *)(hw)->hw_addr + (reg)))
 
diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index 2e20e18..669b23e 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -308,7 +308,7 @@ tx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 
 	/* update tail pointer */
 	rte_wmb();
-	IXGBE_PCI_REG_WRITE_RELAXED(txq->tdt_reg_addr, txq->tx_tail);
+	IXGBE_PCI_REG_WC_WRITE_RELAXED(txq->tdt_reg_addr, txq->tx_tail);
 
 	return nb_pkts;
 }
@@ -946,7 +946,7 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 	PMD_TX_LOG(DEBUG, "port_id=%u queue_id=%u tx_tail=%u nb_tx=%u",
 		   (unsigned) txq->port_id, (unsigned) txq->queue_id,
 		   (unsigned) tx_id, (unsigned) nb_tx);
-	IXGBE_PCI_REG_WRITE_RELAXED(txq->tdt_reg_addr, tx_id);
+	IXGBE_PCI_REG_WC_WRITE_RELAXED(txq->tdt_reg_addr, tx_id);
 	txq->tx_tail = tx_id;
 
 	return nb_tx;
@@ -1692,7 +1692,7 @@ rx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 
 		/* update tail pointer */
 		rte_wmb();
-		IXGBE_PCI_REG_WRITE_RELAXED(rxq->rdt_reg_addr,
+		IXGBE_PCI_REG_WC_WRITE_RELAXED(rxq->rdt_reg_addr,
 					    cur_free_trigger);
 	}
 
@@ -1918,7 +1918,7 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 			   (unsigned) nb_rx);
 		rx_id = (uint16_t) ((rx_id == 0) ?
 				     (rxq->nb_rx_desc - 1) : (rx_id - 1));
-		IXGBE_PCI_REG_WRITE(rxq->rdt_reg_addr, rx_id);
+		IXGBE_PCI_REG_WC_WRITE(rxq->rdt_reg_addr, rx_id);
 		nb_hold = 0;
 	}
 	rxq->nb_rx_hold = nb_hold;
@@ -2096,7 +2096,7 @@ ixgbe_recv_pkts_lro(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts,
 
 			if (!ixgbe_rx_alloc_bufs(rxq, false)) {
 				rte_wmb();
-				IXGBE_PCI_REG_WRITE_RELAXED(rxq->rdt_reg_addr,
+				IXGBE_PCI_REG_WC_WRITE_RELAXED(rxq->rdt_reg_addr,
 							    next_rdt);
 				nb_hold -= rxq->rx_free_thresh;
 			} else {
@@ -2262,7 +2262,7 @@ ixgbe_recv_pkts_lro(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts,
 			   rxq->port_id, rxq->queue_id, rx_id, nb_hold, nb_rx);
 
 		rte_wmb();
-		IXGBE_PCI_REG_WRITE_RELAXED(rxq->rdt_reg_addr, prev_id);
+		IXGBE_PCI_REG_WC_WRITE_RELAXED(rxq->rdt_reg_addr, prev_id);
 		nb_hold = 0;
 	}
 
diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c
index 517ca31..e77a7f3 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c
@@ -90,7 +90,7 @@ ixgbe_rxq_rearm(struct ixgbe_rx_queue *rxq)
 			     (rxq->nb_rx_desc - 1) : (rxq->rxrearm_start - 1));
 
 	/* Update the tail pointer on the NIC */
-	IXGBE_PCI_REG_WRITE(rxq->rdt_reg_addr, rx_id);
+	IXGBE_PCI_REG_WC_WRITE(rxq->rdt_reg_addr, rx_id);
 }
 
 #ifdef RTE_LIBRTE_SECURITY
@@ -697,7 +697,7 @@ ixgbe_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,
 
 	txq->tx_tail = tx_id;
 
-	IXGBE_PCI_REG_WRITE(txq->tdt_reg_addr, txq->tx_tail);
+	IXGBE_PCI_REG_WC_WRITE(txq->tdt_reg_addr, txq->tx_tail);
 
 	return nb_pkts;
 }
-- 
2.7.4


  parent reply	other threads:[~2020-07-17 10:50 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-11 10:11 [dpdk-dev] [PATCH v1 1/2] eal/x86: add WC store function Radu Nicolau
2020-06-11 10:11 ` [dpdk-dev] [PATCH v1 2/2] net/i40e: use movdiri to update queue tail registers Radu Nicolau
2020-06-11 12:23 ` [dpdk-dev] [PATCH v1 1/2] eal/x86: add WC store function Jerin Jacob
2020-06-11 13:56   ` Nicolau, Radu
2020-06-11 15:33     ` Jerin Jacob
2020-06-15 11:11 ` Ananyev, Konstantin
2020-06-19 12:06 ` [dpdk-dev] [PATCH v2 1/2] eal: add WC store functions Radu Nicolau
2020-06-19 12:06   ` [dpdk-dev] [PATCH v2 2/2] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-01 13:15     ` Bruce Richardson
2020-07-01 13:14   ` [dpdk-dev] [PATCH v2 1/2] eal: add WC store functions Bruce Richardson
2020-07-01 14:15 ` [dpdk-dev] [PATCH v3 0/2] " Radu Nicolau
2020-07-01 14:15   ` [dpdk-dev] [PATCH v3 1/2] " Radu Nicolau
2020-07-01 14:15   ` [dpdk-dev] [PATCH v3 2/2] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-02  9:23 ` [dpdk-dev] [PATCH v4 0/2] eal: add WC store functions Radu Nicolau
2020-07-02  9:23   ` [dpdk-dev] [PATCH v4 1/2] " Radu Nicolau
2020-07-03 15:19     ` David Marchand
2020-07-06  9:15       ` Nicolau, Radu
2020-07-02  9:23   ` [dpdk-dev] [PATCH v4 2/2] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-06 12:29 ` [dpdk-dev] [PATCH v5 0/2] eal: add WC store functions Radu Nicolau
2020-07-06 12:29   ` [dpdk-dev] [PATCH v5 1/2] " Radu Nicolau
2020-07-06 12:30   ` [dpdk-dev] [PATCH v5 2/2] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-13 12:27 ` [dpdk-dev] [PATCH v6 0/4] eal: add WC store functions Radu Nicolau
2020-07-13 12:27   ` [dpdk-dev] [PATCH v6 1/4] " Radu Nicolau
2020-07-13 12:27   ` [dpdk-dev] [PATCH v6 2/4] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-13 12:27   ` [dpdk-dev] [PATCH v6 3/4] qat: " Radu Nicolau
2020-07-13 12:44     ` Bruce Richardson
2020-07-13 12:52       ` Trahe, Fiona
2020-07-13 12:57         ` Bruce Richardson
2020-07-13 12:27   ` [dpdk-dev] [PATCH v6 4/4] net/ixgbe: use WC store to update doorbell register Radu Nicolau
2020-07-16 12:29 ` [dpdk-dev] [PATCH v7 0/4] eal: add WC store functions Radu Nicolau
2020-07-16 12:29   ` [dpdk-dev] [PATCH v7 1/4] " Radu Nicolau
2020-07-16 12:29   ` [dpdk-dev] [PATCH v7 2/4] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-16 12:29   ` [dpdk-dev] [PATCH v7 3/4] common/qat: " Radu Nicolau
2020-07-16 12:29   ` [dpdk-dev] [PATCH v7 4/4] net/ixgbe: use WC store to update doorbell register Radu Nicolau
2020-07-17 10:49 ` [dpdk-dev] [PATCH v8 0/4] eal: add WC store functions Radu Nicolau
2020-07-17 10:49   ` [dpdk-dev] [PATCH v8 1/4] " Radu Nicolau
2020-07-20  6:42     ` Ruifeng Wang
2020-07-20  8:52       ` Nicolau, Radu
2020-07-17 10:49   ` [dpdk-dev] [PATCH v8 2/4] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-20  6:46     ` Ruifeng Wang
2020-07-20  8:54       ` Nicolau, Radu
2020-07-17 10:49   ` [dpdk-dev] [PATCH v8 3/4] common/qat: " Radu Nicolau
2020-07-17 16:42     ` Trahe, Fiona
2020-07-17 10:49   ` Radu Nicolau [this message]
2020-07-17 11:18     ` [dpdk-dev] [PATCH v8 4/4] net/ixgbe: " Ananyev, Konstantin
2020-07-20  9:12 ` [dpdk-dev] [PATCH v9 0/4] eal: add WC store functions Radu Nicolau
2020-07-20  9:12   ` [dpdk-dev] [PATCH v9 1/4] " Radu Nicolau
2020-07-20 12:20     ` David Marchand
2020-07-21  8:56       ` Nicolau, Radu
2020-07-20  9:12   ` [dpdk-dev] [PATCH v9 2/4] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-20  9:12   ` [dpdk-dev] [PATCH v9 3/4] common/qat: " Radu Nicolau
2020-07-20  9:12   ` [dpdk-dev] [PATCH v9 4/4] net/ixgbe: " Radu Nicolau
2020-07-21 11:31 ` [dpdk-dev] [PATCH v10 0/4] eal: add WC store functions Radu Nicolau
2020-07-21 11:31   ` [dpdk-dev] [PATCH v10 1/4] " Radu Nicolau
2020-07-21 11:31   ` [dpdk-dev] [PATCH v10 2/4] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-07-21 11:31   ` [dpdk-dev] [PATCH v10 3/4] common/qat: " Radu Nicolau
2020-07-21 11:31   ` [dpdk-dev] [PATCH v10 4/4] net/ixgbe: " Radu Nicolau
2020-08-26  9:55 ` [dpdk-dev] [PATCH v11 0/5] eal: add WC store functions Radu Nicolau
2020-08-26  9:55   ` [dpdk-dev] [PATCH v11 1/5] " Radu Nicolau
2020-08-26  9:55   ` [dpdk-dev] [PATCH v11 2/5] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-09-23  1:19     ` Lu, Wenzhuo
2020-08-26  9:55   ` [dpdk-dev] [PATCH v11 3/5] common/qat: " Radu Nicolau
2020-08-26  9:55   ` [dpdk-dev] [PATCH v11 4/5] net/ixgbe: " Radu Nicolau
2020-09-23  1:20     ` Lu, Wenzhuo
2020-08-26  9:55   ` [dpdk-dev] [PATCH v11 5/5] net/ice: " Radu Nicolau
2020-09-23  1:20     ` Lu, Wenzhuo
2020-09-23 14:22 ` [dpdk-dev] [PATCH v12 0/5] eal: add WC store functions Radu Nicolau
2020-09-23 14:22   ` [dpdk-dev] [PATCH v12 1/5] " Radu Nicolau
2020-09-23 14:22   ` [dpdk-dev] [PATCH v12 2/5] net/i40e: use WC store to update queue tail registers Radu Nicolau
2020-09-23 14:22   ` [dpdk-dev] [PATCH v12 3/5] common/qat: " Radu Nicolau
2020-09-23 14:22   ` [dpdk-dev] [PATCH v12 4/5] net/ixgbe: " Radu Nicolau
2020-09-23 14:22   ` [dpdk-dev] [PATCH v12 5/5] net/ice: " Radu Nicolau
2020-10-08  7:28   ` [dpdk-dev] [PATCH v12 0/5] eal: add WC store functions David Marchand
2020-10-08  9:51     ` Nicolau, Radu
2020-10-13  8:57     ` Ferruh Yigit
2020-10-13 12:50   ` David Marchand

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=1594982985-31551-5-git-send-email-radu.nicolau@intel.com \
    --to=radu.nicolau@intel.com \
    --cc=beilei.xing@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=fiona.trahe@intel.com \
    --cc=jerinjacobk@gmail.com \
    --cc=jia.guo@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=ruifeng.wang@arm.com \
    --cc=wei.zhao1@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.