|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 3990 (0xf96)
Types: TextFile
Names: »s.vm.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec8/mon/s.vm.c«
▶01◀h18955
▶01◀s 00002/00000/00119
▶01◀d D 1.2 85/01/04 23:06:06 root 2 1
▶01◀c ifdef dualcpu
▶01◀e
▶01◀s 00119/00000/00000
▶01◀d D 1.1 85/01/04 23:02:49 root 1 0
▶01◀c date and time created 85/01/04 23:02:49 by root
▶01◀e
▶01◀u
▶01◀U
▶01◀t
▶01◀T
▶01◀I 1
/*
* V M
*
* Purpose: Read the system virtual memory status info from kernel
* space and write it onto the virtual screen used by curses(3).
*
* Bugs: This routime (like the others) it does its own
* printing. This makes it very difficult to change the screen
* format. A better solution would be to move all the prints
* into a screen update function.
*/
#include "mon.h"
#include <machine/param.h> /* defines bytes/page */
/* Temporary defines */
#define PROCS 2
#define CPUY 5
#define TIMEY 8
#define PAGE 11
vm()
{
register i,j;
long t; /* temporary */
lseek(kmem, (long)namelist[X_CP_TIME].n_value, 0);
read(kmem, s.cp_time, sizeof s.cp_time);
/* Check for 2nd CPU stats */
if (dualcpu) {
lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
read(kmem, s.cp_time2, sizeof s.cp_time2);
}
lseek(kmem, (long)namelist[X_DK_XFER].n_value, 0);
read(kmem, s.dk_xfer, sizeof s.dk_xfer);
lseek(kmem, (long)namelist[X_RATE].n_value, 0);
read(kmem, &rate, sizeof rate);
lseek(kmem, (long)namelist[X_TOTAL].n_value, 0);
read(kmem, &total, sizeof total);
lseek(kmem, (long)namelist[X_DEFICIT].n_value, 0);
read(kmem, &deficit, sizeof deficit);
etime = 0;
for (i=0; i < CPUSTATES; i++) {
t = s.cp_time[i];
s.cp_time[i] -= s1.cp_time[i];
s1.cp_time[i] = t;
if (dualcpu) {
t = s.cp_time2[i];
s.cp_time2[i] -= s1.cp_time2[i];
s1.cp_time2[i] = t;
}
etime += s.cp_time[i]; /* interval must count 1 CPU only */
}
if(etime == 0.)
etime = 1.;
etime /= (float) hz;
/* Display the procs line */
mvprintw(PROCS+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
#define pgtok(a) ((a)*NBPG/1024)
mvprintw(PROCS+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
mvprintw(PROCS+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );
mvprintw(PROCS+1,47,"%5d", pgtok(total.t_free));
/* Display paging info */
mvprintw(PAGE+1,6,"%4d %3d",
(rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
(rate.v_xsfrec+rate.v_xifrec));
mvprintw(PAGE+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
pgtok(rate.v_pgpgout));
/* operations per time is (pgin + pgout) */
mvprintw(PAGE+1,24,"%4d", (pgtok(rate.v_pgin)+
pgtok(rate.v_pgout)));
mvprintw(PAGE+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
, pgtok(deficit), rate.v_scan);
/* Display CPU info */
mvprintw(CPUY+1,4,"%4d %4d", (rate.v_intr) - hz, rate.v_syscall);
mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
▶01◀I 2
#ifdef DUALCPU
▶01◀E 2
if (dualcpu)
mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
▶01◀I 2
#endif
▶01◀E 2
cputime();
/* Display additional stuff */
mvprintw(PAGE+4,6,"%4d%4d %4d%4d %4d%4d %4d %4d%4d",
rate.v_nexfod, rate.v_exfod,
rate.v_nzfod, rate.v_zfod,
rate.v_nvrfod, rate.v_vrfod,
rate.v_pgfrec,
rate.v_swpin, rate.v_swpout);
}
/*
* Display cpu time info (%time in each state)
*/
cputime()
{
int x;
double t, t2;
register i;
t = t2 = 0;
for(i=0; i<CPUSTATES; i++) {
t += s.cp_time[i];
t2 += s.cp_time2[i];
}
if(t == 0.)
t = 1.;
if (t2 == 0.)
t2 = 1.;
x = 6;
for(i=0; i<CPUSTATES; i++){
mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
if (dualcpu)
mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
x += 5;
}
}
▶01◀E 1