RFR: 8288966: Better handle very spiky promotion in G1 [v3]

Thomas Schatzl tschatzl at openjdk.org
Mon Aug 8 13:15:03 UTC 2022


> Hi all,
> 
>   please review this change that implements "boosting" the PLAB sizes after every "significant" amount of refills.
> 
> This removes pause time spikes during garbage collection if the PLAB sizing algorithm has not picked up a good value yet (at startup) or the load is very spiky (e.g. SPECjbb2015).
> 
> This works by defining a "tolerated amount of refills", after every time this threshold is met we double the PLAB. The reason for not doing this doubling every time is waste - on tight(er) heaps this can waste a lot of memory for very small allocations, causing more GCs and effective slowdowns.
> 
> So this threshold is based on the number of expected refills (per thread); allowing a little more than these expected refills (and discounting the initial PLAB refill).
> This boosting is also only active with `ResizePLAB` - it's on by default anyway with G1.
> 
> The CR contains a graph showing massive pause time spikes on SPECjbb2015 that are fixed by this, as otherwise during these spikes there would be 500k+ PLAB refills that in particular seem to be very harmful on aarch64 (the machines seem to be very problematic wrt to contention on a single atomic counter with lots of threads).
> 
> Overall performance (of SPECjbb2015, on aarch64) is slightly better with that change, and in general also improves startup pauses. x64 isn't really affected either way.
> 
> I'm aware that now `G1PLABAllocator` has lots of members that are arrays of the same size (the number of generations). I want to fix that to an array of structs in a separate change.
> 
> Thanks,
>   Thomas
> 
> Testing: tier1-5

Thomas Schatzl has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 12 commits:

 - Merge branch 'master' into 8288966-plab-boost
 - iwalulya review
 - Fix whitespace
 - Only boost with ResizePLAB
 - Refactoring, fix boundless boosting
 - some refinement
 - Some cleanup
 - More removal of conditional code
 - Optimize
 - some cleanup
 - ... and 2 more: https://git.openjdk.org/jdk/compare/7676be8a...ce2701cb

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

Changes: https://git.openjdk.org/jdk/pull/9726/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9726&range=02
  Stats: 90 lines in 8 files changed: 72 ins; 0 del; 18 mod
  Patch: https://git.openjdk.org/jdk/pull/9726.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9726/head:pull/9726

PR: https://git.openjdk.org/jdk/pull/9726



More information about the hotspot-gc-dev mailing list