static char sccsid
[] = "@(#)iostat.c 1.5 (Lucasfilm) %G%";
w
= newwin(LINES
- 1 - WBASEROW
, 0, WBASEROW
, WBASECOL
);
static struct nlist nlst
[] = {
static int linesperregion
;
static int numbers
= 0; /* default display bar graphs */
static int msps
= 0; /* default ms/seek shown */
static int dk_select
[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
, dk_mspw
, sizeof (dk_mspw
));
for (i
= 0; i
< DK_NDRIVE
; i
++)
sprintf(dr_name
[i
], "dk%d", i
), ndrives
++;
read_names(nlst
[X_MBDINIT
].n_value
, nlst
[X_UBDINIT
].n_value
);
lseek(kmem
, (long)nlst
[X_HZ
].n_value
, L_SET
);
read(kmem
, &hz
, sizeof hz
);
for (i
= 0; i
< DK_NDRIVE
; i
++)
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); clrtobot();
mvaddstr(row
++, WBASECOL
+ 5,
"/0 /10 /20 /30 /40 /50 /60 /70 /80 /90 /100");
mvaddstr(row
++, 0, "cpu user|");
mvaddstr(row
++, 0, " nice|");
mvaddstr(row
++, 0, " system|");
mvaddstr(row
++, 0, " idle|");
row
= numlabels(row
+ 1);
row
= barlabels(row
+ 1);
#define DRIVESPERLINE ((COLS - WBASECOL) / COLWIDTH)
regions
= howmany(ndrives
, DRIVESPERLINE
);
* Deduct -regions for blank line after each scrolling region.
linesperregion
= (CMDLINE
- row
- regions
) / regions
;
* Minimum region contains space for two
* label lines and one line of statistics.
for (i
= 0; i
< DK_NDRIVE
; i
++)
if (dk_select
[i
] && dk_mspw
[i
] != 0.0) {
if (col
+ COLWIDTH
>= COLS
- WBASECOL
) {
col
= 0, row
+= linesperregion
+ 1;
if (row
> CMDLINE
- (linesperregion
+ 1))
mvwaddstr(wnd
, row
- WBASEROW
, col
+ 4, dr_name
[i
]);
mvwaddstr(wnd
, row
+ 1 - WBASEROW
, col
, "bps tps msps");
row
+= linesperregion
+ 1;
"/0 /5 /10 /15 /20 /25 /30 /35 /40 /45 /50");
linesperregion
= 2 + msps
;
for (i
= 0; i
< DK_NDRIVE
; i
++)
if (dk_select
[i
] && dk_mspw
[i
] != 0.0) {
if (row
> CMDLINE
- linesperregion
)
mvprintw(row
++, 0, "%3.3s bps|", dr_name
[i
]);
mvaddstr(row
++, 0, " tps|");
mvaddstr(row
++, 0, " msps|");
register int i
, row
, col
;
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
++)
if (dk_select
[i
] && dk_mspw
[i
] != 0.0) {
if (row
> CMDLINE
- linesperregion
- WBASEROW
)
row
= stats(row
, 10 - WBASECOL
, i
);
wmove(wnd
, row
+ linesperregion
, 0);
for (i
= 0; i
< DK_NDRIVE
; i
++)
if (dk_select
[i
] && dk_mspw
[i
] != 0.0) {
if (col
+ COLWIDTH
>= COLS
- WBASECOL
) {
col
= 0, row
+= linesperregion
+ 1;
CMDLINE
- (linesperregion
+ 1))
wmove(wnd
, row
+ linesperregion
, 0);
(void) stats(row
+ 3, col
, i
);
double atime
, words
, xtime
, itime
;
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;
mvwprintw(wnd
, row
, col
, "%3.0f%4.0f%5.1f",
words
/ 512 / etime
, s
.dk_xfer
[dn
] / etime
,
s
.dk_seek
[dn
] ? itime
* 1000. / s
.dk_seek
[dn
] : 0.0);
histogram(words
/ 512 / etime
, 50, 1.0);
histogram(s
.dk_xfer
[dn
] / etime
, 50, 1.0);
histogram(s
.dk_seek
[dn
] ? itime
* 1000. / s
.dk_seek
[dn
] : 0,
for (i
= 0; i
< CPUSTATES
; i
++)
histogram(100 * s
.cp_time
[o
] / time
, 50, CPUSCALE
);
histogram(val
, colwidth
, scale
)
register int v
= (int)(val
* scale
) + 0.5;
sprintf(buf
, "%4.1f", val
);
if (prefix(cmd
, "msps")) {
if (prefix(cmd
, "numbers")) {
if (prefix(cmd
, "bars")) {
if (prefix(cmd
, "display")) {
dkselect(args
, 1, dk_select
);
if (prefix(cmd
, "ignore")) {
dkselect(args
, 0, dk_select
);
if (prefix(cmd
, "drives")) {
for (i
= 0; i
< DK_NDRIVE
; i
++)
printw("%s ", dr_name
[i
]);