RFR: 8352588: GenShen: Enabling JFR asserts when getting GCId

Xiaolong Peng xpeng at openjdk.org
Fri Mar 21 22:09:32 UTC 2025


### Root cause
Shenandoah has its own way to generate gc id([link](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp#L234), [link](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/gc/shenandoah/shenandoahController.hpp#L43)), but when it runs a specific GC cycle, it still use the default GCIdMark([link](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/gc/shenandoah/shenandoahGenerationalControlThread.cpp#L389)) to generate a gc id and set it to NamedThread::_gc_id. Once the specific GC cycle finishes, the NamedThread::_gc_id is restored to the original value which is `undefined`, which causes the asserts when Enabling JFR, in release build it should cause invalid GC id in JFR.

### Solution
it is confusing that Shenandoah generates its own gc id but not use it for GC logging and JFR, the solution is fairly simple, the control thread just need inject gc id with GCIdMark(gc_id) it generates in `ShenandoahControlThread::run_service` and `ShenandoahGenerationalControlThread::run_gc_cycle`

In the test, I also noticed the value of gc_id generated by Shenandoah control thread starts from 1, which is different from the default behavior of GCIdMark which generates id starting from 0, this PR will also fix it.  

### Test
- [x] TEST=gc/shenandoah/TestWithLogLevel.java TEST_VM_OPTS="-XX:StartFlightRecording"
- [ ] TEST=hotspot_gc_shenandoah

-------------

Commit messages:
 - Add static cast from size_t to uint
 - Rename _gc_id of ShenandoahController to _gc_count, and gc id will be derived from _gc_count
 - tide up
 - gc_id should start from 0
 - GenShen: Enabling JFR asserts when getting GCId

Changes: https://git.openjdk.org/jdk/pull/24166/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24166&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8352588
  Stats: 37 lines in 4 files changed: 11 ins; 7 del; 19 mod
  Patch: https://git.openjdk.org/jdk/pull/24166.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24166/head:pull/24166

PR: https://git.openjdk.org/jdk/pull/24166


More information about the shenandoah-dev mailing list