|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T i
Length: 3371 (0xd2b) Types: TextFile Names: »io.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec8/mon/io.c«
/* * I O * * Purpose: Read the kernel's I/O statistics and display selected * parameters about terminals and disks. * */ #include "mon.h" double kbps, tps; /* Kbytes/sec and xfers/sec */ int lasty; /* Last disk y location */ /* Temporary Defines - All output should be moved to dispinfo */ #include <curses.h> #define CHARX 37 #define CHARY 5 #define DISKX 55 #define DISKY 2 #define DISKOFF 6 #define DISKWDS DISKOFF #define DISKXFER DISKOFF+4 #define DISKSEEK DISKOFF+8 io() { int y; register i; long t; double tkbps, ttps; /* Totals for all drives */ lseek(kmem, (long)namelist[X_DK_TIME].n_value, 0); read(kmem, s.dk_time, sizeof s.dk_time); lseek(kmem, (long)namelist[X_DK_XFER].n_value, 0); read(kmem, s.dk_xfer, sizeof s.dk_xfer); lseek(kmem, (long)namelist[X_DK_WDS].n_value, 0); read(kmem, s.dk_wds, sizeof s.dk_wds); lseek(kmem, (long)namelist[X_TK_NIN].n_value, 0); read(kmem, &s.tk_nin, sizeof s.tk_nin); lseek(kmem, (long)namelist[X_TK_NOUT].n_value, 0); read(kmem, &s.tk_nout, sizeof s.tk_nout); lseek(kmem, (long)namelist[X_DK_SEEK].n_value, 0); read(kmem, s.dk_seek, sizeof s.dk_seek); lseek(kmem, (long)namelist[X_DK_MSPW].n_value, 0); read(kmem, s.dk_mspw, sizeof s.dk_mspw); lseek(kmem, (long)namelist[X_HZ].n_value, 0); read(kmem, &hz, sizeof hz); 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); } t = s.tk_nin; s.tk_nin -= s1.tk_nin; s1.tk_nin = t; t = s.tk_nout; s.tk_nout -= s1.tk_nout; s1.tk_nout = t; /* output character I/O counts */ mvprintw(CHARY+1,CHARX+4,"%4.0f %5.0f", s.tk_nin/etime, s.tk_nout/etime); /* Display Drive statistics */ tkbps = ttps = 0; for (i=0; i<DK_NDRIVE; i++) { if (stats(i)) { tkbps += kbps; ttps += tps; } } /* Display Totals */ mvprintw(lasty+2, DISKX+DISKOFF, "%4.0f%4.0f", tkbps, ttps); } /* * Display statistics for dk drive number dn. * Returns 1 if totals should be updated. */ stats(dn) { int y; register i; double atime, words, xtime, itime; /* only display info for named (real) devices */ if (!*dr_name[dn]) return(0); y = dn + DISKY+1; lasty = y; if (s.dk_mspw[dn] == 0.0) { mvprintw(y,DISKX+DISKOFF,"%4.0f%4.0f%6.1f ", 0.0, 0.0, 0.0); return(0); } atime = s.dk_time[dn]; atime /= (float) hz; words = s.dk_wds[dn]*32.0; /* number of 16 bit words transferred */ xtime = s.dk_mspw[dn]*words; /* transfer time */ itime = atime - xtime; /* time not transferring (seek time) */ if (xtime < 0) itime += xtime, xtime = 0; if (itime < 0) xtime += itime, itime = 0; /* Avg Kbps, transfers/sec, avg seek time (in msec) */ kbps = words/512/etime; tps = s.dk_xfer[dn]/etime; mvprintw(y,DISKX+DISKWDS,"%4.0f", kbps); mvprintw(y,DISKX+DISKXFER,"%4.0f", tps); mvprintw(y,DISKX+DISKSEEK,"%6.1f ", s.dk_seek[dn] ? itime*1000./s.dk_seek[dn] : 0.0); return(1); /* Update totals */ }