patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Chas Williams <chas3@att.com>
Cc: Luca Boccassi <bluca@debian.org>,
	Matan Azrad <matan@mellanox.com>, dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/bonding: fix Rx slave fairness' has been queued to stable release 18.08.1
Date: Wed, 21 Nov 2018 16:04:16 +0000	[thread overview]
Message-ID: <20181121160440.9014-26-ktraynor@redhat.com> (raw)
In-Reply-To: <20181121160440.9014-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 11/26/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 ad543312c488172e15a70799d390288d18c79029 Mon Sep 17 00:00:00 2001
From: Chas Williams <chas3@att.com>
Date: Thu, 20 Sep 2018 08:52:26 -0400
Subject: [PATCH] net/bonding: fix Rx slave fairness

[ upstream commit e1110e97764873de0af28e6fa11dcd9c170d4e53 ]

Some PMDs, especially ones with vector receives, require a minimum number
of receive buffers in order to receive any packets.  If the first slave
read leaves less than this number available, a read from the next slave
may return 0 implying that the slave doesn't have any packets which
results in skipping over that slave as the next active slave.

To fix this, implement round robin for the slaves during receive that
is only advanced to the next slave at the end of each receive burst.
This is also done to provide some additional fairness in processing in
other bonding RX burst routines as well.

Fixes: 2efb58cbab6e ("bond: new link bonding library")

Signed-off-by: Chas Williams <chas3@att.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 53 +++++++++++++++++---------
 1 file changed, 34 insertions(+), 19 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 7814258f2..86e78bde8 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -59,26 +59,32 @@ bond_ethdev_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 	struct bond_dev_private *internals;
 
-	uint16_t num_rx_slave = 0;
 	uint16_t num_rx_total = 0;
-
+	uint16_t slave_count;
+	uint16_t active_slave;
 	int i;
 
 	/* Cast to structure, containing bonded device's port id and queue id */
 	struct bond_rx_queue *bd_rx_q = (struct bond_rx_queue *)queue;
-
 	internals = bd_rx_q->dev_private;
+	slave_count = internals->active_slave_count;
+	active_slave = internals->active_slave;
 
+	for (i = 0; i < slave_count && nb_pkts; i++) {
+		uint16_t num_rx_slave;
 
-	for (i = 0; i < internals->active_slave_count && nb_pkts; i++) {
 		/* Offset of pointer to *bufs increases as packets are received
 		 * from other slaves */
-		num_rx_slave = rte_eth_rx_burst(internals->active_slaves[i],
-				bd_rx_q->queue_id, bufs + num_rx_total, nb_pkts);
-		if (num_rx_slave) {
-			num_rx_total += num_rx_slave;
-			nb_pkts -= num_rx_slave;
-		}
+		num_rx_slave =
+			rte_eth_rx_burst(internals->active_slaves[active_slave],
+					 bd_rx_q->queue_id,
+					 bufs + num_rx_total, nb_pkts);
+		num_rx_total += num_rx_slave;
+		nb_pkts -= num_rx_slave;
+		if (++active_slave == slave_count)
+			active_slave = 0;
 	}
 
+	if (++internals->active_slave == slave_count)
+		internals->active_slave = 0;
 	return num_rx_total;
 }
@@ -259,23 +265,30 @@ bond_ethdev_rx_burst_8023ad_fast_queue(void *queue, struct rte_mbuf **bufs,
 	uint16_t slaves[RTE_MAX_ETHPORTS];
 	uint16_t slave_count;
-
-	uint16_t i, idx;
+	uint16_t active_slave;
+	uint16_t i;
 
 	/* Copy slave list to protect against slave up/down changes during tx
 	 * bursting */
 	slave_count = internals->active_slave_count;
+	active_slave = internals->active_slave;
 	memcpy(slaves, internals->active_slaves,
 			sizeof(internals->active_slaves[0]) * slave_count);
 
-	for (i = 0, idx = internals->active_slave;
-			i < slave_count && num_rx_total < nb_pkts; i++, idx++) {
-		idx = idx % slave_count;
+	for (i = 0; i < slave_count && nb_pkts; i++) {
+		uint16_t num_rx_slave;
 
 		/* Read packets from this slave */
-		num_rx_total += rte_eth_rx_burst(slaves[idx], bd_rx_q->queue_id,
-				&bufs[num_rx_total], nb_pkts - num_rx_total);
+		num_rx_slave = rte_eth_rx_burst(slaves[active_slave],
+						bd_rx_q->queue_id,
+						bufs + num_rx_total, nb_pkts);
+		num_rx_total += num_rx_slave;
+		nb_pkts -= num_rx_slave;
+
+		if (++active_slave == slave_count)
+			active_slave = 0;
 	}
 
-	internals->active_slave = idx;
+	if (++internals->active_slave == slave_count)
+		internals->active_slave = 0;
 
 	return num_rx_total;
@@ -460,5 +473,7 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
 	}
 
-	internals->active_slave = idx;
+	if (++internals->active_slave == slave_count)
+		internals->active_slave = 0;
+
 	return num_rx_total;
 }
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-21 15:59:14.293272268 +0000
+++ 0026-net-bonding-fix-Rx-slave-fairness.patch	2018-11-21 15:59:13.000000000 +0000
@@ -1,8 +1,10 @@
-From e1110e97764873de0af28e6fa11dcd9c170d4e53 Mon Sep 17 00:00:00 2001
+From ad543312c488172e15a70799d390288d18c79029 Mon Sep 17 00:00:00 2001
 From: Chas Williams <chas3@att.com>
 Date: Thu, 20 Sep 2018 08:52:26 -0400
 Subject: [PATCH] net/bonding: fix Rx slave fairness
 
