[ovs-dev] [PATCH 1/3] bond: Change rebalance ratio to be more fair

Zoltan Kiss zoltan.kiss at citrix.com
Mon Jan 7 22:03:21 UTC 2013


The old algorithm tries to converge to 0, despite it would mean a very
unbalanced situation. 1 is a more desirable goal.

Signed-off-by: Zoltan Kiss <zoltan.kiss at citrix.com>
---
 lib/bond.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/bond.c b/lib/bond.c
index 2c59f9d..2f8afdd 100644
--- a/lib/bond.c
+++ b/lib/bond.c
@@ -21,6 +21,7 @@
 #include <limits.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <math.h>
 
 #include "coverage.h"
 #include "dynamic-string.h"
@@ -771,8 +772,9 @@ choose_entry_to_migrate(const struct bond_slave *from, uint64_t to_tx_bytes)
         delta = e->tx_bytes;
         old_ratio = (double)from->tx_bytes / to_tx_bytes;
         new_ratio = (double)(from->tx_bytes - delta) / (to_tx_bytes + delta);
-        if (old_ratio - new_ratio > 0.1) {
-            /* Would decrease the ratio, move it. */
+        if ( (old_ratio - new_ratio > 0.1) &&
+             (fabs(new_ratio-1) < fabs(old_ratio-1)) ) {
+            /* Ideal ratio is 1, move it if the new ratio is closer to it. */
             return e;
         }
     }
-- 
1.8.0




More information about the dev mailing list