RFR: 8288966: Better handle very spiky promotion in G1

Thomas Schatzl tschatzl at openjdk.org
Wed Aug 3 13:55:08 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

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

Commit messages:
 - Fix whitespace
 - Only boost with ResizePLAB
 - Refactoring, fix boundless boosting
 - some refinement
 - Some cleanup
 - More removal of conditional code
 - Optimize
 - some cleanup
 - Improved heuristics
 - actual

Changes: https://git.openjdk.org/jdk/pull/9726/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9726&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8288966
  Stats: 86 lines in 10 files changed: 66 ins; 0 del; 20 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