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

Details
Type:
Enhancement
Submit Date:
2011-12-14
Status:
Closed
Updated Date:
2012-03-29
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

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
EVALUATION

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

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

http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/023652e49ac0
                                     
2012-01-07
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
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



Hardware and Software, Engineered to Work Together