Looks like current SYSTEM_CPU_UTIL function uses kstat system calls which returns cpu utilisation counters since last reboot(?) - therefore zabbix shows average cpu utilisation for quite long period of time instead of current state of things. Though I'm not a C programmer (well, not programmer at all) I patched cpu.c so it now returns more meaningful data ( more or less the same as sar does).
Again, I'm not programmer and possibly there is more correct way to work with kstat data but it works for us ( tested on Solaris9 ).
Patch (against zabbix-1.1.2/src/libs/zbxsysinfo/solaris/cpu.c):
79a80,81
> unsigned long long cpu_val_s[4];
> unsigned long long cpu_val_e[4];
140c142
< if (get_cpu_data(&cpu_val[CPU_I], &cpu_val[CPU_K], &cpu_val[CPU_U], &cpu_val[CPU_W]))
---
> if (get_cpu_data(&cpu_val_s[CPU_I], &cpu_val_s[CPU_K], &cpu_val_s[CPU_U], &cpu_val_s[CPU_W]))
141a144,149
> sleep(5);
> int q = get_cpu_data(&cpu_val_e[CPU_I], &cpu_val_e[CPU_K], &cpu_val_e[CPU_U], &cpu_val_e[CPU_W]);
> cpu_val[CPU_I] = cpu_val_e[CPU_I] - cpu_val_s[CPU_I];
> cpu_val[CPU_K] = cpu_val_e[CPU_K] - cpu_val_s[CPU_K];
> cpu_val[CPU_U] = cpu_val_e[CPU_U] - cpu_val_s[CPU_U];
> cpu_val[CPU_W] = cpu_val_e[CPU_W] - cpu_val_s[CPU_W];
Edit/Delete Message
Again, I'm not programmer and possibly there is more correct way to work with kstat data but it works for us ( tested on Solaris9 ).
Patch (against zabbix-1.1.2/src/libs/zbxsysinfo/solaris/cpu.c):
79a80,81
> unsigned long long cpu_val_s[4];
> unsigned long long cpu_val_e[4];
140c142
< if (get_cpu_data(&cpu_val[CPU_I], &cpu_val[CPU_K], &cpu_val[CPU_U], &cpu_val[CPU_W]))
---
> if (get_cpu_data(&cpu_val_s[CPU_I], &cpu_val_s[CPU_K], &cpu_val_s[CPU_U], &cpu_val_s[CPU_W]))
141a144,149
> sleep(5);
> int q = get_cpu_data(&cpu_val_e[CPU_I], &cpu_val_e[CPU_K], &cpu_val_e[CPU_U], &cpu_val_e[CPU_W]);
> cpu_val[CPU_I] = cpu_val_e[CPU_I] - cpu_val_s[CPU_I];
> cpu_val[CPU_K] = cpu_val_e[CPU_K] - cpu_val_s[CPU_K];
> cpu_val[CPU_U] = cpu_val_e[CPU_U] - cpu_val_s[CPU_U];
> cpu_val[CPU_W] = cpu_val_e[CPU_W] - cpu_val_s[CPU_W];
Edit/Delete Message
Comment