Request for review (M): 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause

Bengt Rutisson bengt.rutisson at oracle.com
Thu Jun 21 11:54:15 UTC 2012


Hi again,

Updated webrev:
http://cr.openjdk.java.net/~brutisso/7178361/webrev.01/

I added some asserts as suggested by Vitaly and I did some white space 
changes to the TraceGen0Time logging. I hope this will not break any 
parsers. It is just intended to align the output up a bit better to be 
more readable.

Here is a webrev with just the change I made compared to my previous webrev:
http://cr.openjdk.java.net/~brutisso/7178361/webrev.00-01-diff/

Here is an example of what the TraceGen0Time output looks like after my 
change:

ALL PAUSES
    Total                    =     0.95 s (avg =    63.44 ms)
                                          (num =    15, std dev =    
47.84 ms, max =   150.30 ms)


    Young GC Pauses:       14
    Mixed GC Pauses:        1

EVACUATION PAUSES
    Evacuation Pauses        =     0.95 s (avg =    63.44 ms)
                                          (num =    15, std dev =    
47.84 ms, max =   150.30 ms)
       Root Region Scan Wait =     0.00 s (avg =     0.00 ms)
       Parallel Time         =     0.94 s (avg =    62.39 ms)
          Ext Root Scanning  =     0.11 s (avg =     7.22 ms)
          SATB Filtering     =     0.00 s (avg =     0.00 ms)
          Update RS          =     0.04 s (avg =     2.81 ms)
          Scan RS            =     0.03 s (avg =     2.07 ms)
          Object Copy        =     0.75 s (avg =    49.75 ms)
          Termination        =     0.00 s (avg =     0.02 ms)
          Parallel Other     =     0.01 s (avg =     0.51 ms)
       Clear CT              =     0.00 s (avg =     0.09 ms)
       Other                 =     0.01 s (avg =     0.90 ms)

MISC
    Stop World               =     0.01 s (avg =     0.48 ms)
                                          (num =    15, std dev =     
0.19 ms, max =     0.79 ms)
    Yields                   =     0.00 s (avg =     0.27 ms)
                                          (num =     2, std dev =     
0.05 ms, max =     0.32 ms)

Thanks,
Bengt


On 2012-06-20 15:15, Bengt Rutisson wrote:
>
> Hi everyone,
>
> Could I please have some reviews for this change:
> http://cr.openjdk.java.net/~brutisso/7178361/webrev.00/
>
> Background
> As part of the PrintGC and PrintGCDetails logging there is information 
> about how long the GC pause was. The timing of the pause was done 
> differently in G1 depending on whether PrintGC or PrintGCDetails were 
> enabled. It turns out that PrintGCDetails was just timing part of the 
> pause.
>
> This change will make both PrintGC and PrintGCDetails use the same 
> timing. To achieve this I had to refactor the code a bit. I moved all 
> the timing data out of G1CollectorPolicy into a new class called 
> G1GCPhaseTimes.
>
> My intention is that this change should not alter the format of the 
> output of PrintGC or PrintGCDetails. It should just correct the timing 
> data.
>
> However, I did find that we are collecting timing information about 
> card counts, under an #ifdef. I moved this to the finest log level 
> instead. This does not change the existing format for normal usage of 
> PrintGC or PrintGCDetails.
>
> Also, I had to update how the TraceGen0Time data is logged. I will 
> have another look at this, but my idea was to leave the format exactly 
> as it was. However, I think the format has decayed over time so maybe 
> I'll try to clean it up.
>
> I intend to follow this change up with a change to remove the special 
> treatment of the single threaded case for PrintGCDetails (tracked in 
> CR 7178363).
>
> Finally, this work revealed an issue with how the ergonomics in G1 
> measure the collection pauses. I did not want to change this behavior 
> now so I filed a separate RFE for that (7178365: G1: Ergonomics only 
> count part of the collection pause).
>
> Bengt




More information about the hotspot-gc-dev mailing list