X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcpu.c;h=80029667af80d39950fe06f1d0482455f70ff92c;hb=ec9ed6fe4108f7fd3d4ef84e887bb6d3dc022e14;hp=57af2dd7f26b105f5aab16fabbc04b53a6342660;hpb=cb314c15d51352ebcc4cfd2bbf1d6a3042c2402f;p=collectd.git diff --git a/src/cpu.c b/src/cpu.c index 57af2dd7..80029667 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -28,6 +28,7 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" @@ -221,15 +222,25 @@ static int init (void) port_host = mach_host_self (); - /* FIXME: Free `cpu_list' if it's not NULL */ - if ((status = host_processors (port_host, &cpu_list, &cpu_list_len)) != KERN_SUCCESS) + status = host_processors (port_host, &cpu_list, &cpu_list_len); + if (status == KERN_INVALID_ARGUMENT) + { + ERROR ("cpu plugin: Don't have a privileged host control port. " + "The most common cause for this problem is " + "that collectd is running without root " + "privileges, which are required to read CPU " + "load information. " + ""); + cpu_list_len = 0; + return (-1); + } + if (status != KERN_SUCCESS) { - ERROR ("cpu plugin: host_processors returned %i", (int) status); + ERROR ("cpu plugin: host_processors() failed with status %d.", (int) status); cpu_list_len = 0; return (-1); } - DEBUG ("host_processors returned %i %s", (int) cpu_list_len, cpu_list_len == 1 ? "processor" : "processors"); INFO ("cpu plugin: Found %i processor%s.", (int) cpu_list_len, cpu_list_len == 1 ? "" : "s"); /* #endif PROCESSOR_CPU_LOAD_INFO */ @@ -395,19 +406,16 @@ static cpu_state_t *get_cpu_state (size_t cpu_num, size_t state) /* {{{ */ * array. */ static void aggregate (gauge_t *sum_by_state) /* {{{ */ { - size_t cpu_num; - size_t state; - - for (state = 0; state < COLLECTD_CPU_STATE_MAX; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_MAX; state++) sum_by_state[state] = NAN; - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *this_cpu_states = get_cpu_state (cpu_num, 0); this_cpu_states[COLLECTD_CPU_STATE_ACTIVE].rate = NAN; - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { if (!this_cpu_states[state].has_value) continue; @@ -432,7 +440,6 @@ static void aggregate (gauge_t *sum_by_state) /* {{{ */ static void cpu_commit_one (int cpu_num, /* {{{ */ gauge_t rates[static COLLECTD_CPU_STATE_MAX]) { - size_t state; gauge_t sum; sum = rates[COLLECTD_CPU_STATE_ACTIVE]; @@ -445,7 +452,7 @@ static void cpu_commit_one (int cpu_num, /* {{{ */ return; } - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { gauge_t percent = 100.0 * rates[state] / sum; submit_percent (cpu_num, state, percent); @@ -456,9 +463,7 @@ static void cpu_commit_one (int cpu_num, /* {{{ */ * each iteration / after each call to cpu_commit(). */ static void cpu_reset (void) /* {{{ */ { - size_t i; - - for (i = 0; i < cpu_states_num; i++) + for (size_t i = 0; i < cpu_states_num; i++) cpu_states[i].has_value = 0; global_cpu_num = 0; @@ -467,13 +472,9 @@ static void cpu_reset (void) /* {{{ */ /* Legacy behavior: Dispatches the raw derive values without any aggregation. */ static void cpu_commit_without_aggregation (void) /* {{{ */ { - int state; - - for (state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) + for (int state = 0; state < COLLECTD_CPU_STATE_ACTIVE; state++) { - size_t cpu_num; - - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *s = get_cpu_state (cpu_num, state); @@ -491,7 +492,6 @@ static void cpu_commit (void) /* {{{ */ gauge_t global_rates[COLLECTD_CPU_STATE_MAX] = { NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN /* Batman! */ }; - size_t cpu_num; if (report_by_state && report_by_cpu && !report_percent) { @@ -507,15 +507,14 @@ static void cpu_commit (void) /* {{{ */ return; } - for (cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) + for (size_t cpu_num = 0; cpu_num < global_cpu_num; cpu_num++) { cpu_state_t *this_cpu_states = get_cpu_state (cpu_num, 0); gauge_t local_rates[COLLECTD_CPU_STATE_MAX] = { NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN }; - size_t state; - for (state = 0; state < COLLECTD_CPU_STATE_MAX; state++) + for (size_t state = 0; state < COLLECTD_CPU_STATE_MAX; state++) if (this_cpu_states[state].has_value) local_rates[state] = this_cpu_states[state].rate; @@ -526,11 +525,12 @@ static void cpu_commit (void) /* {{{ */ /* Adds a derive value to the internal state. This should be used by each read * function for each state. At the end of the iteration, the read function * should call cpu_commit(). */ -static int cpu_stage (size_t cpu_num, size_t state, derive_t value, cdtime_t now) /* {{{ */ +static int cpu_stage (size_t cpu_num, size_t state, derive_t d, cdtime_t now) /* {{{ */ { int status; cpu_state_t *s; - value_t v; + gauge_t rate = NAN; + value_t val = {.derive = d}; if (state >= COLLECTD_CPU_STATE_ACTIVE) return (EINVAL); @@ -544,12 +544,11 @@ static int cpu_stage (size_t cpu_num, size_t state, derive_t value, cdtime_t now s = get_cpu_state (cpu_num, state); - v.gauge = NAN; - status = value_to_rate (&v, value, &s->conv, DS_TYPE_DERIVE, now); + status = value_to_rate (&rate, val, DS_TYPE_DERIVE, now, &s->conv); if (status != 0) return (status); - s->rate = v.gauge; + s->rate = rate; s->has_value = 1; return (0); } /* }}} int cpu_stage */ @@ -559,8 +558,6 @@ static int cpu_read (void) cdtime_t now = cdtime (); #if PROCESSOR_CPU_LOAD_INFO /* {{{ */ - int cpu; - kern_return_t status; processor_cpu_load_info_data_t cpu_info; @@ -568,7 +565,7 @@ static int cpu_read (void) host_t cpu_host; - for (cpu = 0; cpu < cpu_list_len; cpu++) + for (int cpu = 0; cpu < cpu_list_len; cpu++) { cpu_host = 0; cpu_info_len = PROCESSOR_BASIC_INFO_COUNT; @@ -582,16 +579,16 @@ static int cpu_read (void) continue; } - if (cpu_info_len < COLLECTD_CPU_STATE_MAX) + if (cpu_info_len < CPU_STATE_MAX) { ERROR ("cpu plugin: processor_info returned only %i elements..", cpu_info_len); continue; } - cpu_stage (cpu, COLLECTD_CPU_STATE_USER, (derive_t) cpu_info.cpu_ticks[COLLECTD_CPU_STATE_USER], now); - cpu_stage (cpu, COLLECTD_CPU_STATE_NICE, (derive_t) cpu_info.cpu_ticks[COLLECTD_CPU_STATE_NICE], now); - cpu_stage (cpu, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpu_info.cpu_ticks[COLLECTD_CPU_STATE_SYSTEM], now); - cpu_stage (cpu, COLLECTD_CPU_STATE_IDLE, (derive_t) cpu_info.cpu_ticks[COLLECTD_CPU_STATE_IDLE], now); + cpu_stage (cpu, COLLECTD_CPU_STATE_USER, (derive_t) cpu_info.cpu_ticks[CPU_STATE_USER], now); + cpu_stage (cpu, COLLECTD_CPU_STATE_NICE, (derive_t) cpu_info.cpu_ticks[CPU_STATE_NICE], now); + cpu_stage (cpu, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpu_info.cpu_ticks[CPU_STATE_SYSTEM], now); + cpu_stage (cpu, COLLECTD_CPU_STATE_IDLE, (derive_t) cpu_info.cpu_ticks[CPU_STATE_IDLE], now); } /* }}} #endif PROCESSOR_CPU_LOAD_INFO */ @@ -643,13 +640,12 @@ static int cpu_read (void) /* }}} #endif defined(KERNEL_LINUX) */ #elif defined(HAVE_LIBKSTAT) /* {{{ */ - int cpu; static cpu_stat_t cs; if (kc == NULL) return (-1); - for (cpu = 0; cpu < numcpu; cpu++) + for (int cpu = 0; cpu < numcpu; cpu++) { if (kstat_read (kc, ksp[cpu], &cs) == -1) continue; /* error message? */ @@ -665,7 +661,6 @@ static int cpu_read (void) uint64_t cpuinfo[numcpu][CPUSTATES]; size_t cpuinfo_size; int status; - int i; if (numcpu < 1) { @@ -678,7 +673,7 @@ static int cpu_read (void) #if defined(KERN_CPTIME2) if (numcpu > 1) { - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { int mib[] = {CTL_KERN, KERN_CPTIME2, i}; cpuinfo_size = sizeof (cpuinfo[0]); @@ -711,12 +706,12 @@ static int cpu_read (void) return (-1); } - for(i = 0; i < CPUSTATES; i++) { + for(int i = 0; i < CPUSTATES; i++) { cpuinfo[0][i] = cpuinfo_tmp[i]; } } - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { cpu_stage (i, COLLECTD_CPU_STATE_USER, (derive_t) cpuinfo[i][CP_USER], now); cpu_stage (i, COLLECTD_CPU_STATE_NICE, (derive_t) cpuinfo[i][CP_NICE], now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpuinfo[i][CP_SYS], now); @@ -728,7 +723,6 @@ static int cpu_read (void) #elif defined(HAVE_SYSCTLBYNAME) && defined(HAVE_SYSCTL_KERN_CP_TIMES) /* {{{ */ long cpuinfo[maxcpu][CPUSTATES]; size_t cpuinfo_size; - int i; memset (cpuinfo, 0, sizeof (cpuinfo)); @@ -741,7 +735,7 @@ static int cpu_read (void) return (-1); } - for (i = 0; i < numcpu; i++) { + for (int i = 0; i < numcpu; i++) { cpu_stage (i, COLLECTD_CPU_STATE_USER, (derive_t) cpuinfo[i][CP_USER], now); cpu_stage (i, COLLECTD_CPU_STATE_NICE, (derive_t) cpuinfo[i][CP_NICE], now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) cpuinfo[i][CP_SYS], now); @@ -791,7 +785,7 @@ static int cpu_read (void) #elif defined(HAVE_PERFSTAT) /* {{{ */ perfstat_id_t id; - int i, cpus; + int cpus; numcpu = perfstat_cpu(NULL, NULL, sizeof(perfstat_cpu_t), 0); if(numcpu == -1) @@ -804,8 +798,7 @@ static int cpu_read (void) if (pnumcpu != numcpu || perfcpu == NULL) { - if (perfcpu != NULL) - free(perfcpu); + free(perfcpu); perfcpu = malloc(numcpu * sizeof(perfstat_cpu_t)); } pnumcpu = numcpu; @@ -819,7 +812,7 @@ static int cpu_read (void) return (-1); } - for (i = 0; i < cpus; i++) + for (int i = 0; i < cpus; i++) { cpu_stage (i, COLLECTD_CPU_STATE_IDLE, (derive_t) perfcpu[i].idle, now); cpu_stage (i, COLLECTD_CPU_STATE_SYSTEM, (derive_t) perfcpu[i].sys, now);