United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7121496 G1: do the per-region evacuation failure handling work in parallel
JDK-7121496 : G1: do the per-region evacuation failure handling work in parallel

Details
Type:
Enhancement
Submit Date:
2011-12-14
Status:
Closed
Updated Date:
2013-10-04
Project Name:
JDK
Resolved Date:
2012-03-29
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs23
Fixed Versions:
hs23 (b10)

Related Reports
Backport:
Backport:

Sub Tasks

Description
When there's an evacuation failure during a GC we have to scan all the regions in the CSet in order to remove the self-forwarding references of any object we failed to move and also update according a few other data structures (marking bitmap(s), BOT, etc.).

Currently, we do this serially, one region at a time. However, the per-region work is independent of the rest. So, it should be trivial to parallelize.

                                    

Comments
SUGGESTED FIX

Wrap the kernel of the loop (that iterates over the regions in the colection set) into the doHeapRegion method of a HeapRegion closure. The doHeapRegion method will need to claim regions and apply the loop-kernal code to a successfully claimed region.

Wrap the HeapRegion closure into an AbstractGangTask whose work method will start iterating over the collection set from a given starting region (based upon worker ID). Each worker will also need its own DirtyCardQueue (for deferred RSet updates).
                                     
2011-12-23
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/023652e49ac0
                                     
2012-01-07
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/023652e49ac0
                                     
2012-01-18
EVALUATION

http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/023652e49ac0
                                     
2012-03-22
EVALUATION

Wrap the kernel of the loop (that iterates over the regions in the colection set) into the doHeapRegion method of a HeapRegion closure. The doHeapRegion method will need to claim regions and apply the loop-kernal code to a successfully claimed region.

Wrap the HeapRegion closure into an AbstractGangTask whose work method will start iterating over the collection set from a given starting region (based upon worker ID). Each worker will also need its own DirtyCardQueue (for deferred RSet updates).
                                     
2011-12-23



Hardware and Software, Engineered to Work Together