changeset 7568:140d4d4ab3b9

added per-compiler compilation speed statistics for C1 and C2 (included in output produced by -XX:+CITime)
author Doug Simon <doug.simon@oracle.com>
date Wed, 30 Jan 2013 21:36:28 +0100
parents a8bc60aeacb8
children 7cae58134ff7
files src/share/vm/compiler/abstractCompiler.hpp src/share/vm/compiler/compileBroker.cpp src/share/vm/graal/graalCompiler.hpp
diffstat 3 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/compiler/abstractCompiler.hpp	Wed Jan 30 18:19:01 2013 +0100
+++ b/src/share/vm/compiler/abstractCompiler.hpp	Wed Jan 30 21:36:28 2013 +0100
@@ -29,6 +29,17 @@
 
 typedef void (*initializer)(void);
 
+#ifdef GRAAL
+class CompilerStatistics {
+ public:
+  elapsedTimer _t_osr_compilation;
+  elapsedTimer _t_standard_compilation;
+  int _sum_osr_bytes_compiled;
+  int _sum_standard_bytes_compiled;
+  CompilerStatistics() : _sum_osr_bytes_compiled(0), _sum_standard_bytes_compiled(0) {}
+};
+#endif
+
 class AbstractCompiler : public CHeapObj<mtCompiler> {
  private:
   bool _is_initialized; // Mark whether compiler object is initialized
@@ -49,6 +60,10 @@
  private:
   Type _type;
 
+#ifdef GRAAL
+  CompilerStatistics _stats;
+#endif
+
  public:
   AbstractCompiler(Type type) : _is_initialized(false), _type(type)    {}
 
@@ -83,6 +98,10 @@
   virtual void print_timers() {
     ShouldNotReachHere();
   }
+
+#ifdef GRAAL
+  CompilerStatistics* stats() { return &_stats; }
+#endif
 };
 
 #endif // SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
--- a/src/share/vm/compiler/compileBroker.cpp	Wed Jan 30 18:19:01 2013 +0100
+++ b/src/share/vm/compiler/compileBroker.cpp	Wed Jan 30 21:36:28 2013 +0100
@@ -2082,9 +2082,17 @@
       if (is_osr) {
         _t_osr_compilation.add(time);
         _sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
+#ifdef GRAAL
+        compiler(task->comp_level())->stats()->_t_osr_compilation.add(time);
+        compiler(task->comp_level())->stats()->_sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
+#endif
       } else {
         _t_standard_compilation.add(time);
         _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
+#ifdef GRAAL
+        compiler(task->comp_level())->stats()->_t_standard_compilation.add(time);
+        compiler(task->comp_level())->stats()->_sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
+#endif
       }
     }
 
@@ -2157,8 +2165,25 @@
   tty->print_cr("  Total compiled bytecodes : %6d bytes", tcb);
   tty->print_cr("    Standard compilation   : %6d bytes", CompileBroker::_sum_standard_bytes_compiled);
   tty->print_cr("    On stack replacement   : %6d bytes", CompileBroker::_sum_osr_bytes_compiled);
-  int bps = (int)(tcb / CompileBroker::_t_total_compilation.seconds());
+  double tcs = CompileBroker::_t_total_compilation.seconds();
+  int bps = tcs == 0.0 ? 0 : (int)(tcb / tcs);
   tty->print_cr("  Average compilation speed: %6d bytes/s", bps);
+#ifdef GRAAL
+  for (unsigned int i = 0; i < sizeof(_compilers) / sizeof(AbstractCompiler*); i++) {
+    AbstractCompiler* comp = _compilers[i];
+    if (comp != NULL) {
+      CompilerStatistics* stats = comp->stats();
+      int bytecodes = stats->_sum_osr_bytes_compiled + stats->_sum_standard_bytes_compiled;
+      if (bytecodes != 0) {
+        double seconds = stats->_t_osr_compilation.seconds() + stats->_t_standard_compilation.seconds();
+        int bps = seconds == 0.0 ? 0 : (int) (bytecodes / seconds);
+        tty->print_cr("  %7s compilation speed: %6d bytes/s {standard: %6.3f s, %6d bytes; osr: %6.3f s, %6d bytes}",
+            comp->name(), bps, stats->_t_standard_compilation.seconds(), stats->_sum_standard_bytes_compiled,
+            stats->_t_osr_compilation.seconds(), stats->_sum_osr_bytes_compiled);
+      }
+    }
+  }
+#endif
   tty->cr();
   tty->print_cr("  nmethod code size        : %6d bytes", CompileBroker::_sum_nmethod_code_size);
   tty->print_cr("  nmethod total size       : %6d bytes", CompileBroker::_sum_nmethod_size);
--- a/src/share/vm/graal/graalCompiler.hpp	Wed Jan 30 18:19:01 2013 +0100
+++ b/src/share/vm/graal/graalCompiler.hpp	Wed Jan 30 21:36:28 2013 +0100
@@ -46,7 +46,7 @@
   static GraalCompiler* instance() { return _instance; }
 
 
-  virtual const char* name() { return "G"; }
+  virtual const char* name() { return "Graal"; }
 
   virtual bool supports_native()                 { return true; }
   virtual bool supports_osr   ()                 { return true; }