RFR: 8344049: Shenandoah: Eliminate init-update-refs safepoint
William Kemper
wkemper at openjdk.org
Wed Dec 11 19:50:28 UTC 2024
Shenandoah typically takes 4 safepoints per GC cycle. Although Shenandoah itself does not spend much time on these safepoints, it may still take quite some time for all of the mutator threads to reach the safepoint. The occasionally long time-to-safepoint increases latency in the higher percentiles.
The `init-update-refs` safepoint is responsible for retiring GCLABs (and PLABs) used during evacuation. Once evacuation is complete, no threads will access these LABs. This need not be done on a safepoint. `init-update-refs` is also where the global and thread local copies of the `gc_state` are updated. However, here we are turning off the `WEAK_ROOTS` flag _after_ all of the unmarked weak referents have been `nulled` out, so this does not need to happen atomically with respect to the mutators. Neither is it necessary to change the other state flags (EVACUATION, UPDATE_REFS) atomically across all mutators.
Note that the `init-update-refs` safepoint is still taken if either verification or `ShenandoahPacing` are enabled.
-------------
Commit messages:
- Fix comments
- Fix comment, revert unnecessary change
- Merge remote-tracking branch 'jdk/master' into remove-init-update-refs-safepoint
- Fix phase encoding to handle weak roots
- WIP: Use Threads::threads_do for propagating gc state (consolidated)
- WIP: Use Threads::threads_do for propagating gc state
- Remove unnecessary gc state propagations
- Encapsulate gc state
- Revert unnecessary changes
- Merge tag 'jdk-25+1' into two-steps-backward
- ... and 20 more: https://git.openjdk.org/jdk/compare/c6317191...9aaef708
Changes: https://git.openjdk.org/jdk/pull/22688/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22688&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8344049
Stats: 232 lines in 11 files changed: 125 ins; 70 del; 37 mod
Patch: https://git.openjdk.org/jdk/pull/22688.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22688/head:pull/22688
PR: https://git.openjdk.org/jdk/pull/22688
More information about the hotspot-gc-dev
mailing list