RFR: 8324649: Shenandoah: refactor implementation of free set [v5]
Kelvin Nilsen
kdnilsen at openjdk.org
Wed Jan 31 14:38:29 UTC 2024
> Several objectives:
> 1. Reduce humongous allocation failures by segregating regular regions from humongous regions
> 2. Do not retire regions just because an allocation failed within the region if the memory remaining within the region is large enough to represent a LAB
> 3. Track range of empty regions in addition to range of available regions in order to expedite humongous allocations
> 4. Treat collector reserves as available for Mutator allocations after evacuation completes
> 5. Improve encapsulation so as to enable an OldCollector reserve for future integration of generational Shenandoah
>
> On internal performance pipelines, this change shows:
>
> 1. some Increase in page faults and rss_max with certain workloads, presumably because of "segregation" of humongous from regular regions.
> 2. An increase in System CPU time on certain benchmarks: sunflow (+165%), scimark.sparse.large (+50%), lusearch (+43%). This system CPU time increase appears to correlate with increased page faults and/or rss.
> 3. An increase in trigger_failure for the hyperalloc_a2048_o4096 experiment (not yet understood)
> 4. 2-30x improvements on multiple metrics of the Extremem phased workload latencies (most likely resulting from fewer degenerated or full GCs)
>
> Shenandoah
> -------------------------------------------------------------------------------------------------------
> +166.55% scimark.sparse.large/minor_page_fault_count p=0.00000
> Control: 819938.875 (+/-5724.56 ) 40
> Test: 2185552.625 (+/-26378.64 ) 20
>
> +166.16% scimark.sparse.large/rss_max p=0.00000
> Control: 3285226.375 (+/-22812.93 ) 40
> Test: 8743881.500 (+/-104906.69 ) 20
>
> +164.78% sunflow/cpu_system p=0.00000
> Control: 1.280s (+/- 0.10s ) 40
> Test: 3.390s (+/- 0.13s ) 20
>
> +149.29% hyperalloc_a2048_o4096/trigger_failure p=0.00000
> Control: 3.259 (+/- 1.46 ) 33
> Test: 8.125 (+/- 2.05 ) 20
>
> +143.75% pmd/major_page_fault_count p=0.03622
> Control: 1.000 (+/- 0.00 ) 40
> Test: 2.438 (+/- 2.59 ) 20
>
> +80.22% lusearch/minor_page_fault_count p=0.00000
> Control: 2043930.938 (+/-4777.14 ) 40
> Test: 3683477.625 (+/-5650.29 ) 20
>
> +50.50% scimark.sparse.small/minor_page_fault_count p=0.00000
> Control: 697899.156 (+/-3457.82 ) 40
> Test: 1050363.812 (+/-175237.63 ) 20
>
> +49.97% scimark.sparse.small/rss_max p=0.00000
> Control: 277075...
Kelvin Nilsen has updated the pull request incrementally with 10 additional commits since the last revision:
- Change names of shrink_bounds_if_touched and expand_bounds_maybe
- Add comments to describe _leftmosts and _rightmosts and _empty ranges
- Change shrink_bounds_if_touched to shrink_range_if_boundary_modified
- Change clear_internal() to make_all_regions_unavailable()
- Remove mention of vestigial evac_expended in comment
- Fix comment in allocate_single()
- Clarify preconditions for allocate_single and allocate_contiguous
- More consistent naming of partitions vs sets
- Change ShenandoahSetsOfFreeRegions to ShenandoahRegionPartition
- Replace ShenandoahFreeMemoryType with ShenandoahFreeSetRegionType
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/17561/files
- new: https://git.openjdk.org/jdk/pull/17561/files/813ba6ef..7816f3a5
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=17561&range=04
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=17561&range=03-04
Stats: 334 lines in 3 files changed: 26 ins; 15 del; 293 mod
Patch: https://git.openjdk.org/jdk/pull/17561.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17561/head:pull/17561
PR: https://git.openjdk.org/jdk/pull/17561
More information about the shenandoah-dev
mailing list