=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/vmstat/vmstat.c,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** src/usr.bin/vmstat/vmstat.c 1996/03/01 07:35:40 1.5 --- src/usr.bin/vmstat/vmstat.c 1996/03/03 02:51:24 1.6 *************** *** 1,5 **** /* $NetBSD: vmstat.c,v 1.27 1995/10/10 01:17:35 cgd Exp $ */ ! /* $OpenBSD: vmstat.c,v 1.5 1996/03/01 07:35:40 tholo Exp $ */ /* * Copyright (c) 1980, 1986, 1991, 1993 --- 1,5 ---- /* $NetBSD: vmstat.c,v 1.27 1995/10/10 01:17:35 cgd Exp $ */ ! /* $OpenBSD: vmstat.c,v 1.6 1996/03/03 02:51:24 tholo Exp $ */ /* * Copyright (c) 1980, 1986, 1991, 1993 *************** *** 73,78 **** --- 73,79 ---- #include #include #include + #include "dkstats.h" #define NEWVM /* XXX till old has been updated or purged */ struct nlist namelist[] = { *************** *** 150,163 **** { "" }, }; ! struct _disk { ! long time[CPUSTATES]; ! long *xfer; ! } cur, last; struct vmmeter sum, osum; ! char **dr_name; ! int *dr_select, dk_ndrive, ndrives; int winlines = 20; --- 151,163 ---- { "" }, }; ! /* Objects defined in dkstats.c */ ! extern struct _disk cur; ! extern char **dr_name; ! extern int *dk_select, dk_ndrive; struct vmmeter sum, osum; ! int ndrives; int winlines = 20; *************** *** 170,181 **** #define TIMESTAT 0x10 #define VMSTAT 0x20 - #include "names.c" /* disk names -- machine dependent */ - void cpustats(), dkstats(), dointr(), domem(), dosum(); void dovmstat(), kread(), usage(); void dotimes(), doforkst(); main(argc, argv) register int argc; register char **argv; --- 170,182 ---- #define TIMESTAT 0x10 #define VMSTAT 0x20 void cpustats(), dkstats(), dointr(), domem(), dosum(); void dovmstat(), kread(), usage(); void dotimes(), doforkst(); + char *nlistf = NULL; + char *memf = NULL; + main(argc, argv) register int argc; register char **argv; *************** *** 195,205 **** case 'c': reps = atoi(optarg); break; - #ifndef notdef case 'f': todo |= FORKSTAT; break; - #endif case 'i': todo |= INTRSTAT; break; --- 196,204 ---- *************** *** 263,272 **** } if (todo & VMSTAT) { ! char **getdrivedata(); struct winsize winsize; ! argv = getdrivedata(argv); winsize.ws_row = 0; (void) ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&winsize); if (winsize.ws_row > 0) --- 262,272 ---- } if (todo & VMSTAT) { ! char **choosedrives(); struct winsize winsize; ! dkinit(0); /* Initialize disk stats, no disks selected. */ ! argv = choosedrives(argv); /* Select disks. */ winsize.ws_row = 0; (void) ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&winsize); if (winsize.ws_row > 0) *************** *** 305,336 **** } char ** ! getdrivedata(argv) char **argv; { register int i; register char **cp; char buf[30]; - kread(X_DK_NDRIVE, &dk_ndrive, sizeof(dk_ndrive)); - if (dk_ndrive <= 0) { - (void)fprintf(stderr, "vmstat: dk_ndrive %d\n", dk_ndrive); - exit(1); - } - dr_select = calloc((size_t)dk_ndrive, sizeof(int)); - dr_name = calloc((size_t)dk_ndrive, sizeof(char *)); - for (i = 0; i < dk_ndrive; i++) - dr_name[i] = NULL; - cur.xfer = calloc((size_t)dk_ndrive, sizeof(long)); - last.xfer = calloc((size_t)dk_ndrive, sizeof(long)); - if (!read_names()) - exit (1); - for (i = 0; i < dk_ndrive; i++) - if (dr_name[i] == NULL) { - (void)sprintf(buf, "??%d", i); - dr_name[i] = strdup(buf); - } - /* * Choose drives to be displayed. Priority goes to (in order) drives * supplied as arguments, default drives. If everything isn't filled --- 305,317 ---- } char ** ! choosedrives(argv) char **argv; { register int i; register char **cp; char buf[30]; /* * Choose drives to be displayed. Priority goes to (in order) drives * supplied as arguments, default drives. If everything isn't filled *************** *** 346,370 **** for (i = 0; i < dk_ndrive; i++) { if (strcmp(dr_name[i], *argv)) continue; ! dr_select[i] = 1; ++ndrives; break; } } for (i = 0; i < dk_ndrive && ndrives < 4; i++) { ! if (dr_select[i]) continue; ! for (cp = defdrives; *cp; cp++) ! if (strcmp(dr_name[i], *cp) == 0) { ! dr_select[i] = 1; ! ++ndrives; ! break; ! } ! } ! for (i = 0; i < dk_ndrive && ndrives < 4; i++) { ! if (dr_select[i]) ! continue; ! dr_select[i] = 1; ++ndrives; } return(argv); --- 327,341 ---- for (i = 0; i < dk_ndrive; i++) { if (strcmp(dr_name[i], *argv)) continue; ! dk_select[i] = 1; ++ndrives; break; } } for (i = 0; i < dk_ndrive && ndrives < 4; i++) { ! if (dk_select[i]) continue; ! dk_select[i] = 1; ++ndrives; } return(argv); *************** *** 413,420 **** 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)); size = sizeof(total); mib[0] = CTL_VM; --- 384,391 ---- for (hdrcnt = 1;;) { if (!--hdrcnt) printhdr(); ! /* Read new disk statistics */ ! dkreadstats(); kread(X_SUM, &sum, sizeof(sum)); size = sizeof(total); mib[0] = CTL_VM; *************** *** 425,431 **** } (void)printf("%2d%2d%2d", total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw); ! #define pgtok(a) ((a) * sum.v_page_size >> 10) #define rate(x) (((x) + halfuptime) / uptime) /* round */ (void)printf("%6ld%6ld ", pgtok(total.t_avm), pgtok(total.t_free)); --- 396,402 ---- } (void)printf("%2d%2d%2d", total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw); ! #define pgtok(a) ((a) * (sum.v_page_size >> 10)) #define rate(x) (((x) + halfuptime) / uptime) /* round */ (void)printf("%6ld%6ld ", pgtok(total.t_avm), pgtok(total.t_free)); *************** *** 476,493 **** register int i; (void)printf(" procs memory page%*s", 20, ""); ! if (ndrives > 1) ! (void)printf("disks %*s faults cpu\n", ! ndrives * 3 - 6, ""); else ! (void)printf("%*s faults cpu\n", ndrives * 3, ""); ! #ifndef NEWVM ! (void)printf(" r b w avm fre re at pi po fr de sr "); #else (void)printf(" r b w avm fre flt re pi po fr sr "); #endif for (i = 0; i < dk_ndrive; i++) ! if (dr_select[i]) (void)printf("%c%c ", dr_name[i][0], dr_name[i][strlen(dr_name[i]) - 1]); (void)printf(" in sy cs us sy id\n"); --- 447,475 ---- register int i; (void)printf(" procs memory page%*s", 20, ""); ! if (ndrives > 0) ! #ifdef NEWVM ! (void)printf("%s %*sfaults cpu\n", ! ((ndrives > 1) ? "disks" : "disk"), ! #else ! (void)printf("disks %*sfaults cpu\n", ! #endif ! ((ndrives > 1) ? ndrives * 3 - 4 : 0), ""); else ! #ifdef NEWVM ! (void)printf("%*s faults cpu\n", #else + (void)printf("%*s faults cpu\n", + #endif + ndrives * 3, ""); + + #ifdef NEWVM (void)printf(" r b w avm fre flt re pi po fr sr "); + #else + (void)printf(" r b w avm fre re at pi po fr de sr "); #endif for (i = 0; i < dk_ndrive; i++) ! if (dk_select[i]) (void)printf("%c%c ", dr_name[i][0], dr_name[i][strlen(dr_name[i]) - 1]); (void)printf(" in sy cs us sy id\n"); *************** *** 670,694 **** double etime; long tmp; ! for (dn = 0; dn < dk_ndrive; ++dn) { ! tmp = cur.xfer[dn]; ! cur.xfer[dn] -= last.xfer[dn]; ! last.xfer[dn] = tmp; ! } etime = 0; for (state = 0; state < CPUSTATES; ++state) { ! tmp = cur.time[state]; ! cur.time[state] -= last.time[state]; ! last.time[state] = tmp; ! etime += cur.time[state]; } if (etime == 0) etime = 1; etime /= hz; for (dn = 0; dn < dk_ndrive; ++dn) { ! if (!dr_select[dn]) continue; ! (void)printf("%2.0f ", cur.xfer[dn] / etime); } } --- 652,670 ---- double etime; long tmp; ! /* Calculate disk stat deltas. */ ! dkswap(); etime = 0; for (state = 0; state < CPUSTATES; ++state) { ! etime += cur.cp_time[state]; } if (etime == 0) etime = 1; etime /= hz; for (dn = 0; dn < dk_ndrive; ++dn) { ! if (!dk_select[dn]) continue; ! (void)printf("%2.0f ", cur.dk_xfer[dn] / etime); } } *************** *** 700,713 **** total = 0; for (state = 0; state < CPUSTATES; ++state) ! total += cur.time[state]; if (total) pct = 100 / total; else pct = 0; ! (void)printf("%2.0f ", (cur.time[CP_USER] + cur.time[CP_NICE]) * pct); ! (void)printf("%2.0f ", (cur.time[CP_SYS] + cur.time[CP_INTR]) * pct); ! (void)printf("%2.0f", cur.time[CP_IDLE] * pct); } #if defined(pc532) --- 676,689 ---- total = 0; for (state = 0; state < CPUSTATES; ++state) ! total += cur.cp_time[state]; if (total) pct = 100 / total; else pct = 0; ! (void)printf("%2.0f ", (cur.cp_time[CP_USER] + cur.cp_time[CP_NICE]) * pct); ! (void)printf("%2.0f ", (cur.cp_time[CP_SYS] + cur.cp_time[CP_INTR]) * pct); ! (void)printf("%2.0f", cur.cp_time[CP_IDLE] * pct); } #if defined(pc532)