RFR(S) 8205921: Optimizing best-of-2 work stealing queue selection
Kim Barrett
kim.barrett at oracle.com
Thu Jul 5 18:49:46 UTC 2018
> On Jul 5, 2018, at 12:08 PM, Zhengyu Gu <zgu at redhat.com> wrote:
>
> Hi Kim and Thomas,
>
> Thanks for reviewing.
>
> On 07/05/2018 03:54 AM, Thomas Schatzl wrote:
>> Hi,
>> On Thu, 2018-07-05 at 01:15 -0400, Kim Barrett wrote:
>>>> On Jun 27, 2018, at 2:39 PM, Zhengyu Gu <zgu at redhat.com> wrote:
>>> […]
>>> An alternative that might be better is, whenever a pop_global fails,
>>> reset the associated last_stolen id to invalid. This will revert to
>>> 2 random choices until we find (at least) one with something we can
>>> steal. Actually, it seems the referenced paper does something
>>> similar, and the webrev code doesn't match the referenced paper.
>> That may explain why my perf results are different to the paper that I
>> was planning to investigate :) Nice find.
>
> Sorry, my bad.
>
> […]
> Updated webrev:
>
> http://cr.openjdk.java.net/~zgu/8205921/webrev.01/index.html
src/hotspot/share/gc/shared/taskqueue.inline.hpp
255 if (sz2 > sz1) {
256 sel_k = k2;
257 suc = _queues[k2]->pop_global(t);
258 } else {
259 sel_k = k1;
260 suc = _queues[k1]->pop_global(t);
261 }
The paper avoids the steal attempt when both potential victims have a
size of zero, e.g. insert another clause:
} else if (sz1 == 0) {
sel_k = k1; // Might be needed to avoid uninitialized variable warnings?
suc = false;
} else {
...
There is a race condition between obtaining the size and checking it
here, but I don't think that's important. The point is to avoid an
expensive steal attempt when it is very likely to fail.
More information about the hotspot-gc-dev
mailing list