Race and double-counting objects in task balancing code?
Roman Kennke
rkennke at redhat.com
Sat Jan 20 13:46:21 UTC 2018
Hi there,
I'm currently chasing a failure of TestGCThreadGroups.java with
Traversal GC. I'm getting objects double counted and liveness going off
the rails. It only seems to happen with ConcGCThreads > ParallelGCThreads.
I am wondering what prevents GC workers from stealing oops off of queues
that are currently transferred to 'regular' queues. ? Might we have a
race there? Is this transferral thread-safe wrt to stealing? Or am I
missing something? Please have a look at the last patch:
http://cr.openjdk.java.net/~rkennke/traversal/webrev.03/
around:
shenandoahTraversalGC.cpp mark_loop_work()
The code is almost 100% identical to what we do in
shenandoahConcurrentMark.cpp
I wonder if simply letting fewer GC threads steal from extra queues
might be the safer way to transfer work from extra queues?
Roman
More information about the shenandoah-dev
mailing list