+ return(uptime);
+}
+
+int hz, hdrcnt;
+
+void
+dovmstat(interval, reps)
+ u_int interval;
+ int reps;
+{
+ struct vmtotal total;
+ time_t uptime, halfuptime;
+ void needhdr();
+#ifndef notdef
+ int deficit;
+#endif
+
+ uptime = getuptime();
+ halfuptime = uptime / 2;
+ (void)signal(SIGCONT, needhdr);
+
+ if (nl[X_PHZ].n_type != 0 && nl[X_PHZ].n_value != 0)
+ kread(X_PHZ, &hz, sizeof(hz));
+ if (!hz)
+ kread(X_HZ, &hz, sizeof(hz));
+
+ for (hdrcnt = 1;;) {
+ if (!--hdrcnt)
+ printhdr();
+ kread(X_CPTIME, cur.time, sizeof(cur.time));
+ kread(X_DKXFER, cur.xfer, sizeof(*cur.xfer * dk_ndrive));
+ kread(X_SUM, &sum, sizeof(sum));
+ kread(X_TOTAL, &total, sizeof(total));
+ kread(X_VMSTAT, &vm_stat, sizeof(vm_stat));
+#ifdef notdef
+ kread(X_DEFICIT, &deficit, sizeof(deficit));
+#endif
+ (void)printf("%2d %1d %1d ",
+ total.t_rq, total.t_dw + total.t_pw, total.t_sw);
+#define pgtok(a) ((a)*NBPG >> 10)
+#define rate(x) (((x) + halfuptime) / uptime) /* round */
+ (void)printf("%5ld %5ld ",
+ pgtok(total.t_avm), pgtok(total.t_free));
+#ifdef NEWVM
+ (void)printf("%4lu ", rate(vm_stat.faults - ostat.faults));
+ (void)printf("%3lu ",
+ rate(vm_stat.reactivations - ostat.reactivations));
+ (void)printf("%3lu ", rate(vm_stat.pageins - ostat.pageins));
+ (void)printf("%3lu %3lu ",
+ rate(vm_stat.pageouts - ostat.pageouts), 0);
+#else
+ (void)printf("%3lu %2lu ",
+ rate(sum.v_pgrec - (sum.v_xsfrec+sum.v_xifrec) -
+ (osum.v_pgrec - (osum.v_xsfrec+osum.v_xifrec))),
+ rate(sum.v_xsfrec + sum.v_xifrec -
+ osum.v_xsfrec - osum.v_xifrec));
+ (void)printf("%3lu ",
+ rate(pgtok(sum.v_pgpgin - osum.v_pgpgin)));
+ (void)printf("%3lu %3lu ",
+ rate(pgtok(sum.v_pgpgout - osum.v_pgpgout)),
+ rate(pgtok(sum.v_dfree - osum.v_dfree)));
+ (void)printf("%3d ", pgtok(deficit));
+#endif
+ (void)printf("%3lu ", rate(sum.v_scan - osum.v_scan));
+ dkstats();
+ (void)printf("%4lu %4lu %3lu ",
+ rate(sum.v_intr - osum.v_intr),
+ rate(sum.v_syscall - osum.v_syscall),
+ rate(sum.v_swtch - osum.v_swtch));
+ cpustats();
+ (void)printf("\n");
+ (void)fflush(stdout);
+ if (reps >= 0 && --reps <= 0)
+ break;
+ osum = sum;
+ ostat = vm_stat;
+ uptime = interval;
+ /*
+ * We round upward to avoid losing low-frequency events
+ * (i.e., >= 1 per interval but < 1 per second).
+ */
+ halfuptime = (uptime + 1) / 2;
+ (void)sleep(interval);