Closed wks closed 5 months ago
Why was this never a problem when we had the coordinator thread? Also it'd be good to get @tianleq to take a look at this PR since he's spent a lot of time understanding the internal safepoint thread mechanism in HotSpot.
Why was this never a problem when we had the coordinator thread?
When we had the coordinator thread, GCRequester
contained the variables that record whether GC is triggered, and they were protected by their own mutex lock and condvar. Mutators triggered GC by acquiring that mutex and signalling that condvar; the coordinator thread only acquired that mutex and waited for that condvar after one GC has finished and before the next GC starts. Particularly, the coordinator does not hold any lock in EndOfGC.
After removing the coordinator thread, we removed the mutex and condvar in GCRequester
, and there is effectly only one mutex that synchornizes both the mutators and the coordinator. That is the mutex in WorkerMonitor
. WorkerMonitor
used to be an unmamed pair of (Mutex<()>, Condvar)
created by the scheduler, and that was the same mutex and condvar that protected work buckets. As part of the new synchronization mechanism, the last parked GC worker behaves like the old coordinator and executes what used to be done in EndOfGC. It does so while holding the mutex in WorkerMonitor
so that other GC workers will not unpark. Mutators also needs to hold that mutex to set "goals" (such as "please do a GC") and notify GC workers to respond to the newly added "goal". Now, you see, mutators cannot trigger GC when the last parked worker is still executing EndOfGC (now named GCWorkScheduler::on_gc_finished
). That makes sense because it doesn't make sense to trigger GC before the last GC officially finished. And even if a mutator runs so fast that it tried to trigger GC, the last parked GC worker will eventually finish and release the lock. Actually, resume_mutators
is the last thing on_gc_finished
does, and after that the worker will release the mutex.
However, the synchronization problem with OpenJDK's VMThread blocked the "companion thread", which in turn blocked the worker executing resume_mutators
. That will block mutators that attempted to request GC, and that blocks the next VM operation that attempts to stop the world, and that's what was blocking the companion thread in the first place. Deadlock.
So the reason why this problem only manifests after we removed the coordinator thread is that our synchronization mechanism in mmtk-core changed.
This problem is very likely to reproduce when executing lusearch
in DaCapo 2006, but we never run that benchmark in CI.
One reason why lusearch
in DaCapo 2006 is likely to trigger the problem is that it executes an awful lot of RevokeBias
VM operation. When given a 32M heap, using StickyImmix, it executes 261 RevokeBias
VM operations, concentrated in two intervals: 0.92s-1.02s and 2.44s-2.72s. The RevokeBias
operations in the former are usually benign because GC is not triggered during that time. The latter interval is likely to cause the problem since RevokeBias
operations are often interleaved with GCs. Here is a log with RevokeBias
and GC
included so you can have a basic idea.
wks@luna ~/o/dacapo [1]> grep "Evaluating.*RevokeBias\|End of GC" lusearch-2006.log
[0.827s][446824] Evaluating safepoint VM operation: RevokeBias
[0.923s][446824] Evaluating safepoint VM operation: RevokeBias
[0.923s][446824] Evaluating safepoint VM operation: RevokeBias
[0.923s][446824] Evaluating safepoint VM operation: RevokeBias
[0.924s][446824] Evaluating safepoint VM operation: RevokeBias
[0.924s][446824] Evaluating safepoint VM operation: RevokeBias
[0.924s][446824] Evaluating safepoint VM operation: RevokeBias
[0.924s][446824] Evaluating safepoint VM operation: RevokeBias
[0.924s][446824] Evaluating safepoint VM operation: RevokeBias
[0.925s][446824] Evaluating safepoint VM operation: RevokeBias
[0.925s][446824] Evaluating safepoint VM operation: RevokeBias
[0.926s][446824] Evaluating safepoint VM operation: RevokeBias
[0.927s][446824] Evaluating safepoint VM operation: RevokeBias
[0.927s][446824] Evaluating safepoint VM operation: RevokeBias
[0.929s][446824] Evaluating safepoint VM operation: RevokeBias
[0.930s][446824] Evaluating safepoint VM operation: RevokeBias
[0.931s][446824] Evaluating safepoint VM operation: RevokeBias
[0.931s][446824] Evaluating safepoint VM operation: RevokeBias
[0.932s][446824] Evaluating safepoint VM operation: RevokeBias
[0.934s][446824] Evaluating safepoint VM operation: RevokeBias
[0.972s][446824] Evaluating safepoint VM operation: RevokeBias
[0.973s][446824] Evaluating safepoint VM operation: RevokeBias
[0.974s][446824] Evaluating safepoint VM operation: RevokeBias
[0.974s][446824] Evaluating safepoint VM operation: RevokeBias
[0.975s][446824] Evaluating safepoint VM operation: RevokeBias
[0.975s][446824] Evaluating safepoint VM operation: RevokeBias
[0.975s][446824] Evaluating safepoint VM operation: RevokeBias
[0.975s][446824] Evaluating safepoint VM operation: BulkRevokeBias
[0.980s][446824] Evaluating safepoint VM operation: RevokeBias
[0.980s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.980s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.981s][446824] Evaluating safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.982s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.983s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.983s][446824] Evaluating safepoint VM operation: RevokeBias
[0.983s][446824] Evaluating safepoint VM operation: RevokeBias
[0.985s][446824] Evaluating safepoint VM operation: RevokeBias
[0.985s][446824] Evaluating safepoint VM operation: RevokeBias
[0.985s][446824] Evaluating safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.986s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.988s][446824] Evaluating safepoint VM operation: RevokeBias
[0.988s][446824] Evaluating safepoint VM operation: RevokeBias
[0.988s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.989s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.991s][446824] Evaluating safepoint VM operation: RevokeBias
[0.991s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.991s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[0.992s][446824] Evaluating safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[0.992s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.006s][446824] Evaluating safepoint VM operation: RevokeBias
[1.006s][446824] Evaluating safepoint VM operation: RevokeBias
[1.007s][446824] Evaluating safepoint VM operation: RevokeBias
[1.007s][446824] Evaluating safepoint VM operation: RevokeBias
[1.007s][446824] Evaluating safepoint VM operation: RevokeBias
[1.009s][446824] Evaluating safepoint VM operation: RevokeBias
[1.009s][446824] Evaluating safepoint VM operation: RevokeBias
[1.009s][446824] Evaluating safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.011s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.013s][446824] Evaluating safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.014s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.017s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.018s][446824] Evaluating safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: BulkRevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[1.019s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (1714/8192 pages, took 20 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (1915/8192 pages, took 6 ms)
[1.108s][446824] Evaluating safepoint VM operation: RevokeBias
[1.108s][446824] Evaluating coalesced safepoint VM operation: RevokeBias
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2110/8192 pages, took 3 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2287/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2500/8192 pages, took 6 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2691/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2878/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3097/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3282/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3485/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3715/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3950/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (4153/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (4363/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (4558/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (4760/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (4971/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (5165/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (5376/8192 pages, took 9 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (5571/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (5757/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (5959/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (6154/8192 pages, took 6 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2667/8192 pages, took 12 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (2878/8192 pages, took 6 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3081/8192 pages, took 6 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3291/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3485/8192 pages, took 5 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3696/8192 pages, took 4 ms)
[2024-05-28T06:48:39Z INFO mmtk::scheduler::scheduler] End of GC (3891/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4120/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4330/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4525/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4709/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4895/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5106/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5335/8192 pages, took 6 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5538/8192 pages, took 6 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5749/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5959/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (6162/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (2718/8192 pages, took 14 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (2929/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3107/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3310/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3536/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3764/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3993/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4188/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4423/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4660/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4852/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5073/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5258/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5452/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5646/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5857/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (6078/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (6281/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (2750/8192 pages, took 11 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (2996/8192 pages, took 6 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3223/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3418/8192 pages, took 6 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3629/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3823/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4017/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4220/8192 pages, took 6 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4407/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4600/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4785/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4998/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5173/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5352/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5520/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5713/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5908/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (6119/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (6314/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (2786/8192 pages, took 11 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3004/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3231/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3410/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3604/8192 pages, took 4 ms)
[2.446s][446824] Evaluating safepoint VM operation: RevokeBias
[2.450s][446824] Evaluating safepoint VM operation: RevokeBias
[2.450s][446824] Evaluating safepoint VM operation: RevokeBias
[2.450s][446824] Evaluating safepoint VM operation: RevokeBias
[2.450s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (3798/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4001/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4196/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4390/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4592/8192 pages, took 4 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4785/8192 pages, took 5 ms)
[2.533s][446824] Evaluating safepoint VM operation: RevokeBias
[2.535s][446824] Evaluating safepoint VM operation: RevokeBias
[2.535s][446824] Evaluating safepoint VM operation: RevokeBias
[2.535s][446824] Evaluating safepoint VM operation: RevokeBias
[2.540s][446824] Evaluating safepoint VM operation: RevokeBias
[2.541s][446824] Evaluating safepoint VM operation: RevokeBias
[2.542s][446824] Evaluating safepoint VM operation: RevokeBias
[2.542s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (4998/8192 pages, took 4 ms)
[2.554s][446824] Evaluating safepoint VM operation: RevokeBias
[2.555s][446824] Evaluating safepoint VM operation: RevokeBias
[2.555s][446824] Evaluating safepoint VM operation: RevokeBias
[2.556s][446824] Evaluating safepoint VM operation: RevokeBias
[2.557s][446824] Evaluating safepoint VM operation: RevokeBias
[2.558s][446824] Evaluating safepoint VM operation: RevokeBias
[2.558s][446824] Evaluating safepoint VM operation: RevokeBias
[2.558s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5181/8192 pages, took 4 ms)
[2.573s][446824] Evaluating safepoint VM operation: RevokeBias
[2.575s][446824] Evaluating safepoint VM operation: RevokeBias
[2.575s][446824] Evaluating safepoint VM operation: RevokeBias
[2.575s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5392/8192 pages, took 5 ms)
[2.595s][446824] Evaluating safepoint VM operation: RevokeBias
[2.596s][446824] Evaluating safepoint VM operation: RevokeBias
[2.596s][446824] Evaluating safepoint VM operation: RevokeBias
[2.596s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5587/8192 pages, took 5 ms)
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5765/8192 pages, took 4 ms)
[2.621s][446824] Evaluating safepoint VM operation: RevokeBias
[2.622s][446824] Evaluating safepoint VM operation: RevokeBias
[2.623s][446824] Evaluating safepoint VM operation: RevokeBias
[2.623s][446824] Evaluating safepoint VM operation: RevokeBias
[2.623s][446824] Evaluating safepoint VM operation: RevokeBias
[2.623s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:40Z INFO mmtk::scheduler::scheduler] End of GC (5975/8192 pages, took 4 ms)
[2.640s][446824] Evaluating safepoint VM operation: RevokeBias
[2.640s][446824] Evaluating safepoint VM operation: RevokeBias
[2.640s][446824] Evaluating safepoint VM operation: RevokeBias
[2.640s][446824] Evaluating safepoint VM operation: RevokeBias
[2.644s][446824] Evaluating safepoint VM operation: RevokeBias
[2.646s][446824] Evaluating safepoint VM operation: RevokeBias
[2.646s][446824] Evaluating safepoint VM operation: BulkRevokeBias
[2.647s][446824] Evaluating safepoint VM operation: RevokeBias
[2.648s][446824] Evaluating safepoint VM operation: RevokeBias
[2.650s][446824] Evaluating safepoint VM operation: RevokeBias
[2.652s][446824] Evaluating safepoint VM operation: RevokeBias
[2.653s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (6154/8192 pages, took 2 ms)
[2.665s][446824] Evaluating safepoint VM operation: RevokeBias
[2.666s][446824] Evaluating safepoint VM operation: RevokeBias
[2.667s][446824] Evaluating safepoint VM operation: RevokeBias
[2.669s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (2345/8192 pages, took 19 ms)
[2.694s][446824] Evaluating safepoint VM operation: RevokeBias
[2.695s][446824] Evaluating safepoint VM operation: RevokeBias
[2.701s][446824] Evaluating safepoint VM operation: RevokeBias
[2.703s][446824] Evaluating safepoint VM operation: RevokeBias
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (2558/8192 pages, took 3 ms)
[2.712s][446824] Evaluating safepoint VM operation: RevokeBias
[2.714s][446824] Evaluating safepoint VM operation: RevokeBias
[2.714s][446824] Evaluating safepoint VM operation: RevokeBias
[2.715s][446824] Evaluating safepoint VM operation: RevokeBias
[2.716s][446824] Evaluating safepoint VM operation: RevokeBias
[2.716s][446824] Evaluating safepoint VM operation: RevokeBias
[2.719s][446824] Evaluating safepoint VM operation: BulkRevokeBias
[2.719s][446824] Evaluating safepoint VM operation: BulkRevokeBias
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (2727/8192 pages, took 3 ms)
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (2897/8192 pages, took 2 ms)
[2024-05-28T06:48:41Z INFO mmtk::scheduler::scheduler] End of GC (2995/8192 pages, took 4 ms)
In comparison, in DaCapo 2006, it doesn't execute any RevokeBias
in antlr
, only one in pmd
, and only three in luindex
. In DaCapo Bach, lusearch
executes 55 RevokeBias, concentrated during the 0.94s-1.08s interval during 2.5 second of execution time. The luserach
in DaCapo Chopin is interesting. It executes 200+ RevokeBias
in the first 3 seconds when the benchmark is being prepared, and 5 RevokeBias
at the end of the benchmark. But during the 50 seconds of the main part of the benchmark, only one RevokeBias
is executed.
I think the lusearch
benchmark may have changed its behavior a lot during the course of 2006, Bach (2009) and Chopin (2023). Since it doesn't appear often in the modern lusearch
, we didn't notice that was a problem.
I added @wenyuzhao as the other reviewer, and removed myself from the list.
gc_lock
now never does safepoint check. We always explicitly enter safepoint viaThreadBlockInVM
.The VM companion thread now lets
VM_MMTkSTWOperation
(executed by the VM thread) transition the state to_threads_resumed
instead of doing it afterVMThread::execute
returns. This works around a problem where the VM thread fails to unblock the companion thread fromVMThread::execute
after finishing evaluatingVM_MMTkSTWOperation
.Also added the
lusearch
benchmark from DaCapo 2006 to normal tests. This test case is known to cause deadlock before, and this PR should fix it.Some minor style changes:
We consistently use the constant
Mutex::_no_safepoint_check_flag
instead oftrue
when acquiring or waiting for theMonitor
.Slightly updated comments and logs. Logging statements no longer include thread IDs because thread IDs can be turned on by a command line option.
Fixes: https://github.com/mmtk/mmtk-openjdk/issues/278