David Holmes - Sun Microsystems wrote:
Hi Mandy,

Mandy Chung said the following on 09/03/09 05:25:
This is related to 6857194: Add hotspot new perf counters to aid class loading performance measurement.

It's useful to add performance counters in the library code so that perf data from the JDK and VM can be collected and output in a unified way (written in the jvmstat shared memory buffer). I add a simple sun.misc.PerfCounter class to maintain the list of perf counters for the library to use. This fix only instruments the class loading and jar/zip to collect simple basic metrics. Additional perf counters will be added in the future.

Webrev:
    http://cr.openjdk.java.net/~mchung/6878481/webrev.00/

What is the performance overhead here? This seems like a lot of extra code if you don't want to read the counters. Is there not some way to only conditionally enable them?
I ran the server benchmarks and the Windows XP result shows negligible difference. I'm rerunning my solaris-i586 measurement (I got high diff in the standard deviation from my previous runs).

Windows XP SP 3 Intel Core 2 CPU @3.0Ghz, 1.96 GB RAM

==============================================================================
mchung.baseline.server:
Benchmark Samples Mean Stdev Geomean Weight
 reference_server         11     7591.49     38.91
   jetstream              11      125.58      1.24             0.10
   scimark                11      619.94      4.86             0.15
   specjbb2000            11    94540.14    493.47             0.15
   specjbb2005            11    43320.15    193.86             0.25
   specjvm98              11      577.06      1.74             0.15
   volano25               11    45661.45   1146.69             0.20
==============================================================================
mchung.perfcounters:
Benchmark Samples Mean Stdev %Diff P Significant reference_server 11 7588.94 48.89 -0.03 0.893 * jetstream 11 125.57 0.88 -0.00 0.990 * scimark 11 616.95 5.78 -0.48 0.203 * specjbb2000 11 94040.74 385.93 -0.53 0.016 * specjbb2005 11 43166.00 191.27 -0.36 0.075 * specjvm98 11 577.39 1.69 0.06 0.654 * volano25 11 46119.64 1259.95 1.00 0.383 *
==============================================================================
 * - Not Significant: A non-zero %Diff for the mean could be noise. If the
     %Diff is 0, an actual difference may still exist. In either case, more
samples would be needed to detect an actual difference in sample means.

To provide a way to enable I can't think of a better way other than adding the conditional check in the new calls I add.

We're sticking in a lot of System.nanoTime() calls and on some systems it isn't necessarily cheap eg Windows - see 6440250. Even if it is cheap, there are potentially a lot of them in classloading intensive situations.

Thanks for the CR#. FYI. The hotspot VM has a "sun.os.hrt.frequency" perf counter to store the QueryPerformanceFrequency. The system used for the benchmark runs has the value of 2,992,550,000.

I am going to find a system using ACPI PMT and run the benchmarks to measure its overhead after revising the fix to reduce the number of System.nanoTime() calls.

Thanks
Mandy
David

Reply via email to