RFR (S): 8152438: Threads may do significant work out of the non-shared overflow buffer
Thomas Schatzl
thomas.schatzl at oracle.com
Wed May 11 07:35:00 UTC 2016
Hi all,
can I have reviews for the following change that fixes signficiant
imbalance in work performed during GC?
We observed that threads in certain situations put a lot of references
into the thread-private overflow queue. Since this overflow queue is
thread-local, and other threads may not steal work from this queue, it
happens that sometimes the parallel copying phase is severely
serialized.
This is particularly problematic on large machines with many threads
but comparatively little work to do. In one situation on a real world
application, a 200% overall throughput improvement has been observed by
this change.
The CR mentions a micro-benchmark that exhibits the same problems.
The proposed solution is to, for a particular thread, if it processes
entries from the overflow queue, first try to just move the work item
to the shared queue where other threads can steal from. Only process
the item directly if the shared queue is full already.
CR:
https://bugs.openjdk.java.net/browse/JDK-8152438
Webrev:
http://cr.openjdk.java.net/~tschatzl/8152438/webrev/
Testing:
jprt, regular perf testing with no apparent pause time regressions,
some benchmarks
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list