RFR(S): 7096030: G1: PrintGCDetails enhancements
John Cuthbertson
john.cuthbertson at oracle.com
Fri Oct 14 17:17:43 UTC 2011
Hi Everyone,
I have a new webrev for this change based upon some initial feedback,
which can be found here: http://cr.openjdk.java.net/~johnc/7096030/webrev.1/
Changes in this webrev include:
* Coalescing the GC Worker Other time and Parallel Other Time into a
single "GC Worker Other" time.
* Modifying some of the tags in the PrintGCDetails output
* The order of the phases in the PrintGCDetails when
ParallelGCThreads==0 now matches that of the parallel case.
New output:
151.550: [GC pause (young), 0.57693560 secs]
[SATB Drain Time: 0.0 ms]
[Parallel Time: 553.7 ms]
[GC Worker Start (ms): 151550.7 151550.7 151550.7 151551.3
Avg: 151550.9, Min: 151550.7, Max: 151551.3, Diff: 0.6]
[Ext Root Scanning (ms): 2.8 2.8 3.0 2.6
Avg: 2.8, Min: 2.6, Max: 3.0, Diff: 0.4]
[Mark Stack Scanning (ms): 0.0 0.0 0.0 0.0
Avg: 0.0, Min: 0.0, Max: 0.0, Diff: 0.0]
[Update RS (ms): 5.1 5.6 3.9 5.3
Avg: 5.0, Min: 3.9, Max: 5.6, Diff: 1.7]
[Processed Buffers : 3 3 6 5
Sum: 17, Avg: 4, Min: 3, Max: 6, Diff: 3]
[Scan RS (ms): 14.0 13.7 14.8 13.3
Avg: 13.9, Min: 13.3, Max: 14.8, Diff: 1.5]
[Object Copy (ms): 531.4 531.2 531.5 531.5
Avg: 531.4, Min: 531.2, Max: 531.5, Diff: 0.3]
[Termination (ms): 0.0 0.0 0.0 0.0
Avg: 0.0, Min: 0.0, Max: 0.0, Diff: 0.0]
[Termination Attempts : 1 1 1 1
Sum: 4, Avg: 1, Min: 1, Max: 1, Diff: 0]
[GC Worker End (ms): 152104.1 152104.1 152104.0 152104.0
Avg: 152104.1, Min: 152104.0, Max: 152104.1, Diff: 0.1]
[GC Worker (ms): 553.4 553.4 553.3 552.7
Avg: 553.2, Min: 552.7, Max: 553.4, Diff: 0.7]
[GC Worker Other (ms): 0.4 0.4 0.5 1.0
Avg: 0.6, Min: 0.4, Max: 1.0, Diff: 0.6]
[Clear CT: 1.4 ms]
[Other: 21.8 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 2.8 ms]
[Ref Enq: 0.0 ms]
[Eden: 1230M(1230M)->0B(1230M) Survivors: 134M->134M Heap:
3312M(4096M)->2216M(4096M)]
[Times: user=0.77 sys=0.61, real=0.58 secs]
Thanks,
JohnC
On 10/12/11 09:55, John Cuthbertson wrote:
> Hi Everyone,
>
> Can I have a a couple of volunteers review these changes? The webrev
> can be found at: http://cr.openjdk.java.net/~johnc/7096030/webrev.0/
>
> Description:
> While looking at the PrintGCDetails output from running some large
> applications, it was noticed that there seemed to be a large amount of
> time listed as "Parallel Other Time" which couldn't be accounted for.
> To account for this I have replaced the single overall "Parallel Other
> Time" with two times that is reported for each GC worker thread:
>
> GC Worker Other Times
> This is the unaccounted time for each GC worker between its start and
> end times. It is calculated as "GC Worker Time" minus the sum of the
> times for that worker given for "Ext. Root Scanning", "Mark Stack
> Scanning", "RS Update", "RS Scanning", "Object Copying", and
> "Termination".
>
> Parallel Other Times
> This is the difference between the overall elapsed time for the
> parallel phase and the elapsed time for each GC worker. This includes
> the overhead of starting and stopping the worker, as well as executing
> the destructors of any objects created in the G1ParTask::work() method.
>
> Both these times (for each GC worker) should be close to 0.0.
>
> I was thinking of coalescing these into a single time but decided to
> leave them separate as they tell us slightly different things.
>
> I also changed the order in the PrintGCDetails output to reflect the
> order of the different phases within the parallel code. An example of
> the new format is:
>
> 112.115: [GC pause (young) (initial-mark), 0.73699803 secs]
> [Parallel Time: 729.9 ms]
> [GC Worker Start Time (ms): 112115.5 112115.5 112115.6 112115.6
> Avg: 112115.5, Min: 112115.5, Max: 112115.6, Diff: 0.1]
> [Ext Root Scanning (ms): 2.7 2.7 3.2 3.1
> Avg: 2.9, Min: 2.7, Max: 3.2, Diff: 0.5]
> [Mark Stack Scanning (ms): 0.0 0.0 0.0 0.0
> Avg: 0.0, Min: 0.0, Max: 0.0, Diff: 0.0]
> [Update RS (ms): 7.3 7.5 5.1 5.0
> Avg: 6.2, Min: 5.0, Max: 7.5, Diff: 2.5]
> [Processed Buffers : 4 6 3 4
> Sum: 17, Avg: 4, Min: 3, Max: 6, Diff: 3]
> [Scan RS (ms): 14.0 13.6 15.0 15.8
> Avg: 14.6, Min: 13.6, Max: 15.8, Diff: 2.2]
> [Object Copy (ms): 705.6 705.6 706.1 705.5
> Avg: 705.7, Min: 705.5, Max: 706.1, Diff: 0.6]
> [Termination (ms): 0.0 0.0 0.0 0.0
> Avg: 0.0, Min: 0.0, Max: 0.0, Diff: 0.0]
> [Termination Attempts : 1 1 1 1
> Sum: 4, Avg: 1, Min: 1, Max: 1, Diff: 0]
> [GC Worker End Time (ms): 112845.0 112845.1 112845.1 112845.1
> Avg: 112845.1, Min: 112845.0, Max: 112845.1, Diff: 0.1]
> [GC Worker Times (ms): 729.5 729.5 729.5 729.5
> Avg: 729.5, Min: 729.5, Max: 729.5, Diff: 0.1]
> [GC Worker Other Times (ms): 0.0 0.1 0.1 0.1
> Avg: 0.1, Min: 0.0, Max: 0.1, Diff: 0.1]
> [Parallel Other Times (ms): 0.4 0.4 0.4 0.4
> Avg: 0.4, Min: 0.4, Max: 0.4, Diff: 0.1]
> [Clear CT: 1.1 ms]
> [Other: 6.0 ms]
> [Choose CSet: 0.0 ms]
> [Ref Proc: 0.2 ms]
> [Ref Enq: 0.0 ms]
> [Eden: 1230M(1230M)->0B(1230M) Survivors: 134M->134M Heap:
> 3753M(4096M)->2657M(4096M)]
>
> Additionally, during RSet scanning, I now stack allocate the
> DirtyCardToOopClosure objects that were being allocated in the GC
> worker's ResourceArea. Executing the destructor of a ResourceMark and
> freeing the spaced allocated in the worker threads' ResourceArea
> objects was the main contributor to the large "Parallel Other Time".
>
> Testing: OpenDS on linux and Solaris with 4G, 16G, and 26G heaps; the
> GC test suite, and jprt.
>
> Thanks,
>
> JohnC
More information about the hotspot-gc-dev
mailing list