static char sccsid
[] = "@(#)iostat.c 1.3 (Lucasfilm) %G%";
#include <vaxuba/ubavar.h>
#include <vaxmba/mbavar.h>
#include <sundev/mbvar.h>
w
= newwin(20, 70, 4, 5);
static struct nlist nlst
[] = {
char dr_name
[DK_NDRIVE
][10];
float dk_mspw
[DK_NDRIVE
];
if (nlst
[X_DK_BUSY
].n_type
== 0) {
if (nlst
[X_DK_BUSY
].n_type
== 0) {
error("Disk init information isn't in namelist");
lseek(kmem
, (long)nlst
[X_DK_MSPW
].n_value
, L_SET
);
read(kmem
, s
.dk_mspw
, sizeof s
.dk_mspw
);
for (i
= 0; i
< DK_NDRIVE
; i
++)
sprintf(dr_name
[i
], "dk%d", i
);
lseek(kmem
, (long)nlst
[X_DK_MSPW
].n_value
, L_SET
);
read(kmem
, s
.dk_mspw
, sizeof s
.dk_mspw
);
lseek(kmem
, (long)nlst
[X_HZ
].n_value
, L_SET
);
read(kmem
, &hz
, sizeof hz
);
if (nlst
[X_DK_BUSY
].n_type
== 0)
lseek(kmem
, (long)nlst
[X_DK_BUSY
].n_value
, L_SET
);
read(kmem
, &s
.dk_busy
, sizeof s
.dk_busy
);
lseek(kmem
, (long)nlst
[X_DK_TIME
].n_value
, L_SET
);
read(kmem
, s
.dk_time
, sizeof s
.dk_time
);
lseek(kmem
, (long)nlst
[X_DK_XFER
].n_value
, L_SET
);
read(kmem
, s
.dk_xfer
, sizeof s
.dk_xfer
);
lseek(kmem
, (long)nlst
[X_DK_WDS
].n_value
, L_SET
);
read(kmem
, s
.dk_wds
, sizeof s
.dk_wds
);
lseek(kmem
, (long)nlst
[X_DK_SEEK
].n_value
, L_SET
);
read(kmem
, s
.dk_seek
, sizeof s
.dk_seek
);
lseek(kmem
, (long)nlst
[X_CP_TIME
].n_value
, L_SET
);
read(kmem
, s
.cp_time
, sizeof s
.cp_time
);
if (nlst
[X_DK_BUSY
].n_type
== 0) {
error("No dk_busy defined.");
move(row
, 0); clrtoeol();
"/0 /10 /20 /30 /40 /50 /60 /70 /80 /90 /100");
mvaddstr(row
++, 0, "cpu user|"); clrtoeol();
mvaddstr(row
++, 0, " nice|"); clrtoeol();
mvaddstr(row
++, 0, " system|"); clrtoeol();
mvaddstr(row
++, 0, " idle|"); clrtoeol();
for (i
= 0; i
< DK_NDRIVE
; i
++)
if (s
.dk_mspw
[i
] != 0.0) {
mvprintw(row
++, 0, "%3.3s bps|", dr_name
[i
]);
mvaddstr(row
++, 0, " tps|"); clrtoeol();
mvaddstr(row
++, 0, " mps|"); clrtoeol();
if (nlst
[X_DK_BUSY
].n_type
== 0)
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
);
for(i
= 0; i
< CPUSTATES
; i
++) {
for (i
= 0; i
< CPUSTATES
; i
++)
for (i
= 0; i
< DK_NDRIVE
; i
++)
double atime
, words
, xtime
, itime
;
if (s
.dk_mspw
[dn
] == 0.0) {
wmove(wnd
, row
++, 5); wclrtoeol(wnd
);
wmove(wnd
, row
++, 5); wclrtoeol(wnd
);
wmove(wnd
, row
++, 5); wclrtoeol(wnd
);
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 */
itime
+= xtime
, xtime
= 0;
xtime
+= itime
, itime
= 0;
wmove(wnd
, row
++, 5); histogram(words
/ 512 / etime
, 60, 1.0, 'X');
wmove(wnd
, row
++, 5); histogram(s
.dk_xfer
[dn
] / etime
, 60, 1.0, 'X');
wmove(wnd
, row
++, 5); histogram(s
.dk_seek
[dn
] ?
itime
* 1000. / s
.dk_seek
[dn
] : 0, 60, 1.0, 'X');
for (i
= 0; i
< CPUSTATES
; i
++)
wmove(wnd
, row
, 5); histogram(100*s
.cp_time
[o
] / time
, 60, 0.5, 'X');
histogram(val
, colwidth
, scale
, c
)
register int v
= (int)(val
* scale
) + 0.5;
sprintf(buf
, "%4.1f", val
);
#define steal(where, var) \
lseek(kmem, where, L_SET); read(kmem, &var, sizeof var);
register struct mba_device
*mp
;
char *cp
= (char *) &two_char
;
struct uba_device udev
, *up
;
mp
= (struct mba_device
*) nlst
[X_MBDINIT
].n_value
;
up
= (struct uba_device
*) nlst
[X_UBDINIT
].n_value
;
error("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
);
register struct mb_device
*mp
;
char *cp
= (char *) &two_char
;
mp
= (struct mb_device
*) nlst
[X_MBDINIT
].n_value
;
error("Disk init info not in namelist\n");
if (mdev
.md_dk
< 0 || mdev
.md_alive
== 0)
steal(mdev
.md_driver
, mdrv
);
steal(mdrv
.mdr_dname
, two_char
);
sprintf(dr_name
[mdev
.md_dk
], "%c%c%d",
cp
[0], cp
[1], mdev
.md_unit
);