src/share/vm/services/runtimeService.cpp

Fri, 25 Jan 2013 10:04:08 -0500

author
zgu
date
Fri, 25 Jan 2013 10:04:08 -0500
changeset 4492
8b46b0196eb0
parent 4165
fb19af007ffc
child 4542
db9981fd3124
permissions
-rw-r--r--

8000692: Remove old KERNEL code
Summary: Removed depreciated kernel VM source code from hotspot VM
Reviewed-by: dholmes, acorn

     1 /*
     2  * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #include "precompiled.hpp"
    26 #include "classfile/classLoader.hpp"
    27 #include "services/attachListener.hpp"
    28 #include "services/management.hpp"
    29 #include "services/runtimeService.hpp"
    30 #include "utilities/dtrace.hpp"
    31 #include "utilities/exceptions.hpp"
    33 #ifndef USDT2
    34 HS_DTRACE_PROBE_DECL(hs_private, safepoint__begin);
    35 HS_DTRACE_PROBE_DECL(hs_private, safepoint__end);
    36 #endif /* !USDT2 */
    38 #if INCLUDE_MANAGEMENT
    39 TimeStamp RuntimeService::_app_timer;
    40 TimeStamp RuntimeService::_safepoint_timer;
    41 PerfCounter*  RuntimeService::_sync_time_ticks = NULL;
    42 PerfCounter*  RuntimeService::_total_safepoints = NULL;
    43 PerfCounter*  RuntimeService::_safepoint_time_ticks = NULL;
    44 PerfCounter*  RuntimeService::_application_time_ticks = NULL;
    45 PerfCounter*  RuntimeService::_thread_interrupt_signaled_count = NULL;
    46 PerfCounter*  RuntimeService::_interrupted_before_count = NULL;
    47 PerfCounter*  RuntimeService::_interrupted_during_count = NULL;
    49 void RuntimeService::init() {
    50   // Make sure the VM version is initialized
    51   Abstract_VM_Version::initialize();
    53   if (UsePerfData) {
    54     EXCEPTION_MARK;
    56     _sync_time_ticks =
    57               PerfDataManager::create_counter(SUN_RT, "safepointSyncTime",
    58                                               PerfData::U_Ticks, CHECK);
    60     _total_safepoints =
    61               PerfDataManager::create_counter(SUN_RT, "safepoints",
    62                                               PerfData::U_Events, CHECK);
    64     _safepoint_time_ticks =
    65               PerfDataManager::create_counter(SUN_RT, "safepointTime",
    66                                               PerfData::U_Ticks, CHECK);
    68     _application_time_ticks =
    69               PerfDataManager::create_counter(SUN_RT, "applicationTime",
    70                                               PerfData::U_Ticks, CHECK);
    73     // create performance counters for jvm_version and its capabilities
    74     PerfDataManager::create_constant(SUN_RT, "jvmVersion", PerfData::U_None,
    75                                      (jlong) Abstract_VM_Version::jvm_version(), CHECK);
    77     // I/O interruption related counters
    79     // thread signaling via os::interrupt()
    81     _thread_interrupt_signaled_count =
    82                 PerfDataManager::create_counter(SUN_RT,
    83                  "threadInterruptSignaled", PerfData::U_Events, CHECK);
    85     // OS_INTRPT via "check before" in _INTERRUPTIBLE
    87     _interrupted_before_count =
    88                 PerfDataManager::create_counter(SUN_RT, "interruptedBeforeIO",
    89                                                 PerfData::U_Events, CHECK);
    91     // OS_INTRPT via "check during" in _INTERRUPTIBLE
    93     _interrupted_during_count =
    94                 PerfDataManager::create_counter(SUN_RT, "interruptedDuringIO",
    95                                                 PerfData::U_Events, CHECK);
    97     // The capabilities counter is a binary representation of the VM capabilities in string.
    98     // This string respresentation simplifies the implementation of the client side
    99     // to parse the value.
   100     char capabilities[65];
   101     size_t len = sizeof(capabilities);
   102     memset((void*) capabilities, '0', len);
   103     capabilities[len-1] = '\0';
   104     capabilities[0] = AttachListener::is_attach_supported() ? '1' : '0';
   105 #if INCLUDE_SERVICES
   106     capabilities[1] = '1';
   107 #endif // INCLUDE_SERVICES
   108     PerfDataManager::create_string_constant(SUN_RT, "jvmCapabilities",
   109                                             capabilities, CHECK);
   110   }
   111 }
   113 void RuntimeService::record_safepoint_begin() {
   114 #ifndef USDT2
   115   HS_DTRACE_PROBE(hs_private, safepoint__begin);
   116 #else /* USDT2 */
   117   HS_PRIVATE_SAFEPOINT_BEGIN();
   118 #endif /* USDT2 */
   120   // Print the time interval in which the app was executing
   121   if (PrintGCApplicationConcurrentTime) {
   122     gclog_or_tty->print_cr("Application time: %3.7f seconds",
   123                                 last_application_time_sec());
   124   }
   126   // update the time stamp to begin recording safepoint time
   127   _safepoint_timer.update();
   128   if (UsePerfData) {
   129     _total_safepoints->inc();
   130     if (_app_timer.is_updated()) {
   131       _application_time_ticks->inc(_app_timer.ticks_since_update());
   132     }
   133   }
   134 }
   136 void RuntimeService::record_safepoint_synchronized() {
   137   if (UsePerfData) {
   138     _sync_time_ticks->inc(_safepoint_timer.ticks_since_update());
   139   }
   140 }
   142 void RuntimeService::record_safepoint_end() {
   143 #ifndef USDT2
   144   HS_DTRACE_PROBE(hs_private, safepoint__end);
   145 #else /* USDT2 */
   146   HS_PRIVATE_SAFEPOINT_END();
   147 #endif /* USDT2 */
   149   // Print the time interval for which the app was stopped
   150   // during the current safepoint operation.
   151   if (PrintGCApplicationStoppedTime) {
   152     gclog_or_tty->print_cr("Total time for which application threads "
   153                            "were stopped: %3.7f seconds",
   154                            last_safepoint_time_sec());
   155   }
   157   // update the time stamp to begin recording app time
   158   _app_timer.update();
   159   if (UsePerfData) {
   160     _safepoint_time_ticks->inc(_safepoint_timer.ticks_since_update());
   161   }
   162 }
   164 void RuntimeService::record_application_start() {
   165   // update the time stamp to begin recording app time
   166   _app_timer.update();
   167 }
   169 // Don't need to record application end because we currently
   170 // exit at a safepoint and record_safepoint_begin() handles updating
   171 // the application time counter at VM exit.
   173 jlong RuntimeService::safepoint_sync_time_ms() {
   174   return UsePerfData ?
   175     Management::ticks_to_ms(_sync_time_ticks->get_value()) : -1;
   176 }
   178 jlong RuntimeService::safepoint_count() {
   179   return UsePerfData ?
   180     _total_safepoints->get_value() : -1;
   181 }
   182 jlong RuntimeService::safepoint_time_ms() {
   183   return UsePerfData ?
   184     Management::ticks_to_ms(_safepoint_time_ticks->get_value()) : -1;
   185 }
   187 jlong RuntimeService::application_time_ms() {
   188   return UsePerfData ?
   189     Management::ticks_to_ms(_application_time_ticks->get_value()) : -1;
   190 }
   192 void RuntimeService::record_interrupted_before_count() {
   193   if (UsePerfData) {
   194     _interrupted_before_count->inc();
   195   }
   196 }
   198 void RuntimeService::record_interrupted_during_count() {
   199   if (UsePerfData) {
   200     _interrupted_during_count->inc();
   201   }
   202 }
   204 void RuntimeService::record_thread_interrupt_signaled_count() {
   205   if (UsePerfData) {
   206     _thread_interrupt_signaled_count->inc();
   207   }
   208 }
   210 #endif // INCLUDE_MANAGEMENT

mercurial