Research

Meta's Rebalancer task solver misreports capacity status

A benchmark of Meta's Rebalancer 1.0.4 task assignment solver revealed silent configuration errors and false status flags, requiring practitioners to verify solutions manually.

MarkTechPost3 days agoResearch
Image: MarkTechPost

A hands-on technical evaluation of Meta's Rebalancer 1.0.4 library exposes notable reliability issues and silent errors within its Python binding and solver mechanics. Rebalancer is Meta's assignment solver designed for infrastructure task placement and optimization, featuring a C++ core alongside Python bindings. The solver supports local search strategies and the HiGHS mixed-integer programming solver package, while excluding external solvers like Gurobi and XPRESS in its standard wheel build.

In basic speed tests executed on an Apple M4 processor, Rebalancer demonstrated fast execution times. A simple two-task optimization completed in 0.8 ms using local search and 0.9 ms with HiGHS. In a simulated datacenter environment featuring eight hosts across four racks and 16 tasks divided among four jobs, local search successfully redistributed 13 tasks to achieve CPU balance without capacity or rack violations, registering a median solve time of 2.5 ms across three fresh builds.

However, deeper testing revealed serious discrepancies between the solver's reported state and the actual output assignments. Across 24 evaluated solves, Rebalancer reported a solved flag of True in 14 instances where the returned placement still left container memory over capacity. Under local search, enforcing a HARD constraint policy on a fixable start returned the violating initial placement without raising an exception or moving any tasks. By comparison, HiGHS resolved the fixable model and correctly raised an infeasible exception when memory bounds could not be met.

The C++ binding also introduces subtle operational risks. It silently ignores misspelled specification dictionary keys without throwing warnings, and it rejects standard string enum names such as HARD, SOFT, or HIGHS. Practitioners must instead pass raw Thrift integer mappings, such as policy integer 2 for HARD and solverPackage integer 2 for HiGHS. Detailed calculations confirmed that the internal brokenVal metric represents total resource excess divided by the mean host capacity. To safely use Rebalancer 1.0.4, practitioners must independently recount returned task assignments rather than relying on internal flags or endReason values.

This is our own summary of reporting by MarkTechPost

More in Research