0.21.1 Released

Sunday, December 24, 2017 | Posted in Release

Pony 0.21.1 is a recommended update. It fixes a stability edge-case where memory usage could climb out of control when a large number of scheduler threads were used when there was very little work to be done.

Dynamic scheduler thread scaling based on workload

Before Pony 0.21.1, the runtime would start up a specific number of scheduler threads on initialization; by default the same as the number of physical cores. These scheduler threads would run actors and send block/unblock messages and steal actors from each other regardless of how many actors and what the workload of the program was. This usually resulted in wasted CPU cycles and cache thrashing if there wasn’t enough work to keep all scheduler threads busy.

With the introduction of dynamic scheduler thread scaling, the runtime still starts up the threads on initialization, but now the threads can suspend execution if there isn’t enough work to do to minimize the work stealing overhead.

Added

  • Dynamic scheduler thread scaling based on workload (PR #2386)
  • Support setting the binary executable name with --bin-name. (PR #2430)

AUTHOR

Sean T. Allen

Sean is a member of the Pony core team. His turn-ons include programming languages, distributed computing, Hiwatt amplifiers, and Fender Telecasters. His turn-offs include mayonnaise, stirring yogurt, and sloppy code. He is one of the authors of Storm Applied, and VP of Engineering at Wallaroo Labs.