net/bonding: reduce slave starvation on Rx poll
authorKeith Wiles <keith.wiles@intel.com>
Tue, 21 Mar 2017 15:12:12 +0000 (10:12 -0500)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 4 Apr 2017 16:59:45 +0000 (18:59 +0200)
commitae2a04864a9a3878f74e66e3ae0fdebe77223a09
tree7f307ba556b6ab5166a16466a9118ebdec4f0647
parent52822612980a35d04562ea0284e797b13cc08ce9
net/bonding: reduce slave starvation on Rx poll

When polling the bonded ports for RX packets the old driver would
always start with the first slave in the list. If the requested
number of packets is filled on the first port in a two port config
then the second port could be starved or have larger number of
missed packet errors.

The code attempts to start with a different slave each time RX poll
is done to help eliminate starvation of slave ports. The effect of
the previous code was much lower performance for two slaves in the
bond then just the one slave.

The performance drop was detected when the application can not poll
the rings of Rx packets fast enough and the packets per second for
two or more ports was at the threshold throughput of the application.
At this threshold the slaves would see very little or no drops in
the case of one slave. Then enable the second slave you would see
a large drop rate on the two slave bond and reduction in throughput.

Signed-off-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
drivers/net/bonding/rte_eth_bond_pmd.c
drivers/net/bonding/rte_eth_bond_private.h