change %cpu constant; new disk monitoring/cpu scheme
[unix-history] / usr / src / sys / kern / kern_clock.c
index 5b29708..3247eda 100644 (file)
@@ -1,4 +1,4 @@
-/*     %H%     3.19    kern_clock.c    */
+/*     %H%     3.21    kern_clock.c    */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #define        SCHMAG  9/10
 
 
 #define        SCHMAG  9/10
 
+/*
+ * Constant for decay filter for cpu usage.
+ */
+double ccpu = 0.95122942450071400909;          /* exp(-1/20) */
 
 /*
 
 /*
- * clock is called straight from
+ * Clock is called straight from
  * the real time clock interrupt.
  *
  * Functions:
  * the real time clock interrupt.
  *
  * Functions:
@@ -50,7 +54,7 @@ caddr_t pc;
        register struct callo *p1, *p2;
        register struct proc *pp;
        register int s;
        register struct callo *p1, *p2;
        register struct proc *pp;
        register int s;
-       int a, cpstate;
+       int a, cpstate, i;
 
        /*
         * reprime clock
 
        /*
         * reprime clock
@@ -147,9 +151,13 @@ out:
                else
                        u.u_vm.vm_stime++;
        }
                else
                        u.u_vm.vm_stime++;
        }
-       dk_time[cpstate][dk_busy&(DK_NSTATES-1)]++;
+       cp_time[cpstate]++;
+       for (i = 0; i < DK_NDRIVE; i++)
+               if (dk_busy&(1<<i))
+                       dk_time[i]++;
        if (!noproc) {
                pp = u.u_procp;
        if (!noproc) {
                pp = u.u_procp;
+               pp->p_cpticks++;
                if(++pp->p_cpu == 0)
                        pp->p_cpu--;
                if(pp->p_cpu % 16 == 0) {
                if(++pp->p_cpu == 0)
                        pp->p_cpu--;
                if(pp->p_cpu % 16 == 0) {
@@ -206,10 +214,10 @@ out:
                        if(pp->p_stat==SSLEEP||pp->p_stat==SSTOP)
                                if (pp->p_slptime != 127)
                                        pp->p_slptime++;
                        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;
                        a = (pp->p_cpu & 0377)*SCHMAG + pp->p_nice - NZERO;
                        if(a < 0)
                                a = 0;