Details
-
Epic
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
Work Stealing Process Scheduler
Description
Currently, libprocess uses a work sharing Process scheduler, by which all workers take work from a global shared runnable Process queue. This has some performance implications, for example the shared global queue can have a high degree of contention, and Processes can migrate across cores frequently (this can be even more expensive on NUMA systems).
We can introduce an alternative work stealing scheduler, in which each worker has its own queue. When this worker runs out of items, it steals from another worker's queue (stealing attempts could be done with cache locality / NUMA in mind).
The process scheduler could ideally be a run-time option if it does not introduce performance overhead over a compile time option.