static char *sccsid
= "@(#)iostat.c 4.6 (Berkeley) 81/04/21";
char dr_name
[DK_NDRIVE
][10];
float dk_mspw
[DK_NDRIVE
];
if(nl
[X_DK_BUSY
].n_type
== 0) {
printf("dk_busy not found in /vmunix namelist\n");
mf
= open("/dev/kmem", 0);
printf("cannot open /dev/kmem\n");
while (argc
>1&&argv
[1][0]=='-') {
lseek(mf
, (long)nl
[X_DK_MSPW
].n_value
, 0);
read(mf
, s
.dk_mspw
, sizeof s
.dk_mspw
);
for (i
= 0; i
< DK_NDRIVE
; i
++)
sprintf(dr_name
[i
], "dk%d", i
);
for (i
= 0; i
< DK_NDRIVE
; i
++)
printf(" %3.3s ", dr_name
[i
]);
for (i
= 0; i
< DK_NDRIVE
; i
++)
printf(" sps tps msps ");
printf(" us ni sy id\n");
lseek(mf
, (long)nl
[X_DK_BUSY
].n_value
, 0);
read(mf
, &s
.dk_busy
, sizeof s
.dk_busy
);
lseek(mf
, (long)nl
[X_DK_TIME
].n_value
, 0);
read(mf
, s
.dk_time
, sizeof s
.dk_time
);
lseek(mf
, (long)nl
[X_DK_XFER
].n_value
, 0);
read(mf
, s
.dk_xfer
, sizeof s
.dk_xfer
);
lseek(mf
, (long)nl
[X_DK_WDS
].n_value
, 0);
read(mf
, s
.dk_wds
, sizeof s
.dk_wds
);
lseek(mf
, (long)nl
[X_TK_NIN
].n_value
, 0);
read(mf
, &s
.tk_nin
, sizeof s
.tk_nin
);
lseek(mf
, (long)nl
[X_TK_NOUT
].n_value
, 0);
read(mf
, &s
.tk_nout
, sizeof s
.tk_nout
);
lseek(mf
, (long)nl
[X_DK_SEEK
].n_value
, 0);
read(mf
, s
.dk_seek
, sizeof s
.dk_seek
);
lseek(mf
, (long)nl
[X_CP_TIME
].n_value
, 0);
read(mf
, s
.cp_time
, sizeof s
.cp_time
);
lseek(mf
, (long)nl
[X_DK_MSPW
].n_value
, 0);
read(mf
, s
.dk_mspw
, sizeof s
.dk_mspw
);
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
;
for(i
=0; i
<CPUSTATES
; i
++) {
printf("%4.0f%5.0f", s
.tk_nin
/etime
, s
.tk_nout
/etime
);
for (i
=0; i
<DK_NDRIVE
; i
++)
for (i
=0; i
<CPUSTATES
; i
++)
double atime
, words
, xtime
, itime
;
if (s
.dk_mspw
[dn
] == 0.0) {
printf("%4.0f%4.0f%5.1f ", 0.0, 0.0, 0.0);
words
= s
.dk_wds
[dn
]*32.0; /* number of words transferred */
xtime
= s
.dk_mspw
[dn
]*words
; /* transfer time */
itime
= atime
- xtime
; /* time not transferring */
printf("\ndn %d, words %8.2f, atime %6.2f, xtime %6.2f, itime %6.2f\n",
dn, words, atime, xtime, itime);
itime
+= xtime
, xtime
= 0;
xtime
+= itime
, itime
= 0;
printf("%4.0f", s
.dk_seek
[dn
]/etime
);
printf("%4.0f", s
.dk_xfer
[dn
]/etime
);
s
.dk_seek
[dn
] ? itime
*1000./s
.dk_seek
[dn
] : 0.0);
s.dk_xfer[dn] ? xtime*1000./s.dk_xfer[dn] : 0.0);
for(i
=0; i
<CPUSTATES
; i
++)
printf("%3.0f", 100*s
.cp_time
[o
]/time
);
* Read the drive names out of kmem.
* ARGH ARGH ARGH ARGH !!!!!!!!!!!!
#define steal(where, var) lseek(mf, where, 0); read(mf, &var, sizeof var);
register struct mba_device
*mp
;
char *cp
= (char *) &two_char
;
struct uba_device udev
, *up
;
mp
= (struct mba_device
*) nl
[X_MBDINIT
].n_value
;
up
= (struct uba_device
*) nl
[X_UBDINIT
].n_value
;
fprintf(stderr
, "iostat: Disk init info not in namelist\n");
if (mdev
.mi_dk
< 0 || mdev
.mi_alive
== 0)
steal(mdev
.mi_driver
, mdrv
);
steal(mdrv
.md_dname
, two_char
);
sprintf(dr_name
[mdev
.mi_dk
], "%c%c%d", cp
[0], cp
[1], mdev
.mi_unit
);
if (udev
.ui_dk
< 0 || udev
.ui_alive
== 0)
steal(udev
.ui_driver
, udrv
);
steal(udrv
.ud_dname
, two_char
);
sprintf(dr_name
[udev
.ui_dk
], "%c%c%d", cp
[0], cp
[1], udev
.ui_unit
);