RFR: Exponential thread-local GCLAB sizing
Aleksey Shipilev
shade at redhat.com
Tue Jul 17 15:03:08 UTC 2018
http://cr.openjdk.java.net/~shade/shenandoah/gclabs-sizing/webrev.01/
Three changes, two preparatory:
*) Trace and report total allocation latency and sizes
This updates the allocation tracing report to highlight the metrics we are after.
*) -XX:-UseTLAB should disable GCLABs too
This allows to turn any smart thing about GCLABs off, in case there are bugs.
*) Exponential thread-local GCLAB sizing
This replaces the global PLABStats tracking with per-thread sizing with exponential increments,
and quite aggressive decay. This helps to keep GCLAB sizes at bay for threads that are seldom
using the GCLABs, and provide large enough GCLABs for threads that need it.
We used to draw the line between mutator and GC threads in this, but it does not work all that
great. There are Java threads that evacuate quite a lot (e.g. ~1M with current 2K GCLABs), and
there are GC threads that evacuate almost nothing (e.g. all parallel threads that evac roots
during final mark, but not participate in concurrent evac). New mechanics automatically adopts
for either case. See the alloc tracing data from short SPECjbb below: we have less GCLAB allocs
in counts, less in footprint, and have them generally larger.
I think the same could be done with TLABs, but interface there is much, much messier.
Testing: tier3_gc_shenandoah, benchmarks
Thanks,
-Aleksey
=== Before:
Shared Shared GC TLAB GCLAB
Counts:
# 500 514 52010 8078
Latency summary:
sum, ms: 0 0 38 10
Sizes summary:
sum, M: 291 113 1007348 20101
Latency histogram (time in microseconds):
0 - 1: 120 508 21031 6649
1 - 2: 344 3 28752 689
2 - 4: 31 1 1952 90
4 - 8: 3 2 142 449
8 - 16: 1 0 60 38
16 - 32: 0 0 9 49
32 - 64: 1 0 35 87
64 - 128: 0 0 12 25
128 - 256: 0 0 17 2
Sizes histogram (size in bytes):
2048 - 4096: 21 3 1 6045
4096 - 8192: 145 60 0 216
8192 - 16384: 3 45 0 45
16384 - 32768: 1 51 4 481
32768 - 65536: 2 16 2548 16
65536 - 131072: 19 242 1728 242
131072 - 262144: 8 0 3166 0
262144 - 524288: 18 7 1962 23
524288 - 1048576: 34 18 1310 18
1048576 - 2097152: 246 64 1151 64
2097152 - 4194304: 2 6 1217 343
4194304 - 8388608: 0 2 1367 2
8388608 - 16777216: 0 0 7655 0
16777216 - 33554432: 1 0 9131 0
33554432 - 67108864: 0 0 20770 583
=== After
Shared Shared GC TLAB GCLAB
Counts:
# 492 713 50644 3770
Latency summary:
sum, ms: 0 0 38 3 <--- !!!
Sizes summary:
sum, M: 251 113 1023531 14344 <--- !!!
Latency histogram (time in microseconds):
0 - 1: 166 696 19597 2808
1 - 2: 306 14 28232 383
2 - 4: 19 1 2539 100
4 - 8: 1 1 125 458
8 - 16: 0 1 76 16
16 - 32: 0 0 10 0
32 - 64: 0 0 41 4
64 - 128: 0 0 14 0
128 - 256: 0 0 9 1
256 - 512: 0 0 1 0
Sizes histogram (size in bytes):
2048 - 4096: 25 0 1 1146 <--- !!!
4096 - 8192: 221 0 2 480
8192 - 16384: 0 97 2 483
16384 - 32768: 1 113 6 385
32768 - 65536: 3 28 445 338
65536 - 131072: 1 381 1969 210
131072 - 262144: 4 0 2766 95
262144 - 524288: 0 16 2268 38
524288 - 1048576: 9 26 1285 31
1048576 - 2097152: 225 37 1080 31
2097152 - 4194304: 2 15 1280 30
4194304 - 8388608: 0 0 1352 29
8388608 - 16777216: 0 0 7596 28
16777216 - 33554432: 1 0 7477 28
33554432 - 67108864: 0 0 23115 418
More information about the shenandoah-dev
mailing list