On Fri, 26 May 2023 20:46:29 GMT, Kelvin Nilsen <kdnil...@openjdk.org> wrote:

> OpenJDK Colleagues:
> 
> Please review this proposed integration of Generational mode for Shenandoah 
> GC under https://bugs.openjdk.org/browse/JDK-8307314.
> 
> Generational mode of Shenandoah is enabled by adding 
> `-XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=generational` to a 
> command line that already specifies ` -XX:+UseShenandoahGC`.  The 
> implementation automatically adjusts the sizes of old generation and young 
> generation to efficiently utilize the entire heap capacity.  Generational 
> mode of Shenandoah resembles G1 in the following regards:
> 
> 1. Old-generation marking runs concurrently during the time that multiple 
> young generation collections run to completion.
> 2. After old-generation marking completes, we perform a sequence of mixed 
> collections.  Each mixed collection combines collection of young generation 
> with evacuation of a portion of the old-generation regions identified for 
> collection based on old-generation marking information.
> 3. Unlike G1, young-generation collections and evacuations are entirely 
> concurrent, as with single-generation Shenandoah.
> 4. As with single-generation Shenandoah, there is no explicit notion of eden 
> and survivor space within the young generation.  In practice, regions that 
> were most recently allocated tend to have large amounts of garbage and these 
> regions tend to be collected with very little effort.  Young-generation 
> objects that survive garbage collection tend to accumulate in regions that 
> hold survivor objects.  These regions tend to have smaller amounts of 
> garbage, and are less likely to be collected.  If they survive a sufficient 
> number of young-generation collections, the “survivor” regions are promoted 
> into the old generation.
> 
> We expect to refine heuristics as we gain experience with more production 
> workloads.  In the future, we plan to remove the “experimental” qualifier 
> from generational mode, at which time we expect that generational mode will 
> become the default mode for Shenandoah.
> 
> **Testing**: We continuously run jtreg tiers 1-4 + hotspot_gc_shenandoah, 
> gcstress, jck compiler, jck runtime, Dacapo, SpecJBB, SpecVM, Extremem, 
> HyperAlloc, and multiple AWS production workload simulators. We test on Linux 
> x64 and aarch64, Alpine x64 and aarch64, macOS x64 and aarch64, and Windows 
> x64.

Hi Kevin,

First off, kudos. This is impressive work by you and your Amazon colleagues!

I have one particular worry, though, how to verify that this experimental 
feature does not cause regressions with traditional Shenandoah? 

The PR is massive (+18kloc) and targeted for JDK 21. Rampdown P1 is in a week. 
By all accounts, JDK 21 will be a massive release, so we will all have our 
hands full, fixing stuff and plugging holes.

Oracle did put the sources for the Generational ZGC beside the old sources, 
thereby somewhat guaranteeing traditional ZGC does not regress. Could we follow 
the same cautionary process here?

I am not a Shenandoah expert, but to me the new feature seems intertwined with 
normal code paths. It's difficult to ensure, via review, that traditional 
Shenandoah will not suffer regressions. So close to rampdown this is a bit 
scary.

The JEP mentions several "Risks and Assumptions", but it is unclear whether 
these risks also affect traditional Shenandoah.

Cheers, Thomas

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

PR Comment: https://git.openjdk.org/jdk/pull/14185#issuecomment-1572008074

Reply via email to