summaryrefslogtreecommitdiffstats
path: root/usr.bin/systat/iostat.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/systat/iostat.c')
-rw-r--r--usr.bin/systat/iostat.c389
1 files changed, 0 insertions, 389 deletions
diff --git a/usr.bin/systat/iostat.c b/usr.bin/systat/iostat.c
deleted file mode 100644
index b5412a5..0000000
--- a/usr.bin/systat/iostat.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (c) 1980, 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)iostat.c 8.1 (Berkeley) 6/6/93";
-#endif not lint
-
-#include <sys/param.h>
-#include <sys/dkstat.h>
-#include <sys/buf.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <nlist.h>
-#include <paths.h>
-#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 vax
-#define X_MBDINIT (X_CP_TIME+1)
- { "_mbdinit" },
-#define X_UBDINIT (X_CP_TIME+2)
- { "_ubdinit" },
-#endif
-#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));
-static int numlabels __P((int));
-static int stats __P((int, int, int));
-static void stat1 __P((int, int));
-
-
-WINDOW *
-openiostat()
-{
- return (subwin(stdscr, LINES-1-5, 0, 5, 0));
-}
-
-void
-closeiostat(w)
- WINDOW *w;
-{
- if (w == NULL)
- return;
- wclear(w);
- wrefresh(w);
- delwin(w);
-}
-
-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
-
-void
-labeliostat()
-{
- int row;
-
- if (namelist[X_DK_BUSY].n_type == 0) {
- error("No dk_busy defined.");
- return;
- }
- row = 0;
- wmove(wnd, row, 0); wclrtobot(wnd);
- mvwaddstr(wnd, row++, INSET,
- "/0 /10 /20 /30 /40 /50 /60 /70 /80 /90 /100");
- mvwaddstr(wnd, row++, 0, "cpu user|");
- mvwaddstr(wnd, row++, 0, " nice|");
- mvwaddstr(wnd, row++, 0, " system|");
- mvwaddstr(wnd, row++, 0, " idle|");
- if (numbers)
- row = numlabels(row + 1);
- else
- row = barlabels(row + 1);
-}
-
-static int
-numlabels(row)
- int row;
-{
- int i, col, regions, ndrives;
-
-#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);
- /*
- * Deduct -regions for blank line after each scrolling region.
- */
- linesperregion = (wnd->maxy - row - regions) / regions;
- /*
- * Minimum region contains space for two
- * label lines and one line of statistics.
- */
- if (linesperregion < 3)
- 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)
- row += linesperregion + 1;
- return (row);
-}
-
-static int
-barlabels(row)
- int row;
-{
- 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);
-}
-
-
-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;
- etime /= (float) hz;
- row = 1;
-
- /*
- * Last CPU state not calculated yet.
- */
- for (i = 0; i < CPUSTATES - 1; i++)
- stat1(row++, i);
- 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);
- }
- return;
- }
- col = 0;
- wmove(wnd, row + linesperregion, 0);
- wdeleteln(wnd);
- 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))
- break;
- wmove(wnd, row + linesperregion, 0);
- wdeleteln(wnd);
- wmove(wnd, row + 3, 0);
- winsertln(wnd);
- }
- (void) stats(row + 3, col, i);
- col += COLWIDTH;
- }
-}
-
-static int
-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);
-}
-
-static void
-stat1(row, o)
- int row, o;
-{
- register int i;
- double time;
-
- 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
-histogram(val, colwidth, scale)
- double val;
- int colwidth;
- double scale;
-{
- char buf[10];
- register int k;
- register int v = (int)(val * scale) + 0.5;
-
- k = MIN(v, colwidth);
- if (v > colwidth) {
- sprintf(buf, "%4.1f", val);
- k -= strlen(buf);
- while (k--)
- waddch(wnd, 'X');
- waddstr(wnd, buf);
- return;
- }
- while (k--)
- waddch(wnd, 'X');
- wclrtoeol(wnd);
-}
-
-int
-cmdiostat(cmd, args)
- char *cmd, *args;
-{
-
- if (prefix(cmd, "msps"))
- msps = !msps;
- else if (prefix(cmd, "numbers"))
- numbers = 1;
- else if (prefix(cmd, "bars"))
- numbers = 0;
- else if (!dkcmd(cmd, args))
- return (0);
- wclear(wnd);
- labeliostat();
- refresh();
- return (1);
-}
OpenPOWER on IntegriCloud