RFR: 8328307: GenShen: Re-enable old-has-grown trigger for old-generation GC

William Kemper wkemper at openjdk.org
Mon Mar 18 17:16:47 UTC 2024


On Mon, 18 Mar 2024 13:32:16 GMT, Kelvin Nilsen <kdnilsen at openjdk.org> wrote:

> Enable old-gen growth triggers, which were inadvertantly disabled.  This passes the internal regression pipeline tests.
> 
> As would be expected, we see an increase in mixed-evacuation triggers.  We also see significant improvement on certain extremem workloads due to improved clearing of old-gen.
> 
> 
>    Control: shenandoah-x86-template
> Experiment: enable-old-growth-triggers-gh-x86
> 
>                           Most impacted benchmarks |                              Most impacted metrics
> -------------------------------------------------------------------------------------------------------
>                            Genshen/extremem-phased |                             trigger_expedite_mixed
>                 Genshen/specjbb2015_weak_ref_patch |                                    trigger_failure
>                                Genshen/specjbb2015 |                               context_switch_count
>                     Genshen/hyperalloc_a3072_o4096 |                                     sla_25000_jops
>                             Shenandoah/specjbb2015 |                                      trigger_learn
> 
> 
>                                 Only in experiment |                                    Only in control
> -------------------------------------------------------------------------------------------------------
>      hyperalloc_a2048_o2048/trigger_expedite_mixed |                   compress/concurrent_thread_roots
>      hyperalloc_a2048_o4096/trigger_expedite_mixed |                        crypto.rsa/ctr_thread_roots
>      hyperalloc_a3072_o2048/trigger_expedite_mixed |                               crypto.rsa/ctr_total
>      hyperalloc_a3072_o4096/trigger_expedite_mixed |               extremem-large-31g/trigger_expansion
>               extremem-large-31g/trigger_overgrown |                  extremem-phased/trigger_expansion
> 
> Genshen
> -------------------------------------------------------------------------------------------------------
> +685.00% specjbb2015_weak_ref_patch/trigger_expedite_mixed p=0.00002
>   Control:      2.500   (+/-  0.68  )         30
>   Test:        19.625   (+/-  4.79  )         10
> 
> +561.90% specjbb2015/trigger_expedite_mixed p=0.00001
>   Control:      2.625   (+/-  0.92  )         30
>   Test:        17.375   (+/-  3.89  )         10
> 
> +225.42% extremem-phased/trigger_expedite_mixed p=0.00000
>   Control:      9.833   (+/-  3.48  )         30
>   Test:        32.000   (+/-  2.58  )         10
> 
> +63.84% hyperalloc_a3072_o4096/evacuation p=0.02662
>   Control:     37....

Changes requested by wkemper (Committer).

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp line 3194:

> 3192:   _free_set->rebuild(young_cset_regions, old_cset_regions);
> 3193: 
> 3194:   if (mode()->is_generational()) {

In the spirit of moving generational mode things out of `ShenandoahHeap`, may I suggest factoring out two methods here for `ShenandoahOldGeneration`:
* `trigger_collection_if_fragmented`
* `trigger_collection_if_overgrown`

Or perhaps, make `ShenandoahHeap::rebuild_free_set` virtual and put all the generational code into an override in `ShenandoahGenerationalHeap`?

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

PR Review: https://git.openjdk.org/shenandoah/pull/409#pullrequestreview-1943714568
PR Review Comment: https://git.openjdk.org/shenandoah/pull/409#discussion_r1528955590


More information about the shenandoah-dev mailing list