Traditionally, (unless balancing was turned off), the bonding code
chose the active slave for all flows which hadn't previously been
allocated to another.  This worked fine in theory because traffic
would eventually be balanced away if there was congestion.

Instead of the historical approach, this patch uses a hash to
choose the initial slave, giving what behaves like a random
allocation.  This performs better on switches using a long
rebalance interval, is less confusing to users, and removes a
special case needed for dealing with non-balanced bonds.

Signed-off-by: Ethan Jackson <et...@nicira.com>
---
 lib/bond.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/lib/bond.c b/lib/bond.c
index 06680ee..c74bcfb 100644
--- a/lib/bond.c
+++ b/lib/bond.c
@@ -1442,15 +1442,12 @@ choose_output_slave(const struct bond *bond, const 
struct flow *flow,
         }
         /* Fall Through. */
     case BM_SLB:
-        if (!bond_is_balanced(bond)) {
-            return choose_stb_slave(bond, bond_hash(bond, flow, vlan));
-        }
         e = lookup_bond_entry(bond, flow, vlan);
         if (!e->slave || !e->slave->enabled) {
             e->slave = CONTAINER_OF(hmap_random_node(&bond->slaves),
                                     struct bond_slave, hmap_node);
             if (!e->slave->enabled) {
-                e->slave = bond->active_slave;
+                e->slave = choose_stb_slave(bond, bond_hash(bond, flow, vlan));
             }
             e->tag = tag_create_random();
         }
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to