RFR: 8337511: Implement JEP 404: Generational Shenandoah (Experimental) [v5]

Liang Mao lmao at openjdk.org
Wed Oct 30 02:12:22 UTC 2024


On Tue, 22 Oct 2024 18:25:53 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> William Kemper has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 492 commits:
>> 
>>  - Merge remote-tracking branch 'shenandoah/master' into great-genshen-pr-redux
>>  - Merge
>>  - 8342560: GenShen: Fix confusing method name
>>    
>>    Reviewed-by: ysr
>>  - 8342564: GenShen: Only reference young/old generation names in generational mode
>>    
>>    Reviewed-by: xpeng, ysr
>>  - Merge remote-tracking branch 'jdk/master' into great-genshen-pr-redux
>>  - Merge remote-tracking branch 'shenandoah/master' into great-genshen-pr-redux
>>  - 8342214: GenShen: Reduce code duplication in shFreeSet with iterator abstraction
>>    
>>    Reviewed-by: kdnilsen, ysr
>>  - 8342239: GenShen: Revert changes in adaptive heuristic to avoid overflow on 32 bit
>>    
>>    Reviewed-by: ysr
>>  - 8342278: GenShen: Move non-generational mode test out of generational test configuration
>>    
>>    Reviewed-by: ysr
>>  - 8342255: GenShen: Remove unnecessary enum initial values
>>    
>>    Reviewed-by: ysr
>>  - ... and 482 more: https://git.openjdk.org/jdk/compare/71583222...2a2aa408
>
> We disabled tiered compilation to force everything to compile through C2 to get more consistent results.

@earthling-amzn ,thanks for providing your options. Looks like disabling pacing would help the score. 

-XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-TieredCompilation -XX:-ShenandoahPacing -XX:+AlwaysPreTouch -XX:+DisableExplicitGC

I guess 4 cores may not be a target configuration for pauseless GC since generational pauseless GC requires at least 2 concurrent GC threads that already occupy half of CPU resource. I did a rough test on 8 cores and 16 cores according to your options. GenShen doesn't have obvious advantages with 8 cores and Shenandoah seems to outperform genshen significantly with 16 cores. Would you please help verify the result in your environment?

8 cores -Xmx8g -Xms8g:

GenShen:
RUN RESULT: hbIR (max attempted) = 9640, hbIR (settled) = 8050, max-jOPS = 8098, critical-jOPS = 6132
RUN RESULT: hbIR (max attempted) = 8944, hbIR (settled) = 8574, max-jOPS = 7781, critical-jOPS = 6130

Shenandoah:
RUN RESULT: hbIR (max attempted) = 9640, hbIR (settled) = 8050, max-jOPS = 7616, critical-jOPS = 6194
RUN RESULT: hbIR (max attempted) = 9640, hbIR (settled) = 8050, max-jOPS = 7712, critical-jOPS = 6262

16 cores -Xmx20g -Xms20g:

GenShen:
RUN RESULT: hbIR (max attempted) = 19881, hbIR (settled) = 16584, max-jOPS = 17694, critical-jOPS = 13274
RUN RESULT: hbIR (max attempted) = 19881, hbIR (settled) = 18724, max-jOPS = 17694, critical-jOPS = 13445
Shenandoah:
RUN RESULT: hbIR (max attempted) = 23838, hbIR (settled) = 20446, max-jOPS = 18594, critical-jOPS = 15441
RUN RESULT: hbIR (max attempted) = 20138, hbIR (settled) = 19989, max-jOPS = 18728, critical-jOPS = 14967

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

PR Comment: https://git.openjdk.org/jdk/pull/21273#issuecomment-2445672323


More information about the shenandoah-dev mailing list