You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR removes the coordinator (a.k.a. controller) thread, and allows
temporarily terminating and restarting all GC worker threads in order to
support forking.
Major changes include:
- `GCController` is removed. All synchronization mechanisms involving
the controller are removed, too. Important synchronization operations,
such as opening buckets and declaring GC finished, are done by the last
parked worker. The work packet `EndOfGC` is removed, and its job is now
done by the last parked worker.
- The `WorkerMonitor`, which previously synchronizes between GC workers,
now also synchronizes between mutators and GC workers. This allows
mutators to trigger GC by directly communicating with GC workers.
- Introduced a new mechanism: "goals". Mutators can now request "goals",
and GC workers will work on one goal at a time. Currently, a "goal" can
be either GC or StopForFork. Triggering GC is now implemented as
requesting the GC goal.
- Added a pair of new APIs, namely `MMTK::prepare_to_fork()` and
`MMTK::after_fork()`. VM bindings call them before and after forking to
let the MMTK instance do proper preparation for forking.
Fixes: #1053Fixes: #1054
0 commit comments