=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/systat/iostat.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** src/usr.bin/systat/iostat.c 1996/03/27 19:32:54 1.2 --- src/usr.bin/systat/iostat.c 1996/05/22 11:35:34 1.3 *************** *** 1,5 **** ! /* $OpenBSD: iostat.c,v 1.2 1996/03/27 19:32:54 niklas Exp $ */ ! /* $NetBSD: iostat.c,v 1.4 1996/03/15 22:19:25 ragge Exp $ */ /* * Copyright (c) 1980, 1992, 1993 --- 1,4 ---- ! /* $NetBSD: iostat.c,v 1.5 1996/05/10 23:16:35 thorpej Exp $ */ /* * Copyright (c) 1980, 1992, 1993 *************** *** 37,50 **** #ifndef lint #if 0 static char sccsid[] = "@(#)iostat.c 8.1 (Berkeley) 6/6/93"; - static char rcsid[] = "$NetBSD: iostat.c,v 1.4 1996/03/15 22:19:25 ragge Exp $"; #endif ! static char rcsid[] = "$OpenBSD: iostat.c,v 1.2 1996/03/27 19:32:54 niklas Exp $"; #endif not lint #include #include #include #include #include --- 36,49 ---- #ifndef lint #if 0 static char sccsid[] = "@(#)iostat.c 8.1 (Berkeley) 6/6/93"; #endif ! static char rcsid[] = "$NetBSD: iostat.c,v 1.5 1996/05/10 23:16:35 thorpej Exp $"; #endif not lint #include #include #include + #include #include #include *************** *** 53,91 **** #include "systat.h" #include "extern.h" ! static struct nlist namelist[] = { ! #define X_DK_BUSY 0 ! { "_dk_busy" }, ! #define X_DK_TIME 1 ! { "_dk_time" }, ! #define X_DK_XFER 2 ! { "_dk_xfer" }, ! #define X_DK_WDS 3 ! { "_dk_wds" }, ! #define X_DK_SEEK 4 ! { "_dk_seek" }, ! #define X_CP_TIME 5 ! { "_cp_time" }, ! #ifdef tahoe ! #define X_VBDINIT (X_CP_TIME+1) ! { "_vbdinit" }, ! #endif ! { "" }, ! }; - static struct { - int dk_busy; - long cp_time[CPUSTATES]; - long *dk_time; - long *dk_wds; - long *dk_seek; - long *dk_xfer; - } s, s1; - static int linesperregion; static double etime; static int numbers = 0; /* default display bar graphs */ ! static int msps = 0; /* default ms/seek shown */ static int barlabels __P((int)); static void histogram __P((double, int, double)); --- 52,64 ---- #include "systat.h" #include "extern.h" ! #include "dkstats.h" ! extern struct _disk cur; static int linesperregion; static double etime; static int numbers = 0; /* default display bar graphs */ ! static int secs = 0; /* default seconds shown */ static int barlabels __P((int)); static void histogram __P((double, int, double)); *************** *** 114,155 **** int initiostat() { ! if (namelist[X_DK_BUSY].n_type == 0) { ! if (kvm_nlist(kd, namelist)) { ! nlisterr(namelist); ! return(0); ! } ! if (namelist[X_DK_BUSY].n_type == 0) { ! error("Disk init information isn't in namelist"); ! return(0); ! } ! } ! if (! dkinit()) ! return(0); ! if (dk_ndrive) { ! #define allocate(e, t) \ ! s./**/e = (t *)calloc(dk_ndrive, sizeof (t)); \ ! s1./**/e = (t *)calloc(dk_ndrive, sizeof (t)); ! allocate(dk_time, long); ! allocate(dk_wds, long); ! allocate(dk_seek, long); ! allocate(dk_xfer, long); ! #undef allocate ! } ! return(1); } void fetchiostat() { ! if (namelist[X_DK_BUSY].n_type == 0) return; ! NREAD(X_DK_BUSY, &s.dk_busy, LONG); ! NREAD(X_DK_TIME, s.dk_time, dk_ndrive * LONG); ! NREAD(X_DK_XFER, s.dk_xfer, dk_ndrive * LONG); ! NREAD(X_DK_WDS, s.dk_wds, dk_ndrive * LONG); ! NREAD(X_DK_SEEK, s.dk_seek, dk_ndrive * LONG); ! NREAD(X_CP_TIME, s.cp_time, sizeof s.cp_time); } #define INSET 10 --- 87,102 ---- int initiostat() { ! dkinit(1); ! dkreadstats(); } void fetchiostat() { ! if (dk_ndrive == 0) return; ! dkreadstats(); } #define INSET 10 *************** *** 159,166 **** { int row; ! if (namelist[X_DK_BUSY].n_type == 0) { ! error("No dk_busy defined."); return; } row = 0; --- 106,113 ---- { int row; ! if (dk_ndrive == 0) { ! error("No drives defined."); return; } row = 0; *************** *** 187,193 **** #define COLWIDTH 14 #define DRIVESPERLINE ((wnd->maxx - INSET) / COLWIDTH) for (ndrives = 0, i = 0; i < dk_ndrive; i++) ! if (dk_select[i]) ndrives++; regions = howmany(ndrives, DRIVESPERLINE); /* --- 134,140 ---- #define COLWIDTH 14 #define DRIVESPERLINE ((wnd->maxx - INSET) / COLWIDTH) for (ndrives = 0, i = 0; i < dk_ndrive; i++) ! if (cur.dk_select[i]) ndrives++; regions = howmany(ndrives, DRIVESPERLINE); /* *************** *** 202,215 **** linesperregion = 3; col = 0; for (i = 0; i < dk_ndrive; i++) ! if (dk_select[i] && dk_mspw[i] != 0.0) { if (col + COLWIDTH >= wnd->maxx - INSET) { col = 0, row += linesperregion + 1; if (row > wnd->maxy - (linesperregion + 1)) break; } ! mvwaddstr(wnd, row, col + 4, dr_name[i]); ! mvwaddstr(wnd, row + 1, col, "bps tps msps"); col += COLWIDTH; } if (col) --- 149,162 ---- linesperregion = 3; col = 0; for (i = 0; i < dk_ndrive; i++) ! if (cur.dk_select[i] /*&& cur.dk_bytes[i] != 0.0*/) { if (col + COLWIDTH >= wnd->maxx - INSET) { col = 0, row += linesperregion + 1; if (row > wnd->maxy - (linesperregion + 1)) break; } ! mvwaddstr(wnd, row, col + 4, cur.dk_name[i]); ! mvwaddstr(wnd, row + 1, col, "Kps tps sec"); col += COLWIDTH; } if (col) *************** *** 224,239 **** int i; mvwaddstr(wnd, row++, INSET, ! "/0 /5 /10 /15 /20 /25 /30 /35 /40 /45 /50"); ! linesperregion = 2 + msps; for (i = 0; i < dk_ndrive; i++) ! if (dk_select[i] && dk_mspw[i] != 0.0) { if (row > wnd->maxy - linesperregion) break; ! mvwprintw(wnd, row++, 0, "%3.3s bps|", dr_name[i]); mvwaddstr(wnd, row++, 0, " tps|"); ! if (msps) ! mvwaddstr(wnd, row++, 0, " msps|"); } return (row); } --- 171,186 ---- int i; mvwaddstr(wnd, row++, INSET, ! "/0 /10 /20 /30 /40 /50 /60 /70 /80 /90 /100"); ! linesperregion = 2 + secs; for (i = 0; i < dk_ndrive; i++) ! if (cur.dk_select[i] /*&& cur.dk_bytes[i] != 0.0*/) { if (row > wnd->maxy - linesperregion) break; ! mvwprintw(wnd, row++, 0, "%3.3s Kps|", cur.dk_name[i]); mvwaddstr(wnd, row++, 0, " tps|"); ! if (secs) ! mvwaddstr(wnd, row++, 0, " msec|"); } return (row); } *************** *** 242,260 **** void showiostat() { ! register long t; register int i, row, col; ! if (namelist[X_DK_BUSY].n_type == 0) return; ! for (i = 0; i < dk_ndrive; i++) { ! #define X(fld) t = s.fld[i]; s.fld[i] -= s1.fld[i]; s1.fld[i] = t ! X(dk_xfer); X(dk_seek); X(dk_wds); X(dk_time); ! } etime = 0; for(i = 0; i < CPUSTATES; i++) { ! X(cp_time); ! etime += s.cp_time[i]; } if (etime == 0.0) etime = 1.0; --- 189,204 ---- void showiostat() { ! register u_int64_t t; register int i, row, col; ! if (dk_ndrive == 0) return; ! dkswap(); ! etime = 0; for(i = 0; i < CPUSTATES; i++) { ! etime += cur.cp_time[i]; } if (etime == 0.0) etime = 1.0; *************** *** 269,275 **** if (!numbers) { row += 2; for (i = 0; i < dk_ndrive; i++) ! if (dk_select[i] && dk_mspw[i] != 0.0) { if (row > wnd->maxy - linesperregion) break; row = stats(row, INSET, i); --- 213,219 ---- if (!numbers) { row += 2; for (i = 0; i < dk_ndrive; i++) ! if (cur.dk_select[i] /*&& cur.dk_bytes[i] != 0.0*/) { if (row > wnd->maxy - linesperregion) break; row = stats(row, INSET, i); *************** *** 282,288 **** wmove(wnd, row + 3, 0); winsertln(wnd); for (i = 0; i < dk_ndrive; i++) ! if (dk_select[i] && dk_mspw[i] != 0.0) { if (col + COLWIDTH >= wnd->maxx) { col = 0, row += linesperregion + 1; if (row > wnd->maxy - (linesperregion + 1)) --- 226,232 ---- wmove(wnd, row + 3, 0); winsertln(wnd); for (i = 0; i < dk_ndrive; i++) ! if (cur.dk_select[i] /*&& cur.dk_bytes[i] != 0.0*/) { if (col + COLWIDTH >= wnd->maxx) { col = 0, row += linesperregion + 1; if (row > wnd->maxy - (linesperregion + 1)) *************** *** 301,331 **** stats(row, col, dn) int row, col, dn; { ! double atime, words, xtime, itime; ! atime = s.dk_time[dn]; ! atime /= (float) hz; ! words = s.dk_wds[dn]*32.0; /* number of words transferred */ ! xtime = dk_mspw[dn]*words; /* transfer time */ ! itime = atime - xtime; /* time not transferring */ ! if (xtime < 0) ! itime += xtime, xtime = 0; ! if (itime < 0) ! xtime += itime, itime = 0; if (numbers) { mvwprintw(wnd, row, col, "%3.0f%4.0f%5.1f", ! words / 512 / etime, s.dk_xfer[dn] / etime, ! s.dk_seek[dn] ? itime * 1000. / s.dk_seek[dn] : 0.0); return (row); } wmove(wnd, row++, col); ! histogram(words / 512 / etime, 50, 1.0); wmove(wnd, row++, col); ! histogram(s.dk_xfer[dn] / etime, 50, 1.0); ! if (msps) { wmove(wnd, row++, col); ! histogram(s.dk_seek[dn] ? itime * 1000. / s.dk_seek[dn] : 0, ! 50, 1.0); } return (row); } --- 245,270 ---- stats(row, col, dn) int row, col, dn; { ! double atime, words; ! /* time busy in disk activity */ ! atime = (double)cur.dk_time[dn].tv_sec + ! ((double)cur.dk_time[dn].tv_usec / (double)1000000); ! ! words = cur.dk_bytes[dn] / 1024.0; /* # of K transferred */ if (numbers) { mvwprintw(wnd, row, col, "%3.0f%4.0f%5.1f", ! words / etime, cur.dk_xfer[dn] / etime, atime / etime); return (row); } wmove(wnd, row++, col); ! histogram(words / etime, 50, 0.5); wmove(wnd, row++, col); ! histogram(cur.dk_xfer[dn] / etime, 50, 0.5); ! if (secs) { wmove(wnd, row++, col); ! atime *= 1000; /* In milliseconds */ ! histogram(atime / etime, 50, 0.5); } return (row); } *************** *** 339,350 **** time = 0; for (i = 0; i < CPUSTATES; i++) ! time += s.cp_time[i]; if (time == 0.0) time = 1.0; wmove(wnd, row, INSET); #define CPUSCALE 0.5 ! histogram(100.0 * s.cp_time[o] / time, 50, CPUSCALE); } static void --- 278,289 ---- time = 0; for (i = 0; i < CPUSTATES; i++) ! time += cur.cp_time[i]; if (time == 0.0) time = 1.0; wmove(wnd, row, INSET); #define CPUSCALE 0.5 ! histogram(100.0 * cur.cp_time[o] / time, 50, CPUSCALE); } static void *************** *** 364,369 **** --- 303,309 ---- while (k--) waddch(wnd, 'X'); waddstr(wnd, buf); + wclrtoeol(wnd); return; } while (k--) *************** *** 376,383 **** char *cmd, *args; { ! if (prefix(cmd, "msps")) ! msps = !msps; else if (prefix(cmd, "numbers")) numbers = 1; else if (prefix(cmd, "bars")) --- 316,323 ---- char *cmd, *args; { ! if (prefix(cmd, "secs")) ! secs = !secs; else if (prefix(cmd, "numbers")) numbers = 1; else if (prefix(cmd, "bars"))