RFR: 8371381: [Shenandoah] Setting ergo flags should use FLAG_SET_ERGO
Rui Li
duke at openjdk.org
Tue Nov 11 23:44:02 UTC 2025
On Tue, 11 Nov 2025 23:06:25 GMT, William Kemper <wkemper at openjdk.org> wrote:
>> Setting ergo flags using `FLAG_SET_ERGO`, instead of `FLAG_SET_DEFAULT`, so we can have the right origin info.
>>
>> Had to expand `ShenandoahEvacReserve` range from `range(1,100)` to `range(0,100)` because when we use shenandoah passive mode and degen is also turned off (`-XX:ShenandoahGCMode=passive -XX:-ShenandoahDegeneratedGC`), we set the ShenandoahEvacReserve to 0: https://github.com/openjdk/jdk/blob/c6a8027b94bbcbde5f7dcabd0bff48b93bbb5a7f/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp#L41 The issue is surfaced now because `FLAG_SET_DEFAULT` doesn't check the range but `FLAG_SET_ERGO` does.
>>
>> Testing: jtreg gc. GHA pending.
>
> src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp line 356:
>
>> 354: "regions) is also bounded by this parameter. In percents of " \
>> 355: "total (young-generation) heap size.") \
>> 356: range(0,100) \
>
> If we allow this, somebody _will_ file a bug because `-XX:ShenandoahEvacReserve=0` will cause other modes to crash with divide by zero error.
OK, I'll keep the range as it is `(1,100)`, but instead of setting the default with ergo at here: https://github.com/openjdk/jdk/blob/c6a8027b94bbcbde5f7dcabd0bff48b93bbb5a7f/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp#L40-L42 I'll just use `FLAG_SET_DEFAULT` to bypass the check? We wouldn't have the data source origin in passive mode which is only meant to be diagnostic, but that's better than causing problems in the regular mode.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28242#discussion_r2516180561
More information about the hotspot-gc-dev
mailing list