3076bd2f50dc50947ffd198b3309a3b561be3cfe
static char *sccsid
= "@(#)iostat.c 4.15 (Berkeley) 87/01/12";
#define X_MBDINIT (X_DK_NDRIVE+1)
#define X_UBDINIT (X_DK_NDRIVE+2)
#define X_VBDINIT (X_DK_NDRIVE+1)
char *defdrives
[] = { "hp0", "hp1", "hp2", 0 };
char *defdrives
[] = { 0 };
char *arg
, **cp
, name
[6], buf
[BUFSIZ
];
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");
for (argc
--, argv
++; argc
> 0 && argv
[0][0] == '-'; argc
--, argv
++)
if (nl
[X_DK_NDRIVE
].n_value
== 0) {
printf("dk_ndrive undefined in system\n");
lseek(mf
, nl
[X_DK_NDRIVE
].n_value
, L_SET
);
read(mf
, &dk_ndrive
, sizeof (dk_ndrive
));
printf("dk_ndrive %d\n", dk_ndrive
);
dr_select
= (int *)calloc(dk_ndrive
, sizeof (int));
dr_name
= (char **)calloc(dk_ndrive
, sizeof (char *));
dk_mspw
= (float *)calloc(dk_ndrive
, sizeof (float));
s./**/e = (t *)calloc(dk_ndrive, sizeof (t)); \
s1./**/e = (t *)calloc(dk_ndrive, sizeof (t));
for (arg
= buf
, i
= 0; i
< dk_ndrive
; i
++) {
sprintf(dr_name
[i
], "dk%d", i
);
arg
+= strlen(dr_name
[i
]) + 1;
lseek(mf
, (long)nl
[X_HZ
].n_value
, L_SET
);
read(mf
, &hz
, sizeof hz
);
lseek(mf
, (long)nl
[X_PHZ
].n_value
, L_SET
);
read(mf
, &phz
, sizeof phz
);
lseek(mf
, (long)nl
[X_DK_MSPW
].n_value
, L_SET
);
read(mf
, dk_mspw
, dk_ndrive
*sizeof (dk_mspw
));
* Choose drives to be displayed. Priority
* goes to (in order) drives supplied as arguments,
* default drives. If everything isn't filled
* in and there are drives not taken care of,
* display the first few that fit.
while (argc
> 0 && !isdigit(argv
[0][0])) {
for (i
= 0; i
< dk_ndrive
; i
++) {
if (strcmp(dr_name
[i
], argv
[0]))
for (i
= 0; i
< dk_ndrive
&& ndrives
< 4; i
++) {
if (dr_select
[i
] || dk_mspw
[i
] == 0.0)
for (cp
= defdrives
; *cp
; cp
++)
if (strcmp(dr_name
[i
], *cp
) == 0) {
for (i
= 0; i
< dk_ndrive
&& ndrives
< 4; i
++) {
signal(SIGCONT
, printhdr
);
lseek(mf
, (long)nl
[X_DK_BUSY
].n_value
, L_SET
);
read(mf
, &s
.dk_busy
, sizeof s
.dk_busy
);
lseek(mf
, (long)nl
[X_DK_TIME
].n_value
, L_SET
);
read(mf
, s
.dk_time
, dk_ndrive
*sizeof (long));
lseek(mf
, (long)nl
[X_DK_XFER
].n_value
, L_SET
);
read(mf
, s
.dk_xfer
, dk_ndrive
*sizeof (long));
lseek(mf
, (long)nl
[X_DK_WDS
].n_value
, L_SET
);
read(mf
, s
.dk_wds
, dk_ndrive
*sizeof (long));
lseek(mf
, (long)nl
[X_DK_SEEK
].n_value
, L_SET
);
read(mf
, s
.dk_seek
, dk_ndrive
*sizeof (long));
lseek(mf
, (long)nl
[X_TK_NIN
].n_value
, L_SET
);
read(mf
, &s
.tk_nin
, sizeof s
.tk_nin
);
lseek(mf
, (long)nl
[X_TK_NOUT
].n_value
, L_SET
);
read(mf
, &s
.tk_nout
, sizeof s
.tk_nout
);
lseek(mf
, (long)nl
[X_CP_TIME
].n_value
, L_SET
);
read(mf
, s
.cp_time
, sizeof s
.cp_time
);
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
++)
if (--iter
&& argc
> 0) {
for (i
= 0; i
< dk_ndrive
; i
++)
printf(" %3.3s ", dr_name
[i
]);
for (i
= 0; i
< dk_ndrive
; i
++)
printf(" bps tps msps ");
printf(" us ni sy id\n");
double atime
, words
, xtime
, itime
;
if (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
= dk_mspw
[dn
]*words
; /* transfer time */
itime
= atime
- xtime
; /* time not transferring */
itime
+= xtime
, xtime
= 0;
xtime
+= itime
, itime
= 0;
printf("%4.0f", words
/512/etime
);
printf("%4.0f", s
.dk_xfer
[dn
]/etime
);
s
.dk_seek
[dn
] ? itime
*1000./s
.dk_seek
[dn
] : 0.0);
for(i
=0; i
<CPUSTATES
; i
++)
printf("%3.0f", 100.*s
.cp_time
[o
]/time
);
#define steal(where, var) \
lseek(mf, where, L_SET); read(mf, &var, sizeof var);
#include <vaxuba/ubavar.h>
#include <vaxmba/mbavar.h>
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
);
#include <tahoevba/vbavar.h>
* Read the drive names out of kmem.
struct vba_device udev
, *up
;
char *cp
= (char *)&two_char
;
up
= (struct vba_device
*) nl
[X_VBDINIT
].n_value
;
fprintf(stderr
, "vmstat: Disk init info not in namelist\n");
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
);