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