version 1.28, 2007/05/30 05:20:58 |
version 1.29, 2008/06/12 17:53:49 |
|
|
#include <sys/dkstat.h> |
#include <sys/dkstat.h> |
#include <sys/buf.h> |
#include <sys/buf.h> |
#include <sys/time.h> |
#include <sys/time.h> |
|
#include <sys/sysctl.h> |
|
#include <sys/mount.h> |
|
|
#include <string.h> |
#include <string.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
|
|
|
#include "dkstats.h" |
#include "dkstats.h" |
extern struct _disk cur, last; |
extern struct _disk cur, last; |
|
struct bcachestats bclast, bccur; |
|
|
static double etime; |
static double etime; |
|
|
|
|
#define ATIME(x,y) ((double)x[y].tv_sec + \ |
#define ATIME(x,y) ((double)x[y].tv_sec + \ |
((double)x[y].tv_usec / (double)1000000)) |
((double)x[y].tv_usec / (double)1000000)) |
|
|
#define NFMT "%-8.8s %14.0f %14.0f %10.0f %10.0f %10.1f" |
#define NFMT "%-6.6s %8.0f %8.0f %6.0f %6.0f %4.1f" |
#define SFMT "%-8.8s %14s %14s %10s %10s %10s" |
#define SFMT "%-6.6s %8s %8s %6s %6s %4s" |
|
#define BCSCOL 50 |
|
|
WINDOW * |
WINDOW * |
openiostat(void) |
openiostat(void) |
{ |
{ |
|
bzero(&bccur, sizeof(bccur)); |
return (subwin(stdscr, LINES-1-1, 0, 1, 0)); |
return (subwin(stdscr, LINES-1-1, 0, 1, 0)); |
} |
} |
|
|
|
|
void |
void |
fetchiostat(void) |
fetchiostat(void) |
{ |
{ |
|
int mib[3]; |
|
size_t size; |
|
|
if (cur.dk_ndrive == 0) |
if (cur.dk_ndrive == 0) |
return; |
return; |
dkreadstats(); |
dkreadstats(); |
|
|
|
bclast = bccur; |
|
mib[0] = CTL_VFS; |
|
mib[1] = VFS_GENERIC; |
|
mib[2] = VFS_BCACHESTAT; |
|
size = sizeof(bccur); |
|
if (sysctl(mib, 3, &bccur, &size, NULL, 0) < 0) |
|
mvwaddstr(wnd, 20, 0, "cannot get vfs.bcachestat"); |
|
if (bclast.numbufs == 0) |
|
bclast = bccur; |
} |
} |
|
|
void |
void |
|
|
{ |
{ |
mvwprintw(wnd, 1, 0, SFMT, "Device", "rKBytes", "wKBytes", "rtps", |
mvwprintw(wnd, 1, 0, SFMT, "Device", "rKBytes", "wKBytes", "rtps", |
"wtps", "sec"); |
"wtps", "sec"); |
|
mvwprintw(wnd, 1, BCSCOL + 16, "numbufs"); |
|
mvwprintw(wnd, 2, BCSCOL + 16, "freebufs"); |
|
mvwprintw(wnd, 3, BCSCOL + 16, "numbufpages"); |
|
mvwprintw(wnd, 4, BCSCOL + 16, "numfreepages"); |
|
mvwprintw(wnd, 5, BCSCOL + 16, "numdirtypages"); |
|
mvwprintw(wnd, 6, BCSCOL + 16, "numcleanpages"); |
|
mvwprintw(wnd, 7, BCSCOL + 16, "pendingwrites"); |
|
mvwprintw(wnd, 8, BCSCOL + 16, "pendingreads"); |
|
mvwprintw(wnd, 9, BCSCOL + 16, "numwrites"); |
|
mvwprintw(wnd, 10, BCSCOL + 16, "numreads"); |
|
mvwprintw(wnd, 11, BCSCOL + 16, "cachehits"); |
} |
} |
|
|
void |
void |
|
|
return; |
return; |
|
|
numlabels(); |
numlabels(); |
|
|
|
mvwprintw(wnd, 1, BCSCOL, "%15ld", bccur.numbufs); |
|
mvwprintw(wnd, 2, BCSCOL, "%15ld", bccur.freebufs); |
|
mvwprintw(wnd, 3, BCSCOL, "%15ld", bccur.numbufpages); |
|
if (bccur.numfreepages) |
|
mvwprintw(wnd, 4, BCSCOL, "%15ld", bccur.numfreepages); |
|
else |
|
mvwprintw(wnd, 4, BCSCOL, "%15s", ""); |
|
if (bccur.numdirtypages) |
|
mvwprintw(wnd, 5, BCSCOL, "%15ld", bccur.numdirtypages); |
|
else |
|
mvwprintw(wnd, 5, BCSCOL, "%15s", ""); |
|
if (bccur.numcleanpages) |
|
mvwprintw(wnd, 6, BCSCOL, "%15ld", bccur.numcleanpages); |
|
else |
|
mvwprintw(wnd, 6, BCSCOL, "%15s", ""); |
|
if (bccur.pendingwrites) |
|
mvwprintw(wnd, 7, BCSCOL, "%15ld", bccur.pendingwrites); |
|
else |
|
mvwprintw(wnd, 7, BCSCOL, "%15s", ""); |
|
if (bccur.pendingreads) |
|
mvwprintw(wnd, 8, BCSCOL, "%15ld", bccur.pendingreads); |
|
else |
|
mvwprintw(wnd, 8, BCSCOL, "%15s", ""); |
|
if (bccur.numwrites - bclast.numwrites) |
|
mvwprintw(wnd, 9, BCSCOL, "%15ld", |
|
bccur.numwrites - bclast.numwrites); |
|
else |
|
mvwprintw(wnd, 9, BCSCOL, "%15s", ""); |
|
if (bccur.numreads - bclast.numreads) |
|
mvwprintw(wnd, 10, BCSCOL, "%15ld", |
|
bccur.numreads - bclast.numreads); |
|
else |
|
mvwprintw(wnd, 10, BCSCOL, "%15s", ""); |
|
if (bccur.cachehits - bclast.cachehits) |
|
mvwprintw(wnd, 11, BCSCOL, "%15ld", |
|
bccur.cachehits - bclast.cachehits); |
|
else |
|
mvwprintw(wnd, 11, BCSCOL, "%15s", ""); |
} |
} |
|
|
void |
void |