From 06636a8ec1db2060815296b1a7416eac88ad95f6 Mon Sep 17 00:00:00 2001 From: Antonio Huete Jimenez Date: Thu, 31 Mar 2011 12:21:30 +0200 Subject: [PATCH] kernel - Add kern.cp_time sysctl. This sysctl provides user, nice, sys, intr and idle cpu aggregate time. Tested-by: ftigeot Inspired-in: NetBSD, FreeBSD --- sys/kern/kern_clock.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c index 5a26a54909..eeba4d8d22 100644 --- a/sys/kern/kern_clock.c +++ b/sys/kern/kern_clock.c @@ -156,6 +156,29 @@ SYSCTL_STRUCT(_kern, OID_AUTO, cputime, CTLFLAG_RD, &cpu_time, kinfo_cputime, "CPU time statistics"); #endif +static int +sysctl_cp_time(SYSCTL_HANDLER_ARGS) +{ + long cpu_states[5] = {0}; + int cpu, error = 0; + size_t size = sizeof(cpu_states); + + for (cpu = 0; cpu < ncpus; ++cpu) { + cpu_states[0] += cputime_percpu[cpu].cp_user; + cpu_states[1] += cputime_percpu[cpu].cp_nice; + cpu_states[2] += cputime_percpu[cpu].cp_sys; + cpu_states[3] += cputime_percpu[cpu].cp_intr; + cpu_states[4] += cputime_percpu[cpu].cp_idle; + } + + error = SYSCTL_OUT(req, cpu_states, size); + + return (error); +} + +SYSCTL_PROC(_kern, OID_AUTO, cp_time, (CTLTYPE_LONG|CTLFLAG_RD), 0, 0, + sysctl_cp_time, "LU", "CPU time statistics"); + /* * boottime is used to calculate the 'real' uptime. Do not confuse this with * microuptime(). microtime() is not drift compensated. The real uptime -- 2.41.0