With this commit the rebalance of hash entries between bonding members becomes less frequent. If we know all bond members' speed, we do not move hash entries between them if load difference is less than 1.5% of minimum link speed of bond members.
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2025-March/422028.html Suggested-by: Ilya Maximets <i.maxim...@ovn.org> Signed-off-by: Vladislav Odintsov <vlodintsov@k2.cloud> --- ofproto/bond.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ofproto/bond.c b/ofproto/bond.c index 17bf10be5..70219db89 100644 --- a/ofproto/bond.c +++ b/ofproto/bond.c @@ -1336,6 +1336,7 @@ bond_rebalance(struct bond *bond) struct ovs_list bals; bool rebalanced = false; bool use_recirc; + uint32_t min_member_mbps = UINT32_MAX; ovs_rwlock_wrlock(&rwlock); if (!bond_is_balanced(bond) || time_msec() < bond->next_rebalance) { @@ -1378,7 +1379,11 @@ bond_rebalance(struct bond *bond) ovs_list_init(&bals); HMAP_FOR_EACH (member, hmap_node, &bond->members) { if (member->enabled) { + uint32_t mbps; + insert_bal(&bals, member); + netdev_get_speed(member->netdev, &mbps, NULL); + min_member_mbps = MIN(mbps, min_member_mbps); } } log_bals(bond, &bals); @@ -1392,10 +1397,12 @@ bond_rebalance(struct bond *bond) uint64_t overload; overload = from->tx_bytes - to->tx_bytes; - if (overload < to->tx_bytes >> 5 || overload < 100000) { + if (overload < to->tx_bytes >> 5 || + overload / 1000000 < MAX(1, min_member_mbps / 8 >> 6)) { /* The extra load on 'from' (and all less-loaded members), compared * to that of 'to' (the least-loaded member), is less than ~3%, or - * it is less than ~1Mbps. No point in rebalancing. */ + * it is less than MAX of 1MB and ~1.5% of minimum bond member + * link speed, if present. No point in rebalancing. */ break; } -- 2.48.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev