1: int bflg;
   2: int dflg;
   3: int tflg;
   4: int iflg;
   5: int aflg;
   6: int sflg;
   7: struct
   8: {
   9:     char    name[8];
  10:     int type;
  11:     unsigned    value;
  12: } nl[] = {
  13:     "_dk_busy", 0, 0,
  14:     "_io_info", 0, 0,
  15:     "\0\0\0\0\0\0\0\0", 0, 0
  16: };
  17: struct
  18: {
  19:     int busy;
  20:     long    etime[32];
  21:     long    numb[3];
  22:     long    wds[3];
  23:     long    tin;
  24:     long    tout;
  25: } s, s1;
  26: 
  27: struct iostat {
  28:     int nbuf;
  29:     long    nread;
  30:     long    nreada;
  31:     long    ncache;
  32:     long    nwrite;
  33:     long    bufcount[50];
  34: } io_info, io_delta;
  35: double  etime;
  36: 
  37: int mf;
  38: 
  39: main(argc, argv)
  40: char *argv[];
  41: {
  42:     extern char *ctime();
  43:     register  i;
  44:     int iter;
  45:     double f1, f2;
  46:     long t;
  47: 
  48:     nlist("/unix", nl);
  49:     if(nl[0].type == -1) {
  50:         printf("dk_busy not found in /unix namelist\n");
  51:         exit(1);
  52:     }
  53:     mf = open("/dev/kmem", 0);
  54:     if(mf < 0) {
  55:         printf("cannot open /dev/kmem\n");
  56:         exit(1);
  57:     }
  58:     iter = 0;
  59:     while (argc>1&&argv[1][0]=='-') {
  60:         if (argv[1][1]=='d')
  61:             dflg++;
  62:         else if (argv[1][1]=='s')
  63:             sflg++;
  64:         else if (argv[1][1]=='a')
  65:             aflg++;
  66:         else if (argv[1][1]=='t')
  67:             tflg++;
  68:         else if (argv[1][1]=='i')
  69:             iflg++;
  70:         else if (argv[1][1]=='b')
  71:             bflg++;
  72:         argc--;
  73:         argv++;
  74:     }
  75:     if(argc > 2)
  76:         iter = atoi(argv[2]);
  77:     if (!(sflg|iflg)) {
  78:     if(tflg)
  79:         printf("         TTY");
  80:     if (bflg==0)
  81:     printf("   RF                RK                RP                  PERCENT\n");
  82:     if(tflg)
  83:         printf("   tin  tout");
  84:     if (bflg==0)
  85:     printf("   tpm  msps  mspt   tpm  msps  mspt   tpm  msps  mspt  user  nice systm  idle\n");
  86:     }
  87: 
  88: loop:
  89:     lseek(mf, (long)nl[0].value, 0);
  90:     read(mf, (char *)&s, sizeof s);
  91:     for(i=0; i<40; i++) {
  92:         t = s.etime[i];
  93:         s.etime[i] -= s1.etime[i];
  94:         s1.etime[i] = t;
  95:     }
  96:     t = 0;
  97:     for(i=0; i<32; i++)
  98:         t += s.etime[i];
  99:     etime = t;
 100:     if(etime == 0.)
 101:         etime = 1.;
 102:     if (bflg) {
 103:         biostats();
 104:         goto contin;
 105:     }
 106:     if (dflg) {
 107:         long tm;
 108:         time(&tm);
 109:         printf("%s", ctime(&tm));
 110:     }
 111:     if (aflg)
 112:         printf("%.2f minutes total\n", etime/3600);
 113:     if (sflg) {
 114:         stats2(etime);
 115:         goto contin;
 116:     }
 117:     if (iflg) {
 118:         stats3(etime);
 119:         goto contin;
 120:     }
 121:     etime /= 60.;
 122:     if(tflg) {
 123:         f1 = s.tin;
 124:         f2 = s.tout;
 125:         printf("%6.1f", f1/etime);
 126:         printf("%6.1f", f2/etime);
 127:     }
 128:     for(i=0; i<3; i++)
 129:         stats(i);
 130:     for(i=0; i<4; i++)
 131:         stat1(i*8);
 132:     printf("\n");
 133: contin:
 134:     --iter;
 135:     if(iter)
 136:     if(argc > 1) {
 137:         sleep(atoi(argv[1]));
 138:         goto loop;
 139:     }
 140: }
 141: 
 142: /* usec per word for the various disks */
 143: double  xf[] = {
 144:     16.0,   /* RF */
 145:     11.1,   /* RK03/05 */
 146:     2.48,   /* RP06 */
 147: };
 148: 
 149: stats(dn)
 150: {
 151:     register i;
 152:     double f1, f2, f3;
 153:     double f4, f5, f6;
 154:     long t;
 155: 
 156:     t = 0;
 157:     for(i=0; i<32; i++)
 158:         if(i & (1<<dn))
 159:             t += s.etime[i];
 160:     f1 = t;
 161:     f1 = f1/60.;
 162:     f2 = s.numb[dn];
 163:     if(f2 == 0.) {
 164:         printf("%6.0f%6.1f%6.1f", 0.0, 0.0, 0.0);
 165:         return;
 166:     }
 167:     f3 = s.wds[dn];
 168:     f3 = f3*32.;
 169:     f4 = xf[dn];
 170:     f4 = f4*1.0e-6;
 171:     f5 = f1 - f4*f3;
 172:     f6 = f1 - f5;
 173:     printf("%6.0f", f2*60./etime);
 174:     printf("%6.1f", f5*1000./f2);
 175:     printf("%6.1f", f6*1000./f2);
 176: }
 177: 
 178: stat1(o)
 179: {
 180:     register i;
 181:     long t;
 182:     double f1, f2;
 183: 
 184:     t = 0;
 185:     for(i=0; i<32; i++)
 186:         t += s.etime[i];
 187:     f1 = t;
 188:     if(f1 == 0.)
 189:         f1 = 1.;
 190:     t = 0;
 191:     for(i=0; i<8; i++)
 192:         t += s.etime[o+i];
 193:     f2 = t;
 194:     printf("%6.2f", f2*100./f1);
 195: }
 196: 
 197: stats2(t)
 198: double t;
 199: {
 200:     register i, j;
 201: 
 202:     for (i=0; i<4; i++) {
 203:         for (j=0; j<8; j++)
 204:             printf("%6.2f\n", s.etime[8*i+j]/(t/100));
 205:         printf("\n");
 206:     }
 207: }
 208: 
 209: stats3(t)
 210: double t;
 211: {
 212:     register i;
 213:     double sum;
 214: 
 215:     t /= 100;
 216:     printf("%6.2f idle\n", s.etime[24]/t);
 217:     sum = 0;
 218:     for (i=0; i<8; i++)
 219:         sum += s.etime[i];
 220:     printf("%6.2f user\n", sum/t);
 221:     sum = 0;
 222:     for (i=0; i<8; i++)
 223:         sum += s.etime[8+i];
 224:     printf("%6.2f nice\n", sum/t);
 225:     sum = 0;
 226:     for (i=0; i<8; i++)
 227:         sum += s.etime[16+i];
 228:     printf("%6.2f system\n", sum/t);
 229:     sum = 0;
 230:     for (i=1; i<8; i++)
 231:         sum += s.etime[24+i];
 232:     printf("%6.2f IO wait\n", sum/t);
 233:     sum = 0;
 234:     for (i=1; i<8; i++)
 235:         sum += s.etime[i]+s.etime[i+8]+s.etime[i+16]+s.etime[i+24];
 236:     printf("%6.2f IO active\n", sum/t);
 237:     sum = 0;
 238:     for (i=0; i<32; i++)
 239:         if (i&01)
 240:             sum += s.etime[i];
 241:     printf("%6.2f RF active\n", sum/t);
 242:     sum = 0;
 243:     for (i=0; i<32; i++)
 244:         if (i&02)
 245:             sum += s.etime[i];
 246:     printf("%6.2f RK active\n", sum/t);
 247:     sum = 0;
 248:     for (i=0; i<32; i++)
 249:         if (i&04)
 250:             sum += s.etime[i];
 251:     printf("%6.2f RP active\n", sum/t);
 252: }
 253: 
 254: biostats()
 255: {
 256: register i;
 257: 
 258:     lseek(mf,(long)nl[1].value, 0);
 259:     read(mf, (char *)&io_info, sizeof(io_info));
 260:     printf("%D\t%D\t%D\t%D\n",
 261:      io_info.nread-io_delta.nread, io_info.nreada-io_delta.nreada,
 262:      io_info.ncache-io_delta.ncache, io_info.nwrite-io_delta.nwrite);
 263: 
 264:     for(i=0; i<30; ) {
 265:         printf("%D\t",(long)io_info.bufcount[i]-io_delta.bufcount[i]);
 266:         i++;
 267:         if (i % 10 == 0)
 268:             printf("\n");
 269:     }
 270:     io_delta = io_info;
 271: }

Defined functions

biostats defined in line 254; used 1 times
main defined in line 39; never used
stat1 defined in line 178; used 1 times
stats defined in line 149; used 1 times
stats2 defined in line 197; used 1 times
stats3 defined in line 209; used 1 times

Defined variables

aflg defined in line 5; used 2 times
bflg defined in line 1; used 4 times
dflg defined in line 2; used 2 times
etime defined in line 35; used 32 times
iflg defined in line 4; used 3 times
io_delta defined in line 34; used 6 times
io_info defined in line 34; used 8 times
mf defined in line 37; used 6 times
sflg defined in line 6; used 3 times
tflg defined in line 3; used 4 times
xf defined in line 143; used 1 times

Defined struct's

iostat defined in line 27; never used
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 780
Valid CSS Valid XHTML 1.0 Strict