struct forkstat Forkstat
;
#define forkstat s.Forkstat
printf("no /vmunix namelist\n");
mf
= open("/dev/kmem", 0);
printf("cannot open /dev/kmem\n");
while (argc
>0 && argv
[0][0]=='-') {
while (*++cp
) switch (*cp
) {
mf
= open("/dev/kmem", 2);
lseek(mf
, (long)nl
[X_SUM
].value
, 0);
write(mf
, &z
.Sum
, sizeof z
.Sum
);
fprintf(stderr
, "usage: vmstat [ -fs ] [ interval ] [ count]\n");
lseek(mf
, (long)nl
[X_FIRSTFREE
].value
, 0);
read(mf
, &firstfree
, sizeof firstfree
);
lseek(mf
, (long)nl
[X_MAXFREE
].value
, 0);
read(mf
, &maxfree
, sizeof maxfree
);
Procs Virtual Real Page Swap Disk Cpu\n\
RQ DW PW SL SW AVM TX FRE RE PI PO FR DE SR I O D0 D1 D2 CS US NI SY ID\n\
lseek(mf
, (long)nl
[0].value
, 0);
read(mf
, &s
.busy
, sizeof s
.busy
);
lseek(mf
, (long)nl
[1].value
, 0);
read(mf
, s
.etime
, sizeof s
.etime
);
lseek(mf
, (long)nl
[2].value
, 0);
read(mf
, s
.numb
, sizeof s
.numb
);
lseek(mf
, (long)nl
[3].value
, 0);
read(mf
, &rate
, sizeof rate
);
lseek(mf
, (long)nl
[4].value
, 0);
read(mf
, &total
, sizeof total
);
lseek(mf
, (long)nl
[5].value
, 0);
read(mf
, &deficit
, sizeof deficit
);
s
.etime
[i
] -= s1
.etime
[i
];
Procs Virtual Real Page Swap Disk Cpu
RQ DW PW SL SW AVM TX FRE RE PI PO FR DE SR I O D0 D1 D2 CS US NI SY ID
printf("%2d%3d%3d%3d%3d", total
.t_rq
, total
.t_dw
, total
.t_pw
,
printf("%6d%3d%5d", total
.t_avm
, pct(total
.t_avmtxt
, total
.t_avm
),
printf("%4d%3d", rate
.v_pgrec
, rate
.v_pgin
);
printf("%3d%3d%4d%4.1f%2d%2d",
rate
.v_pgout
, rate
.v_dfree
, deficit
,
(60.0 * rate
.v_scan
) / LOOPSIZ
,
rate
.v_swpin
, rate
.v_swpout
);
printf("%4d", rate
.v_swtch
);
lseek(mf
, (long)nl
[X_REC
].value
, 0);
read(mf
, &s
.rectime
, sizeof s
.rectime
);
lseek(mf
, (long)nl
[X_PGIN
].value
, 0);
read(mf
, &s
.pgintime
, sizeof s
.pgintime
);
lseek(mf
, (long)nl
[X_SUM
].value
, 0);
read(mf
, &sum
, sizeof sum
);
printf("%d reclaims, %d total time (usec)\n", sum
.v_pgrec
, s
.rectime
);
printf("average: %d usec / reclaim\n", s
.rectime
/sum
.v_pgrec
);
printf("%d page ins, %d total time (msec)\n",sum
.v_pgin
, s
.pgintime
/10);
printf("average: %8.1f msec / page in\n", s
.pgintime
/(sum
.v_pgin
*10.0));
lseek(mf
, (long)nl
[X_SUM
].value
, 0);
read(mf
, &sum
, sizeof sum
);
printf("%8d swap ins\n", sum
.v_swpin
);
printf("%8d swap outs\n", sum
.v_swpout
);
printf("%8d pages swapped in\n", sum
.v_pswpin
);
printf("%8d pages swapped out\n", sum
.v_pswpout
);
printf("%8d total address trans. faults taken\n", sum
.v_faults
);
printf("%8d page ins\n", sum
.v_pgin
);
printf("%8d page outs\n", sum
.v_pgout
);
printf("%8d total reclaims\n", sum
.v_pgrec
);
printf("%8d reclaims from free list\n", sum
.v_pgfrec
);
printf("%8d intransit blocking page faults\n", sum
.v_intrans
);
printf("%8d zero fill on demand page faults\n", sum
.v_zfod
/ CLSIZE
);
printf("%8d total zero fill pages created\n", sum
.v_nzfod
);
printf("%8d executable fill on demand page faults\n", sum
.v_exfod
/ CLSIZE
);
printf("%8d total executable fill pages created\n", sum
.v_nexfod
);
printf("%8d file fill on demand page faults\n", sum
.v_vrfod
/ CLSIZE
);
printf("%8d total pages set up for fill on demand with vread\n", sum
.v_nvrfod
);
printf("%8d pages examined by the clock daemon\n", sum
.v_scan
);
printf("%8d revolutions of the clock hand\n", sum
.v_rev
);
printf("%8d pages freed by the clock daemon\n", sum
.v_dfree
);
printf("%8d cpu context switches\n", sum
.v_swtch
);
lseek(mf
, (long)nl
[X_FORKSTAT
].value
, 0);
read(mf
, &forkstat
, sizeof forkstat
);
printf("%d forks, %d pages, average=%.2f\n",
forkstat
.cntfork
, forkstat
.sizfork
,
(float) forkstat
.sizfork
/ forkstat
.cntfork
);
printf("%d vforks, %d pages, average=%.2f\n",
forkstat
.cntvfork
, forkstat
.sizvfork
,
(float)forkstat
.sizvfork
/ forkstat
.cntvfork
);
printf("%3.0f", f2
/etime
);
printf("%3.0f", f2
*100./f1
);
return ((top
* 100) / bot
);