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.k...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev