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() {
|