Cleanup the set of load balancing strategies


We are planning on changing the way load balancing is implemented in Charm++. The main reasons for these changes are to allow for more sophisticated load balancing scenarios such as node level load balancing, improved performance, and cleanup of years of accumulated cruft. These changes will most likely be in the Charm++ 7.0 release.

Part of this effort involves removing many of the current load balancers and load balancing strategies, instead focusing on a smaller set of well maintained and generally applicable load balancers.

We intend to keep at least the following set:

  • DistributedLB (possibly renaming to GrapevineLB or other name)
  • GreedyLB/GreedyRefineLB
  • RefineLB (and TempAwareRefineLB variant)
  • MetisLB/ScotchLB/ZoltanLB
  • RandomLB
  • RotateLB (useful for diagnostic purposes)
  • DummyLB (useful for diagnostic purposes)

NOTE: hierarchical load balancing will be a major part of the new framework. It is designed from scratch and the plan is to ultimately replace CentralLB and Hybrid(Base)LB. Many of the common strategies (greedy(refine), refine, etc) will be components of the new hierarchical load balancer.

Please discuss here if you need any of the other existing load balancers or functionality, and if possible explain your use case, and pros and cons of those balancers or lb strategies.


May not be a bad time to rename some of these not-so-not-descriptive names of the LBs.

Are Hierarchical LBs being completely removed? Thought it had use cases.


There will be a new hierarchical load balancer designed from scratch, but it is not a strategy per se so that is why we didn’t mention hierarchical (but I guess I should put a comment at the top).

The new hierarchical load balancer (called TreeLB for now), is able to run common strategies like Greedy, GreedyRefine, Refine, etc. at chosen levels of the tree. In fact, in many cases strategies will just be load balancing algorithms with a common interface that receive a vector of objects and a vector of processors and calculate a solution. These strategies are basically components that are plugged into TreeLB. So they are no longer a complete load balancer by themselves.