RFR: Broaden plab region search [v2]

Kelvin Nilsen kdnilsen at openjdk.org
Thu Jan 12 21:39:36 UTC 2023


> Recent testing revealed that old-gen heap regions were being ignored in the search to satisfy new PLAB allocation requests.  It was discovered that many of these regions are found within ranges of the ShenandoahFreeSet that are not considered to be "is_collector_free()".
> 
> This is a first step in a two-step change.  In this patch, we broaden the search for old-gen heap regions that have available memory to include regions that are not is_collector_free.  In a second step of this improvement, we intend to restructure the implementation of the ShenandoahFreeSet to better distinguish ranges of regions that hold young-gen survivors, which ranges hold old-gen, and which ranges are intended to serve as mutator allocations.
> 
> On an Extremem workload that allocates roughly 626 M/s in a total heap size of 49G with an old-gen usage of 18.7G, we saw significant improvements compared to mainline generational Shenandoah implementation:
> 
> 1. Concurrent GC passes decreased from 606 to 493 (19% improvement)
> 2. Degenerated GC passes decreased from 17 to 3 (82% improvement)
> 3. Full GCs decreased from 15 to 3 (80% improvement)
> 4. P50 latency for Customer Preparation Processing (CPP) improved from 1798 us to 1735 us (3.5%)
> 5. P100 latency for CPP improved from 25_636_285 us to 9_148_580 us (64% improvement)
> 
> Across a broad assortment of performance related CI tests, we also benefits on x86:
> 
> -74.24% extremem-phased/do_nothing_p99 p=0.00061
>   Control:      2.318s  (+/-941.25ms)         80
>   Test:         1.330s  (+/-  1.01s )         15
> 
> -15.70% extremem-phased/context_switch_count p=0.02032
>   Control:  28188.234   (+/-5868.23  )         80
>   Test:     24362.538   (+/-4260.19  )         15
> 
> -6.26% extremem-phased/do_nothing_p50 p=0.00246
>   Control:    603.203us (+/- 38.32us)         80
>   Test:       567.692us (+/- 50.34us)         15
> 
> And on aarch64:
> 
> +22.92% specjbb2015/sla_10000_jops p=0.01104
>   Control:   2607.153   (+/-799.74  )         90
>   Test:      3204.615   (+/-592.15  )         15
> 
> -5.85% extremem-phased/do_nothing_p50 p=0.00675
>   Control:    608.153us (+/- 44.52us)         90
>   Test:       574.538us (+/- 47.49us)         15

Kelvin Nilsen has updated the pull request incrementally with one additional commit since the last revision:

  Unify GC heap status logging

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

Changes:
  - all: https://git.openjdk.org/shenandoah/pull/198/files
  - new: https://git.openjdk.org/shenandoah/pull/198/files/8a46a669..ac3e14c0

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=shenandoah&pr=198&range=01
 - incr: https://webrevs.openjdk.org/?repo=shenandoah&pr=198&range=00-01

  Stats: 75 lines in 9 files changed: 28 ins; 37 del; 10 mod
  Patch: https://git.openjdk.org/shenandoah/pull/198.diff
  Fetch: git fetch https://git.openjdk.org/shenandoah pull/198/head:pull/198

PR: https://git.openjdk.org/shenandoah/pull/198


More information about the shenandoah-dev mailing list