DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T v

⟦dcc92136c⟧ TextFile

    Length: 3752 (0xea8)
    Types: TextFile
    Names: »vm.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec8/mon/vm.c« 

TextFile

/*
 *      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);
#ifdef DUALCPU
	if (dualcpu)
	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
#endif
        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;
        }
}