source: trunk/athena/bin/mon/vm.c @ 2

Revision 2, 3.9 KB checked in by dgg, 39 years ago (diff)
Initial revision
Line 
1/*
2 *      $Source: /afs/dev.mit.edu/source/repository/athena/bin/mon/vm.c,v $
3 *      $Author: dgg $
4 *      $Locker:  $
5 *      $Header: /afs/dev.mit.edu/source/repository/athena/bin/mon/vm.c,v 1.1 1984-12-13 12:01:38 dgg Exp $
6 */
7
8#ifndef lint
9static char *rcsid_vm_c = "$Header: /afs/dev.mit.edu/source/repository/athena/bin/mon/vm.c,v 1.1 1984-12-13 12:01:38 dgg Exp $";
10#endif  lint
11
12/*
13 *      V M
14 *
15 * Purpose:  Read the system virtual memory status info from kernel
16 *      space and write it onto the virtual screen used by curses(3).
17 *
18 * Bugs:  This routime (like the others) it does its own
19 *      printing.  This makes it very difficult to change the screen
20 *      format.  A better solution would be to move all the prints
21 *      into a screen update function.
22 */
23
24#include "mon.h"
25#include <machine/param.h>      /* defines bytes/page */
26
27/* Temporary defines */
28#define PROCS   2
29#define CPUY    5
30#define TIMEY   8
31#define PAGE    11
32
33vm()
34{
35        register i,j;
36        long    t;              /* temporary */
37
38        lseek(kmem, (long)namelist[X_CP_TIME].n_value, 0);
39        read(kmem, s.cp_time, sizeof s.cp_time);
40        /* Check for 2nd CPU stats */
41        if (dualcpu) {
42                lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
43                read(kmem, s.cp_time2, sizeof s.cp_time2);
44        }
45        lseek(kmem, (long)namelist[X_DK_XFER].n_value, 0);
46        read(kmem, s.dk_xfer, sizeof s.dk_xfer);
47        lseek(kmem, (long)namelist[X_RATE].n_value, 0);
48        read(kmem, &rate, sizeof rate);
49        lseek(kmem, (long)namelist[X_TOTAL].n_value, 0);
50        read(kmem, &total, sizeof total);
51        lseek(kmem, (long)namelist[X_DEFICIT].n_value, 0);
52        read(kmem, &deficit, sizeof deficit);
53        etime = 0;
54        for (i=0; i < CPUSTATES; i++) {
55                t = s.cp_time[i];
56                s.cp_time[i] -= s1.cp_time[i];
57                s1.cp_time[i] = t;
58                if (dualcpu) {
59                        t = s.cp_time2[i];
60                        s.cp_time2[i] -= s1.cp_time2[i];
61                        s1.cp_time2[i] = t;
62                }
63                etime += s.cp_time[i];  /* interval must count 1 CPU only */
64        }
65        if(etime == 0.)
66                etime = 1.;
67        etime /= (float) hz;
68
69        /* Display the procs line */
70        mvprintw(PROCS+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
71#define pgtok(a) ((a)*NBPG/1024)
72        mvprintw(PROCS+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
73        mvprintw(PROCS+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );
74        mvprintw(PROCS+1,47,"%5d", pgtok(total.t_free));
75
76        /* Display paging info */
77        mvprintw(PAGE+1,6,"%4d %3d",
78                (rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
79                (rate.v_xsfrec+rate.v_xifrec));
80        mvprintw(PAGE+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
81                pgtok(rate.v_pgpgout));
82        /* operations per time is (pgin + pgout)  */
83        mvprintw(PAGE+1,24,"%4d", (pgtok(rate.v_pgin)+
84                pgtok(rate.v_pgout)));
85        mvprintw(PAGE+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
86                , pgtok(deficit), rate.v_scan);
87
88        /* Display CPU info */
89        mvprintw(CPUY+1,4,"%4d  %4d", (rate.v_intr) - hz, rate.v_syscall);
90        mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
91        cputime();
92
93        /* Display additional stuff */
94        mvprintw(PAGE+4,6,"%4d%4d %4d%4d %4d%4d %4d %4d%4d",
95                rate.v_nexfod, rate.v_exfod,
96                rate.v_nzfod, rate.v_zfod,
97                rate.v_nvrfod, rate.v_vrfod,
98                rate.v_pgfrec,
99                rate.v_swpin, rate.v_swpout);
100}
101
102
103/*
104 * Display cpu time info (%time in each state)
105 */
106cputime()
107{
108        int x;
109        double t, t2;
110        register i;
111
112        t = t2 = 0;
113        for(i=0; i<CPUSTATES; i++) {
114                t += s.cp_time[i];
115                t2 += s.cp_time2[i];
116        }
117        if(t == 0.)
118                t = 1.;
119        if (t2 == 0.)
120                t2 = 1.;
121        x = 6;
122        for(i=0; i<CPUSTATES; i++){
123                mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
124                if (dualcpu)
125                        mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
126                x += 5;
127        }
128}
Note: See TracBrowser for help on using the repository browser.