+[ upstream commit e1110e97764873de0af28e6fa11dcd9c170d4e53 ]
+
 Some PMDs, especially ones with vector receives, require a minimum number
 of receive buffers in order to receive any packets.  If the first slave
 read leaves less than this number available, a read from the next slave
@@ -15,7 +17,6 @@
 other bonding RX burst routines as well.
 
 Fixes: 2efb58cbab6e ("bond: new link bonding library")
-Cc: stable@dpdk.org
 
 Signed-off-by: Chas Williams <chas3@att.com>
 Acked-by: Luca Boccassi <bluca@debian.org>

  parent reply	other threads:[~2018-11-21 16:06 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21 16:03 [dpdk-stable] patch 'net/sfc/base: fix PreFAST warnings because of unused return' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: fix invalid order of memset arguments' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: fix output buffer SAL annotation' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: fix SAL annotation for input buffers' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: properly align on line continuation' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: add space after sizeof' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: fix build because of no declaration' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: fix outer IPID field in TSO option descriptors' " Kevin Traynor
2018-11-21 16:03 ` [dpdk-stable] patch 'net/sfc/base: add check for TUNNEL module in NIC reset API' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: check size of memory to read sensors data to' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: avoid usage of too big arrays on stack' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: fix out of bounds read when dereferencing sdup' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: fix ID retrieval in v3 licensing' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: prevent access to the NIC config before probe' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: fix name of the argument to store RSS flags' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: fix a typo in unicast filter insertion comment' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: fix MAC Tx stats for less or equal to 64 bytes' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc: fix an Rx queue double release possibility' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc: fix a Tx " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/e1000: fix missing Tx multi-segs capability' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/fm10k: " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/i40e: " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/ixgbe: " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/avf: fix unused variables and label' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/avf: fix missing compiler error flags' " Kevin Traynor
2018-11-21 16:04 ` Kevin Traynor [this message]
2018-11-21 16:04 ` [dpdk-stable] patch 'net/dpaa: fix jumbo buffer config' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/dpaa: fix link speed based on MAC type' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/failsafe: remove not supported multicast MAC filter' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'ethdev: fix error handling in create function' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/sfc/base: make last byte of module information available' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/cxgbe: announce Rx scatter offload' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'ethdev: fix doxygen comment to be with structure' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/avf: remove keeping CRC configuration' " Kevin Traynor
2018-11-22 17:29   ` Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/virtio-user: fix multiple queue for vhost-kernel' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/virtio: add missing supported features' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'vhost: fix corner case for enqueue operation' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/i40e: fix 25G AOC and ACC cable detection on XXV710' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'net/bonding: stop and deactivate slaves on stop' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'doc: fix typo for cryptodev' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'doc: fix missing CCM to QAT feature list' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'examples/ipsec-secgw: fix wrong session size' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'app/test-crypto-perf: fix check for auth key' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'app/test-crypto-perf: fix check for cipher IV' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'app/test-crypto-perf: fix double allocation of memory' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'crypto/aesni_mb: fix possible array overrun' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'crypto/aesni_mb: fix truncated digest size for CMAC' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'compress/qat: fix checksum on decompression' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'compress/qat: remove unnecessary assignment' " Kevin Traynor
2018-11-21 16:04 ` [dpdk-stable] patch 'test/crypto: fix number of queue pairs' " 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=20181121160440.9014-26-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=bluca@debian.org \
    --cc=chas3@att.com \
    --cc=matan@mellanox.com \
    --cc=stable@dpdk.org \
    /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).