[collectd] cpu plugin on macosx
Robert Viduya
robert at oit.gatech.edu
Fri May 29 23:47:21 CEST 2015
I just upgraded from collectd-5.4.2 to 5.5.0 on my mac and the cpu plugin stopped working. The error in the log was "cpu plugin: processor_info returned only 4 elements..”.
The complaint is correct, osx only reports 4 cpu states: user, nice, system and idle. Version 5.4.2 correctly handles this, but 5.5.0 is broken.
The code in cpu.c is incorrectly expecting the processor_info system call to return the wrong number of states (COLLECTD_CPU_STATE_MAX vs CPU_STATE_MAX). It’s also expecting the indexes into the array to match it’s internal indexes (COLLECTD_CPU_STATE_USER vs CPU_STATE_USER, COLLECTD_CPU_STATE_NICE vs CPU_STATE_NICE, etc.).
I’ve made the following changes to make it work on osx, but I’m not sure if this breaks it on any other platform:
*** collectd-5.5.0.orig/src/cpu.c Tue Mar 10 10:14:45 2015
--- collectd-5.5.0/src/cpu.c Fri May 29 11:04:56 2015
***************
*** 582,597 ****
continue;
}
! if (cpu_info_len < COLLECTD_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);
}
/* }}} #endif PROCESSOR_CPU_LOAD_INFO */
--- 582,597 ----
continue;
}
! 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[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 */
More information about the collectd
mailing list