From dd808ba377b1ac57ce3e95ddf5991912c61e38d8 Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Sun, 12 Oct 1980 05:32:11 -0800 Subject: [PATCH] %cpu SCCS-vsn: sys/kern/kern_clock.c 3.20 SCCS-vsn: sys/kern/kern_proc.c 3.25 SCCS-vsn: sys/kern/kern_synch.c 3.15 --- usr/src/sys/kern/kern_clock.c | 17 +++++++++++------ usr/src/sys/kern/kern_proc.c | 5 +++-- usr/src/sys/kern/kern_synch.c | 6 +++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/usr/src/sys/kern/kern_clock.c b/usr/src/sys/kern/kern_clock.c index 5b2970862c..84eef5716a 100644 --- a/usr/src/sys/kern/kern_clock.c +++ b/usr/src/sys/kern/kern_clock.c @@ -1,4 +1,4 @@ -/* %H% 3.19 kern_clock.c */ +/* %H% 3.20 kern_clock.c */ #include "../h/param.h" #include "../h/systm.h" @@ -19,9 +19,13 @@ #define SCHMAG 9/10 +/* + * Constant for decay filter for cpu usage. + */ +double ccpu = 0.93550698503161773774; /* exp(-1/15) */ /* - * clock is called straight from + * Clock is called straight from * the real time clock interrupt. * * Functions: @@ -150,6 +154,7 @@ out: dk_time[cpstate][dk_busy&(DK_NSTATES-1)]++; if (!noproc) { pp = u.u_procp; + pp->p_cpticks++; if(++pp->p_cpu == 0) pp->p_cpu--; if(pp->p_cpu % 16 == 0) { @@ -206,10 +211,10 @@ out: if(pp->p_stat==SSLEEP||pp->p_stat==SSTOP) if (pp->p_slptime != 127) pp->p_slptime++; - if(pp->p_flag&SLOAD) { - ave(pp->p_aveflt, pp->p_faults, 5); - pp->p_faults = 0; - } + if (pp->p_flag&SLOAD) + pp->p_pctcpu = ccpu * pp->p_pctcpu + + (1.0 - ccpu) * (pp->p_cpticks/(float)HZ); + pp->p_cpticks = 0; a = (pp->p_cpu & 0377)*SCHMAG + pp->p_nice - NZERO; if(a < 0) a = 0; diff --git a/usr/src/sys/kern/kern_proc.c b/usr/src/sys/kern/kern_proc.c index 4f5ffeb636..56f9909d1c 100644 --- a/usr/src/sys/kern/kern_proc.c +++ b/usr/src/sys/kern/kern_proc.c @@ -1,4 +1,4 @@ -/* kern_proc.c 3.24 %G% */ +/* kern_proc.c 3.25 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -411,7 +411,8 @@ exit(rv) else p->p_siga1 = 0; (void) spl0(); - p->p_aveflt = 0; + p->p_cpticks = 0; + p->p_pctcpu = 0; for(i=0; ip_rssize = 0; rpp->p_wchan = 0; rpp->p_slptime = 0; - rpp->p_aveflt = rip->p_aveflt; - rpp->p_faults = 0; + rpp->p_pctcpu = 0; + rpp->p_cpticks = 0; n = PIDHASH(rpp->p_pid); p->p_idhash = pidhash[n]; pidhash[n] = rpp - proc; -- 2.20.1