RFR: Elastic TLABs for Shenandoah
Aleksey Shipilev
shade at redhat.com
Thu Jul 12 16:51:40 UTC 2018
http://cr.openjdk.java.net/~shade/shenandoah/elastic-tlabs/webrev.01/
Upstream has this nice new feature for G1:
https://bugs.openjdk.java.net/browse/JDK-8191471
This implements the handling on Shenandoah side, replacing our TLAB trimming hack.
It is actually three changesets in one:
a) Refactor allocation path to accept ShenandoahAllocRequest tuple
This pushes the needed data through the allocation path down to the actual TLAB alloc.
b) Elastic TLABs support for Shenandoah
This is a small change in FreeSet that adjusts TLAB allocations if current region cannot
satisfy the full TLAB size. It finally allows to ditch the TLAB trimming, and allow allocation
path to request region-sized TLAB without ill effects. Which alleviates the contention on
allocation lock, because we can now have 8x less calls to TLAB refill slowpath.
c) Pacer should account actual size for elastic TLABs
This is the leftover change to give pacer the claimed tokens back if trimmed TLAB was allocated.
Some caveats in tracking that we are adding tokens back to the same phase budget needed to be
resolved.
Testing: tier3_gc_shenadnoah, benchmarks
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list