From: Kevin Traynor <ktraynor@redhat.com>
To: Yongseok Koh <yskoh@mellanox.com>
Cc: Shahaf Shuler <shahafs@mellanox.com>, dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/mlx5: optimize Tx external memory registration' has been queued to stable release 18.08.1
Date: Thu, 29 Nov 2018 13:20:48 +0000 [thread overview]
Message-ID: <20181129132128.7609-48-ktraynor@redhat.com> (raw)
In-Reply-To: <20181129132128.7609-1-ktraynor@redhat.com>
Hi,
FYI, your patch has been queued to stable release 18.08.1
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/08/18. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.
Thanks.
Kevin Traynor
---
>From 5c354a0f6dbcd7841296acc99e66454130d55d2a Mon Sep 17 00:00:00 2001
From: Yongseok Koh <yskoh@mellanox.com>
Date: Thu, 15 Nov 2018 10:29:17 +0000
Subject: [PATCH] net/mlx5: optimize Tx external memory registration
[ upstream commit feddd5d243b7b43d51d2e9655b9143c462384ea8 ]
There's some performance drop due to extra condition checks on the
datapath. Checking for external memory registration should be consolidated
to the existing bottom-half.
Fixes: 7e43a32ee060 ("net/mlx5: support externally allocated static memory")
Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Shahaf Shuler <shahafs@mellanox.com>
---
drivers/net/mlx5/mlx5_mr.c | 28 +++++++++++++++++++++++++++-
drivers/net/mlx5/mlx5_rxtx.h | 26 ++++++--------------------
2 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c
index 6d7653d7d..442b2d232 100644
--- a/drivers/net/mlx5/mlx5_mr.c
+++ b/drivers/net/mlx5/mlx5_mr.c
@@ -1046,5 +1046,5 @@ mlx5_rx_addr2mr_bh(struct mlx5_rxq_data *rxq, uintptr_t addr)
* Searched LKey on success, UINT32_MAX on no match.
*/
-uint32_t
+static uint32_t
mlx5_tx_addr2mr_bh(struct mlx5_txq_data *txq, uintptr_t addr)
{
@@ -1060,4 +1060,30 @@ mlx5_tx_addr2mr_bh(struct mlx5_txq_data *txq, uintptr_t addr)
}
+/**
+ * Bottom-half of LKey search on Tx. If it can't be searched in the memseg
+ * list, register the mempool of the mbuf as externally allocated memory.
+ *
+ * @param txq
+ * Pointer to Tx queue structure.
+ * @param mb
+ * Pointer to mbuf.
+ *
+ * @return
+ * Searched LKey on success, UINT32_MAX on no match.
+ */
+uint32_t
+mlx5_tx_mb2mr_bh(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
+{
+ uintptr_t addr = (uintptr_t)mb->buf_addr;
+ uint32_t lkey;
+
+ lkey = mlx5_tx_addr2mr_bh(txq, addr);
+ if (lkey == UINT32_MAX && rte_errno == ENXIO) {
+ /* Mempool may have externally allocated memory. */
+ return mlx5_tx_update_ext_mp(txq, addr, mlx5_mb2mp(mb));
+ }
+ return lkey;
+}
+
/**
* Flush all of the local cache entries.
diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
index 1db468c3b..e1dc6db21 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
@@ -363,5 +363,5 @@ uint16_t mlx5_rx_burst_vec(void *dpdk_txq, struct rte_mbuf **pkts,
void mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl);
uint32_t mlx5_rx_addr2mr_bh(struct mlx5_rxq_data *rxq, uintptr_t addr);
-uint32_t mlx5_tx_addr2mr_bh(struct mlx5_txq_data *txq, uintptr_t addr);
+uint32_t mlx5_tx_mb2mr_bh(struct mlx5_txq_data *txq, struct rte_mbuf *mb);
uint32_t mlx5_tx_update_ext_mp(struct mlx5_txq_data *txq, uintptr_t addr,
struct rte_mempool *mp);
@@ -619,5 +619,5 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)
* Memory pool where data is located for given mbuf.
*/
-static struct rte_mempool *
+static inline struct rte_mempool *
mlx5_mb2mp(struct rte_mbuf *buf)
{
@@ -668,7 +668,8 @@ mlx5_rx_addr2mr(struct mlx5_rxq_data *rxq, uintptr_t addr)
*/
static __rte_always_inline uint32_t
-mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
+mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
{
struct mlx5_mr_ctrl *mr_ctrl = &txq->mr_ctrl;
+ uintptr_t addr = (uintptr_t)mb->buf_addr;
uint32_t lkey;
@@ -681,21 +682,6 @@ mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
if (likely(lkey != UINT32_MAX))
return lkey;
- /* Take slower bottom-half (binary search) on miss. */
- return mlx5_tx_addr2mr_bh(txq, addr);
-}
-
-static __rte_always_inline uint32_t
-mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
-{
- uintptr_t addr = (uintptr_t)mb->buf_addr;
- uint32_t lkey = mlx5_tx_addr2mr(txq, addr);
-
- if (likely(lkey != UINT32_MAX))
- return lkey;
- if (rte_errno == ENXIO) {
- /* Mempool may have externally allocated memory. */
- lkey = mlx5_tx_update_ext_mp(txq, addr, mlx5_mb2mp(mb));
- }
- return lkey;
+ /* Take slower bottom-half on miss. */
+ return mlx5_tx_mb2mr_bh(txq, mb);
}
--
2.19.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2018-11-29 13:11:36.270910483 +0000
+++ 0047-net-mlx5-optimize-Tx-external-memory-registration.patch 2018-11-29 13:11:34.000000000 +0000
@@ -1,14 +1,15 @@
-From feddd5d243b7b43d51d2e9655b9143c462384ea8 Mon Sep 17 00:00:00 2001
+From 5c354a0f6dbcd7841296acc99e66454130d55d2a Mon Sep 17 00:00:00 2001
From: Yongseok Koh <yskoh@mellanox.com>
Date: Thu, 15 Nov 2018 10:29:17 +0000
Subject: [PATCH] net/mlx5: optimize Tx external memory registration
+[ upstream commit feddd5d243b7b43d51d2e9655b9143c462384ea8 ]
+
There's some performance drop due to extra condition checks on the
datapath. Checking for external memory registration should be consolidated
to the existing bottom-half.
Fixes: 7e43a32ee060 ("net/mlx5: support externally allocated static memory")
-Cc: stable@dpdk.org
Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Shahaf Shuler <shahafs@mellanox.com>
@@ -60,24 +61,24 @@
/**
* Flush all of the local cache entries.
diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
-index 1b6200f6c..59fb43fef 100644
+index 1db468c3b..e1dc6db21 100644
--- a/drivers/net/mlx5/mlx5_rxtx.h
+++ b/drivers/net/mlx5/mlx5_rxtx.h
-@@ -364,5 +364,5 @@ uint16_t mlx5_rx_burst_vec(void *dpdk_txq, struct rte_mbuf **pkts,
+@@ -363,5 +363,5 @@ uint16_t mlx5_rx_burst_vec(void *dpdk_txq, struct rte_mbuf **pkts,
void mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl);
uint32_t mlx5_rx_addr2mr_bh(struct mlx5_rxq_data *rxq, uintptr_t addr);
-uint32_t mlx5_tx_addr2mr_bh(struct mlx5_txq_data *txq, uintptr_t addr);
+uint32_t mlx5_tx_mb2mr_bh(struct mlx5_txq_data *txq, struct rte_mbuf *mb);
uint32_t mlx5_tx_update_ext_mp(struct mlx5_txq_data *txq, uintptr_t addr,
struct rte_mempool *mp);
-@@ -620,5 +620,5 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)
+@@ -619,5 +619,5 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)
* Memory pool where data is located for given mbuf.
*/
-static struct rte_mempool *
+static inline struct rte_mempool *
mlx5_mb2mp(struct rte_mbuf *buf)
{
-@@ -669,7 +669,8 @@ mlx5_rx_addr2mr(struct mlx5_rxq_data *rxq, uintptr_t addr)
+@@ -668,7 +668,8 @@ mlx5_rx_addr2mr(struct mlx5_rxq_data *rxq, uintptr_t addr)
*/
static __rte_always_inline uint32_t
-mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
@@ -87,7 +88,7 @@
+ uintptr_t addr = (uintptr_t)mb->buf_addr;
uint32_t lkey;
-@@ -682,21 +683,6 @@ mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
+@@ -681,21 +682,6 @@ mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
if (likely(lkey != UINT32_MAX))
return lkey;
- /* Take slower bottom-half (binary search) on miss. */
next prev parent reply other threads:[~2018-11-29 13:23 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-29 13:20 [dpdk-stable] patch 'app/testpmd: fix port status for new bonded devices' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/i40e: fix Rx instability with vector mode' " Kevin Traynor
2018-11-29 13:30 ` Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/vmxnet3: fix hot-unplug' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbe: stop link setup alarm handler before start' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbevf: add PCI uninitialization for VF' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: check Rx config before doing VLAN strip offload' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: fix check for redefined match items' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: increase completion wait time for flow operations' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: fix wrong ingress port value set in filter spec' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost: fix IOVA access for packed ring' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/virtio-user: fix typo in error message' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost/crypto: fix packet copy in chaining mode' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost: remove unneeded null pointer check' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bnx2x: fix dynamic logging' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bnx2x: fix VF link state update' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fallback quietly if pkg-config is unavailable' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/qede: fix crash when configure fails' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/octeontx: fix mbuf corruption with large private sizes' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/qede: fix Tx tunnel offload support mask' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'ethdev: fix device info getting' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/sfc/base: fix field order in filter spec struct' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/enic: fix size check in Tx prepare handler' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbevf: fix link state' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory leak for TM object' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory allocation for DSCP table' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'crypto/ccp: fix resource leak' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'crypto/aesni_mb: fix queue pair free' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'examples/l3fwd-power: fix power library fallback' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/power: fix ACPI cpufreq module miss " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/kni: fix " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/reorder: fix out of bound access' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'malloc: fix adjacency check to also include segment list' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'build: set -mfpu=neon flag for armv7-a with meson' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'efd: fix write unlock during ring creation' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: fix minor typo' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fix minor typos' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: fix initialization of struct members' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: optimize Tx external memory registration' " Kevin Traynor
2018-11-29 13:20 ` Kevin Traynor [this message]
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: optimize Tx doorbell write' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: optimize Rx buffer replenishment threshold' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fix packet type for MPLS in UDP' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ena: fix cleaning HW IO rings configuration' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/octeontx: fix failures when available ports > queues' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/avf: fix Tx offload mask' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bonding: fix possible silent failure in configuration' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory leak for DSCP table' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/pdump: fix port id storage size' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test: fix interrupt check' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'test/power: skip KVM autotest if cannot run' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'test: release ring resources after PMD perf test' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'devtools: fix regex in symbol addition check' " Kevin Traynor
2018-11-30 13:55 ` Neil Horman
2018-11-30 20:36 ` Kevin Traynor
2018-12-01 19:13 ` Neil Horman
2018-11-29 13:21 ` [dpdk-stable] patch 'usertools: check for lspci dependency' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix DESTDIR variable name in meson guide' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix NUMA library name in Linux " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: add cross-compilation in sample apps " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix formatting in IP reassembly app " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix function name in flow filtering " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'ipc: fix access after async request failure' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eal: fix build with -O1' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/mlx4: " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eventdev: fix unlock in Rx adapter' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'config: enable more than 128 cores for arm64' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/i40e/base: fix comment referencing internal data' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/ena: fix out of order completion' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/qede: fix Tx offload mask' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/ixgbe: fix TDH register write' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'vhost: fix packed ring constants declaration' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: remove old options from pdump guide' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eal/bsd: fix possible IOPL fd leak' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/virtio: avoid annoying IOPL error log' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'bus/pci: fix allocation of device path' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'vfio: do not needlessly setup device in secondary process' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'mem: fix division by zero in no-NUMA mode' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'fix indentation in symbol maps' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'fix dpdk.org URLs' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'ethdev: eliminate interim variable' " Kevin Traynor
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=20181129132128.7609-48-ktraynor@redhat.com \
--to=ktraynor@redhat.com \
--cc=shahafs@mellanox.com \
--cc=stable@dpdk.org \
--cc=yskoh@mellanox.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).