home *** CD-ROM | disk | FTP | other *** search
- int bflg;
- int dflg;
- int tflg;
- int iflg;
- int aflg;
- int sflg;
- struct
- {
- char name[8];
- int type;
- unsigned value;
- } nl[] = {
- "_dk_busy", 0, 0,
- "_io_info", 0, 0,
- "\0\0\0\0\0\0\0\0", 0, 0
- };
- struct
- {
- int busy;
- long etime[32];
- long numb[3];
- long wds[3];
- long tin;
- long tout;
- } s, s1;
-
- struct iostat {
- int nbuf;
- long nread;
- long nreada;
- long ncache;
- long nwrite;
- long bufcount[50];
- } io_info, io_delta;
- double etime;
-
- int mf;
-
- main(argc, argv)
- char *argv[];
- {
- extern char *ctime();
- register i;
- int iter;
- double f1, f2;
- long t;
-
- nlist("/unix", nl);
- if(nl[0].type == -1) {
- printf("dk_busy not found in /unix namelist\n");
- exit(1);
- }
- mf = open("/dev/kmem", 0);
- if(mf < 0) {
- printf("cannot open /dev/kmem\n");
- exit(1);
- }
- iter = 0;
- while (argc>1&&argv[1][0]=='-') {
- if (argv[1][1]=='d')
- dflg++;
- else if (argv[1][1]=='s')
- sflg++;
- else if (argv[1][1]=='a')
- aflg++;
- else if (argv[1][1]=='t')
- tflg++;
- else if (argv[1][1]=='i')
- iflg++;
- else if (argv[1][1]=='b')
- bflg++;
- argc--;
- argv++;
- }
- if(argc > 2)
- iter = atoi(argv[2]);
- if (!(sflg|iflg)) {
- if(tflg)
- printf(" TTY");
- if (bflg==0)
- printf(" RF RK RP PERCENT\n");
- if(tflg)
- printf(" tin tout");
- if (bflg==0)
- printf(" tpm msps mspt tpm msps mspt tpm msps mspt user nice systm idle\n");
- }
-
- loop:
- lseek(mf, (long)nl[0].value, 0);
- read(mf, (char *)&s, sizeof s);
- for(i=0; i<40; i++) {
- t = s.etime[i];
- s.etime[i] -= s1.etime[i];
- s1.etime[i] = t;
- }
- t = 0;
- for(i=0; i<32; i++)
- t += s.etime[i];
- etime = t;
- if(etime == 0.)
- etime = 1.;
- if (bflg) {
- biostats();
- goto contin;
- }
- if (dflg) {
- long tm;
- time(&tm);
- printf("%s", ctime(&tm));
- }
- if (aflg)
- printf("%.2f minutes total\n", etime/3600);
- if (sflg) {
- stats2(etime);
- goto contin;
- }
- if (iflg) {
- stats3(etime);
- goto contin;
- }
- etime /= 60.;
- if(tflg) {
- f1 = s.tin;
- f2 = s.tout;
- printf("%6.1f", f1/etime);
- printf("%6.1f", f2/etime);
- }
- for(i=0; i<3; i++)
- stats(i);
- for(i=0; i<4; i++)
- stat1(i*8);
- printf("\n");
- contin:
- --iter;
- if(iter)
- if(argc > 1) {
- sleep(atoi(argv[1]));
- goto loop;
- }
- }
-
- /* usec per word for the various disks */
- double xf[] = {
- 16.0, /* RF */
- 11.1, /* RK03/05 */
- 2.48, /* RP06 */
- };
-
- stats(dn)
- {
- register i;
- double f1, f2, f3;
- double f4, f5, f6;
- long t;
-
- t = 0;
- for(i=0; i<32; i++)
- if(i & (1<<dn))
- t += s.etime[i];
- f1 = t;
- f1 = f1/60.;
- f2 = s.numb[dn];
- if(f2 == 0.) {
- printf("%6.0f%6.1f%6.1f", 0.0, 0.0, 0.0);
- return;
- }
- f3 = s.wds[dn];
- f3 = f3*32.;
- f4 = xf[dn];
- f4 = f4*1.0e-6;
- f5 = f1 - f4*f3;
- f6 = f1 - f5;
- printf("%6.0f", f2*60./etime);
- printf("%6.1f", f5*1000./f2);
- printf("%6.1f", f6*1000./f2);
- }
-
- stat1(o)
- {
- register i;
- long t;
- double f1, f2;
-
- t = 0;
- for(i=0; i<32; i++)
- t += s.etime[i];
- f1 = t;
- if(f1 == 0.)
- f1 = 1.;
- t = 0;
- for(i=0; i<8; i++)
- t += s.etime[o+i];
- f2 = t;
- printf("%6.2f", f2*100./f1);
- }
-
- stats2(t)
- double t;
- {
- register i, j;
-
- for (i=0; i<4; i++) {
- for (j=0; j<8; j++)
- printf("%6.2f\n", s.etime[8*i+j]/(t/100));
- printf("\n");
- }
- }
-
- stats3(t)
- double t;
- {
- register i;
- double sum;
-
- t /= 100;
- printf("%6.2f idle\n", s.etime[24]/t);
- sum = 0;
- for (i=0; i<8; i++)
- sum += s.etime[i];
- printf("%6.2f user\n", sum/t);
- sum = 0;
- for (i=0; i<8; i++)
- sum += s.etime[8+i];
- printf("%6.2f nice\n", sum/t);
- sum = 0;
- for (i=0; i<8; i++)
- sum += s.etime[16+i];
- printf("%6.2f system\n", sum/t);
- sum = 0;
- for (i=1; i<8; i++)
- sum += s.etime[24+i];
- printf("%6.2f IO wait\n", sum/t);
- sum = 0;
- for (i=1; i<8; i++)
- sum += s.etime[i]+s.etime[i+8]+s.etime[i+16]+s.etime[i+24];
- printf("%6.2f IO active\n", sum/t);
- sum = 0;
- for (i=0; i<32; i++)
- if (i&01)
- sum += s.etime[i];
- printf("%6.2f RF active\n", sum/t);
- sum = 0;
- for (i=0; i<32; i++)
- if (i&02)
- sum += s.etime[i];
- printf("%6.2f RK active\n", sum/t);
- sum = 0;
- for (i=0; i<32; i++)
- if (i&04)
- sum += s.etime[i];
- printf("%6.2f RP active\n", sum/t);
- }
-
- biostats()
- {
- register i;
-
- lseek(mf,(long)nl[1].value, 0);
- read(mf, (char *)&io_info, sizeof(io_info));
- printf("%D\t%D\t%D\t%D\n",
- io_info.nread-io_delta.nread, io_info.nreada-io_delta.nreada,
- io_info.ncache-io_delta.ncache, io_info.nwrite-io_delta.nwrite);
-
- for(i=0; i<30; ) {
- printf("%D\t",(long)io_info.bufcount[i]-io_delta.bufcount[i]);
- i++;
- if (i % 10 == 0)
- printf("\n");
- }
- io_delta = io_info;
- }
-