[Bug] Load imbalance of Tasks among GCTaskThreads during the Young GC

Tony S suokunstar at gmail.com
Sat Nov 19 04:54:08 UTC 2016


Hi,

[Description]
src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp

PSPromotionManager enqueues various tasks (ThreadRootsTask / StealTask
/ ScavengeRootsTask / OldToYoungRootsTask) into GCTaskQueue.
GCTaskThread asked GCTaskManager to call get_task() to obtain tasks
from the GCTaskQueue. However, I found the tasks are not distributed
evenly among the GCTaskThreads. Some GCTaskThreads get more tasks than
others. Here are my trace log:


[Tracing Log]

  OldToYoungRootsTask   GCTaskThread ID:4
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:10
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:10
  OldToYoungRootsTask   GCTaskThread ID:3
  OldToYoungRootsTask   GCTaskThread ID:10
  OldToYoungRootsTask   GCTaskThread ID:4
  OldToYoungRootsTask   GCTaskThread ID:10
  ScavengeRootsTask      GCTaskThread ID:4
  ScavengeRootsTask      GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:10
  OldToYoungRootsTask   GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:10
  ThreadRootsTask           GCTaskThread ID:3
  ThreadRootsTask           GCTaskThread ID:3
  ScavengeRootsTask      GCTaskThread ID:3
  ScavengeRootsTask       GCTaskThread ID:3
  ScavengeRootsTask       GCTaskThread ID:3
  ThreadRootsTask            GCTaskThread ID:10
  ScavengeRootsTask        GCTaskThread ID:3
  ScavengeRootsTask        GCTaskThread ID:3
  ScavengeRootsTask        GCTaskThread ID:3
  ThreadRootsTask            GCTaskThread ID:4
  ScavengeRootsTask        GCTaskThread ID:10
  StealTask                         GCTaskThread ID:6
  StealTask                         GCTaskThread ID:9
  StealTask                         GCTaskThread ID:3
  StealTask                         GCTaskThread ID:14
  StealTask                         GCTaskThread ID:7
  StealTask                         GCTaskThread ID:5
  StealTask                         GCTaskThread ID:8
  StealTask                         GCTaskThread ID:0
  StealTask                         GCTaskThread ID:12
  StealTask                         GCTaskThread ID:13
  StealTask                         GCTaskThread ID:2
  StealTask                         GCTaskThread ID:4
  StealTask                         GCTaskThread ID:11
  StealTask                         GCTaskThread ID:1
  StealTask                         GCTaskThread ID:10


I use dacapo benchmark, running lusearch on JDK 1.8 on ubuntu 16.10. I
have totally 15 GCTaskThreads on the above test. We can see that only
StealTasks are evenly executed on different GCTaskThread. The other
tasks are executed on
few GCTaskThreads, not evenly distributed.

When I increase the number of mutator threads and thus have more tasks
(ThreadRootsTask / StealTask / ScavengeRootsTask /
OldToYoungRootsTask), however, those tasks are still not distributed
evenly among the GCTaskThreads, which causes the load imbalance and
thus prolongs the Young GC time.

Did anyone know the reason?
Thanks.

-- 

**********************************
> Tony
> Computer Science, University of Texas at Arlington
**********************************



More information about the hotspot-gc-dev mailing list