< prev index next >

src/hotspot/os/solaris/os_perf_solaris.cpp

Print this page

283   // initialize kstat control structure,
284   _counters.kstat_ctrl = kstat_open();
285   assert(_counters.kstat_ctrl != NULL, "error initializing kstat control structure!");
286 
287   if (NULL == _counters.kstat_ctrl) {
288     return false;
289   }
290 
291   // Get number of CPU(s)
292   if ((_counters.nProcs = sysconf(_SC_NPROCESSORS_ONLN)) == OS_ERR) {
293     // ignore error?
294     _counters.nProcs = 1;
295   }
296 
297   assert(_counters.nProcs > 0, "no CPUs detected in sysconf call!");
298   if (_counters.nProcs == 0) {
299     return false;
300   }
301 
302   // Data structure(s) for saving CPU load (one per CPU)
303   size_t tick_array_size = _counters.nProcs * sizeof(CPUPerfTicks);
304   _counters.jvmTicks = (CPUPerfTicks*)NEW_C_HEAP_ARRAY(char, tick_array_size, mtInternal);
305   if (NULL == _counters.jvmTicks) {
306     return false;
307   }
308   memset(_counters.jvmTicks, 0, tick_array_size);
309 
310   // Get kstat cpu_stat counters for every CPU
311   // loop over kstat to find our cpu_stat(s)
312   int i = 0;
313   for (kstat_t* kstat = _counters.kstat_ctrl->kc_chain; kstat != NULL; kstat = kstat->ks_next) {
314     if (strncmp(kstat->ks_module, "cpu_stat", 8) == 0) {
315       if (kstat_read(_counters.kstat_ctrl, kstat, NULL) == OS_ERR) {
316         continue;
317       }
318       if (i == _counters.nProcs) {
319         // more cpu_stats than reported CPUs
320         break;
321       }
322       _counters.jvmTicks[i++].kstat = kstat;
323     }
324   }
325   return true;
326 }
327 
328 CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {

283   // initialize kstat control structure,
284   _counters.kstat_ctrl = kstat_open();
285   assert(_counters.kstat_ctrl != NULL, "error initializing kstat control structure!");
286 
287   if (NULL == _counters.kstat_ctrl) {
288     return false;
289   }
290 
291   // Get number of CPU(s)
292   if ((_counters.nProcs = sysconf(_SC_NPROCESSORS_ONLN)) == OS_ERR) {
293     // ignore error?
294     _counters.nProcs = 1;
295   }
296 
297   assert(_counters.nProcs > 0, "no CPUs detected in sysconf call!");
298   if (_counters.nProcs == 0) {
299     return false;
300   }
301 
302   // Data structure(s) for saving CPU load (one per CPU)
303   size_t array_entry_count = _counters.nProcs;
304   _counters.jvmTicks = NEW_C_HEAP_ARRAY(CPUPerfTicks, array_entry_count, mtInternal);
305   if (NULL == _counters.jvmTicks) {
306     return false;
307   }
308   memset(_counters.jvmTicks, 0, array_entry_count * sizeof(*_counters.jvmTicks));
309 
310   // Get kstat cpu_stat counters for every CPU
311   // loop over kstat to find our cpu_stat(s)
312   int i = 0;
313   for (kstat_t* kstat = _counters.kstat_ctrl->kc_chain; kstat != NULL; kstat = kstat->ks_next) {
314     if (strncmp(kstat->ks_module, "cpu_stat", 8) == 0) {
315       if (kstat_read(_counters.kstat_ctrl, kstat, NULL) == OS_ERR) {
316         continue;
317       }
318       if (i == _counters.nProcs) {
319         // more cpu_stats than reported CPUs
320         break;
321       }
322       _counters.jvmTicks[i++].kstat = kstat;
323     }
324   }
325   return true;
326 }
327 
328 CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {
< prev index next >