On Sat, 11 Mar 2000, Kris Kennaway wrote:
> On Sun, 12 Mar 2000, Oliver Fromme wrote:
>
> > Then look up the definition of kread() in the same file, and
> > how the contents of cur.cp_time are used in the cpustats()
> > function. Note that "cur" is a "struct statinfo", which is
> > defined in /usr/include/devstat.h. The CPU states are defined
> > in /usr/include/sys/dkstat.h.
>
> We probably should make this into a sysctl to divorce the binaries from
> having to read kvm.
I'm definitely for it... If I can get permission from Jordan, perhaps the
attached patches can make it into upcoming release.
Andrzej Bialecki
// <[EMAIL PROTECTED]> WebGiro AB, Sweden (http://www.webgiro.com)
// -------------------------------------------------------------------
// ------ FreeBSD: The Power to Serve. http://www.freebsd.org --------
// --- Small & Embedded FreeBSD: http://www.freebsd.org/~picobsd/ ----
Index: sysctl.c
===================================================================
RCS file: /home/ncvs/src/sbin/sysctl/sysctl.c,v
retrieving revision 1.25
diff -u -r1.25 sysctl.c
--- sysctl.c 1999/11/22 08:43:00 1.25
+++ sysctl.c 2000/03/12 15:35:12
@@ -46,6 +46,7 @@
#endif /* not lint */
#include <sys/types.h>
+#include <sys/dkstat.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/resource.h>
@@ -219,6 +220,29 @@
/* These functions will dump out various interesting structures. */
static int
+S_cpu_time(int l2, void *p)
+{
+ long *cpt=(long *)p;
+ double d,total;
+ int i;
+
+ total=0;
+ for(i=0;i<CPUSTATES;i++)
+ total+=*(cpt+i);
+ d=100**(cpt+CP_USER)/total;
+ printf("{ user=%.0f%% ",d);
+ d=100**(cpt+CP_NICE)/total;
+ printf("nice=%.0f%% ",d);
+ d=100**(cpt+CP_SYS)/total;
+ printf("sys=%.0f%% ",d);
+ d=100**(cpt+CP_INTR)/total;
+ printf("intr=%.0f%% ",d);
+ d=100**(cpt+CP_IDLE)/total;
+ printf("idle=%.0f%% }",d);
+ return(0);
+}
+
+static int
S_clockinfo(int l2, void *p)
{
struct clockinfo *ci = (struct clockinfo*)p;
@@ -417,6 +441,7 @@
case 'S':
i = 0;
if (!strcmp(fmt, "S,clockinfo")) func = S_clockinfo;
+ else if (!strcmp(fmt, "S,cpu_time")) func = S_cpu_time;
else if (!strcmp(fmt, "S,timeval")) func = S_timeval;
else if (!strcmp(fmt, "S,loadavg")) func = S_loadavg;
else if (!strcmp(fmt, "T,dev_t")) func = T_dev_t;
Index: kern_clock.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_clock.c,v
retrieving revision 1.105
diff -u -r1.105 kern_clock.c
--- kern_clock.c 2000/02/13 10:56:32 1.105
+++ kern_clock.c 2000/03/12 15:35:44
@@ -105,6 +105,9 @@
SYSCTL_STRUCT(_kern, KERN_BOOTTIME, boottime, CTLFLAG_RD,
&boottime, timeval, "System boottime");
+SYSCTL_OPAQUE(_kern, OID_AUTO, cpu_time, CTLFLAG_RD, &cp_time,
+ sizeof(cp_time), "S,cpu_time", "CPU times");
+
/*
* Which update policy to use.
* 0 - every tick, bad hardware may fail with "calcru negative..."