|
@@ -6,7 +6,7 @@
|
|
|
#include <draw.h>
|
|
|
#include <event.h>
|
|
|
|
|
|
-#define MAXNUM 8 /* maximum number of numbers on data line */
|
|
|
+#define MAXNUM 10 /* maximum number of numbers on data line */
|
|
|
|
|
|
typedef struct Graph Graph;
|
|
|
typedef struct Machine Machine;
|
|
@@ -18,8 +18,8 @@ struct Graph
|
|
|
int *data;
|
|
|
int ndata;
|
|
|
char *label;
|
|
|
- void (*newvalue)(Machine*, long*, long*, int);
|
|
|
- void (*update)(Graph*, long, long);
|
|
|
+ void (*newvalue)(Machine*, ulong*, ulong*, int);
|
|
|
+ void (*update)(Graph*, ulong, ulong);
|
|
|
Machine *mach;
|
|
|
int overflow;
|
|
|
Image *overtmp;
|
|
@@ -42,6 +42,7 @@ enum
|
|
|
TLBpurge,
|
|
|
Load,
|
|
|
Idle,
|
|
|
+ InIntr,
|
|
|
/* /net/ether0/0/stats */
|
|
|
In = 0,
|
|
|
Out,
|
|
@@ -60,14 +61,14 @@ struct Machine
|
|
|
int bitsybatfd;
|
|
|
int disable;
|
|
|
|
|
|
- long devswap[4];
|
|
|
- long devsysstat[9];
|
|
|
- long prevsysstat[9];
|
|
|
+ ulong devswap[4];
|
|
|
+ ulong devsysstat[10];
|
|
|
+ ulong prevsysstat[10];
|
|
|
int nproc;
|
|
|
- long netetherstats[8];
|
|
|
- long prevetherstats[8];
|
|
|
- long batterystats[2];
|
|
|
- long netetherifstats[2];
|
|
|
+ ulong netetherstats[8];
|
|
|
+ ulong prevetherstats[8];
|
|
|
+ ulong batterystats[2];
|
|
|
+ ulong netetherifstats[2];
|
|
|
|
|
|
char buf[1024];
|
|
|
char *bufp;
|
|
@@ -95,81 +96,85 @@ enum
|
|
|
|
|
|
enum Menu2
|
|
|
{
|
|
|
+ Mbattery,
|
|
|
Mcontext,
|
|
|
Mether,
|
|
|
Methererr,
|
|
|
Metherin,
|
|
|
Metherout,
|
|
|
Mfault,
|
|
|
+ Midle,
|
|
|
+ Minintr,
|
|
|
Mintr,
|
|
|
Mload,
|
|
|
- Midle,
|
|
|
Mmem,
|
|
|
Mswap,
|
|
|
Msyscall,
|
|
|
Mtlbmiss,
|
|
|
Mtlbpurge,
|
|
|
- Mbattery,
|
|
|
Msignal,
|
|
|
Nmenu2,
|
|
|
};
|
|
|
|
|
|
char *menu2str[Nmenu2+1] = {
|
|
|
+ "add battery ",
|
|
|
"add context ",
|
|
|
"add ether ",
|
|
|
"add ethererr",
|
|
|
"add etherin ",
|
|
|
"add etherout",
|
|
|
"add fault ",
|
|
|
+ "add idle ",
|
|
|
+ "add inintr ",
|
|
|
"add intr ",
|
|
|
"add load ",
|
|
|
- "add idle ",
|
|
|
"add mem ",
|
|
|
"add swap ",
|
|
|
"add syscall ",
|
|
|
"add tlbmiss ",
|
|
|
"add tlbpurge",
|
|
|
- "add battery ",
|
|
|
"add 802.11b ",
|
|
|
nil,
|
|
|
};
|
|
|
|
|
|
|
|
|
-void contextval(Machine*, long*, long*, int),
|
|
|
- etherval(Machine*, long*, long*, int),
|
|
|
- ethererrval(Machine*, long*, long*, int),
|
|
|
- etherinval(Machine*, long*, long*, int),
|
|
|
- etheroutval(Machine*, long*, long*, int),
|
|
|
- faultval(Machine*, long*, long*, int),
|
|
|
- intrval(Machine*, long*, long*, int),
|
|
|
- loadval(Machine*, long*, long*, int),
|
|
|
- idleval(Machine*, long*, long*, int),
|
|
|
- memval(Machine*, long*, long*, int),
|
|
|
- swapval(Machine*, long*, long*, int),
|
|
|
- syscallval(Machine*, long*, long*, int),
|
|
|
- tlbmissval(Machine*, long*, long*, int),
|
|
|
- tlbpurgeval(Machine*, long*, long*, int),
|
|
|
- batteryval(Machine*, long*, long*, int),
|
|
|
- signalval(Machine*, long*, long*, int);
|
|
|
+void contextval(Machine*, ulong*, ulong*, int),
|
|
|
+ etherval(Machine*, ulong*, ulong*, int),
|
|
|
+ ethererrval(Machine*, ulong*, ulong*, int),
|
|
|
+ etherinval(Machine*, ulong*, ulong*, int),
|
|
|
+ etheroutval(Machine*, ulong*, ulong*, int),
|
|
|
+ faultval(Machine*, ulong*, ulong*, int),
|
|
|
+ intrval(Machine*, ulong*, ulong*, int),
|
|
|
+ inintrval(Machine*, ulong*, ulong*, int),
|
|
|
+ loadval(Machine*, ulong*, ulong*, int),
|
|
|
+ idleval(Machine*, ulong*, ulong*, int),
|
|
|
+ memval(Machine*, ulong*, ulong*, int),
|
|
|
+ swapval(Machine*, ulong*, ulong*, int),
|
|
|
+ syscallval(Machine*, ulong*, ulong*, int),
|
|
|
+ tlbmissval(Machine*, ulong*, ulong*, int),
|
|
|
+ tlbpurgeval(Machine*, ulong*, ulong*, int),
|
|
|
+ batteryval(Machine*, ulong*, ulong*, int),
|
|
|
+ signalval(Machine*, ulong*, ulong*, int);
|
|
|
|
|
|
Menu menu2 = {menu2str, nil};
|
|
|
int present[Nmenu2];
|
|
|
-void (*newvaluefn[Nmenu2])(Machine*, long*, long*, int init) = {
|
|
|
+void (*newvaluefn[Nmenu2])(Machine*, ulong*, ulong*, int init) = {
|
|
|
+ batteryval,
|
|
|
contextval,
|
|
|
etherval,
|
|
|
ethererrval,
|
|
|
etherinval,
|
|
|
etheroutval,
|
|
|
faultval,
|
|
|
+ idleval,
|
|
|
+ inintrval,
|
|
|
intrval,
|
|
|
loadval,
|
|
|
- idleval,
|
|
|
memval,
|
|
|
swapval,
|
|
|
syscallval,
|
|
|
tlbmissval,
|
|
|
tlbpurgeval,
|
|
|
- batteryval,
|
|
|
signalval,
|
|
|
};
|
|
|
|
|
@@ -178,7 +183,7 @@ Graph *graph;
|
|
|
Machine *mach;
|
|
|
Font *mediumfont;
|
|
|
char *mysysname;
|
|
|
-char argchars[] = "8bceEfimlnpstw";
|
|
|
+char argchars[] = "8bceEfiImlnpstw";
|
|
|
int pids[NPROC];
|
|
|
int parity; /* toggled to avoid patterns in textured background */
|
|
|
int nmach;
|
|
@@ -319,7 +324,7 @@ paritypt(int x)
|
|
|
}
|
|
|
|
|
|
Point
|
|
|
-datapoint(Graph *g, int x, long v, long vmax)
|
|
|
+datapoint(Graph *g, int x, ulong v, ulong vmax)
|
|
|
{
|
|
|
Point p;
|
|
|
double y;
|
|
@@ -349,7 +354,7 @@ datapoint(Graph *g, int x, long v, long vmax)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-drawdatum(Graph *g, int x, long prev, long v, long vmax)
|
|
|
+drawdatum(Graph *g, int x, ulong prev, ulong v, ulong vmax)
|
|
|
{
|
|
|
int c;
|
|
|
Point p, q;
|
|
@@ -383,7 +388,7 @@ redraw(Graph *g, int vmax)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-update1(Graph *g, long v, long vmax)
|
|
|
+update1(Graph *g, ulong v, ulong vmax)
|
|
|
{
|
|
|
char buf[32];
|
|
|
int overflow;
|
|
@@ -409,7 +414,7 @@ update1(Graph *g, long v, long vmax)
|
|
|
|
|
|
/* read one line of text from buffer and process integers */
|
|
|
int
|
|
|
-readnums(Machine *m, int n, long *a, int spanlines)
|
|
|
+readnums(Machine *m, int n, ulong *a, int spanlines)
|
|
|
{
|
|
|
int i;
|
|
|
char *p, *ep;
|
|
@@ -426,7 +431,7 @@ readnums(Machine *m, int n, long *a, int spanlines)
|
|
|
p++;
|
|
|
if(p == ep)
|
|
|
break;
|
|
|
- a[i] = strtol(p, &p, 10);
|
|
|
+ a[i] = strtoul(p, &p, 10);
|
|
|
}
|
|
|
if(ep < m->ebufp)
|
|
|
ep++;
|
|
@@ -573,7 +578,7 @@ void
|
|
|
initmach(Machine *m, char *name)
|
|
|
{
|
|
|
int n, fd;
|
|
|
- long a[MAXNUM];
|
|
|
+ ulong a[MAXNUM];
|
|
|
char *p, mpt[256], buf[256];
|
|
|
|
|
|
p = strchr(name, '!');
|
|
@@ -668,7 +673,7 @@ int
|
|
|
needstat(int init)
|
|
|
{
|
|
|
return init | present[Mcontext] | present[Mfault] | present[Mintr] | present[Mload] | present[Midle] |
|
|
|
- present[Msyscall] | present[Mtlbmiss] | present[Mtlbpurge];
|
|
|
+ present[Minintr] | present[Msyscall] | present[Mtlbmiss] | present[Mtlbpurge];
|
|
|
}
|
|
|
|
|
|
|
|
@@ -694,7 +699,7 @@ void
|
|
|
readmach(Machine *m, int init)
|
|
|
{
|
|
|
int n, i;
|
|
|
- long a[8];
|
|
|
+ ulong a[8];
|
|
|
char buf[32];
|
|
|
|
|
|
if(m->remote && (m->disable || setjmp(catchalarm))){
|
|
@@ -741,21 +746,21 @@ readmach(Machine *m, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-memval(Machine *m, long *v, long *vmax, int)
|
|
|
+memval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
{
|
|
|
*v = m->devswap[Mem];
|
|
|
*vmax = m->devswap[Maxmem];
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-swapval(Machine *m, long *v, long *vmax, int)
|
|
|
+swapval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
{
|
|
|
*v = m->devswap[Swap];
|
|
|
*vmax = m->devswap[Maxswap];
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-contextval(Machine *m, long *v, long *vmax, int init)
|
|
|
+contextval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[Context]-m->prevsysstat[Context];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -764,7 +769,7 @@ contextval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-intrval(Machine *m, long *v, long *vmax, int init)
|
|
|
+intrval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[Interrupt]-m->prevsysstat[Interrupt];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -773,7 +778,7 @@ intrval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-syscallval(Machine *m, long *v, long *vmax, int init)
|
|
|
+syscallval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[Syscall]-m->prevsysstat[Syscall];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -782,7 +787,7 @@ syscallval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-faultval(Machine *m, long *v, long *vmax, int init)
|
|
|
+faultval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[Fault]-m->prevsysstat[Fault];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -791,7 +796,7 @@ faultval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-tlbmissval(Machine *m, long *v, long *vmax, int init)
|
|
|
+tlbmissval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[TLBfault]-m->prevsysstat[TLBfault];
|
|
|
*vmax = 10*m->nproc;
|
|
@@ -800,7 +805,7 @@ tlbmissval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-tlbpurgeval(Machine *m, long *v, long *vmax, int init)
|
|
|
+tlbpurgeval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[TLBpurge]-m->prevsysstat[TLBpurge];
|
|
|
*vmax = 10*m->nproc;
|
|
@@ -809,7 +814,7 @@ tlbpurgeval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-loadval(Machine *m, long *v, long *vmax, int init)
|
|
|
+loadval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->devsysstat[Load];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -818,14 +823,21 @@ loadval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-idleval(Machine *m, long *v, long *vmax, int)
|
|
|
+idleval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
{
|
|
|
- *v = m->devsysstat[Idle];
|
|
|
+ *v = m->devsysstat[Idle]/m->nproc;
|
|
|
*vmax = 100;
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-etherval(Machine *m, long *v, long *vmax, int init)
|
|
|
+inintrval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
+{
|
|
|
+ *v = m->devsysstat[InIntr]/m->nproc;
|
|
|
+ *vmax = 100;
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+etherval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->netetherstats[In]-m->prevetherstats[In] + m->netetherstats[Out]-m->prevetherstats[Out];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -834,7 +846,7 @@ etherval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-etherinval(Machine *m, long *v, long *vmax, int init)
|
|
|
+etherinval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->netetherstats[In]-m->prevetherstats[In];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -843,7 +855,7 @@ etherinval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-etheroutval(Machine *m, long *v, long *vmax, int init)
|
|
|
+etheroutval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
*v = m->netetherstats[Out]-m->prevetherstats[Out];
|
|
|
*vmax = 1000*m->nproc;
|
|
@@ -852,7 +864,7 @@ etheroutval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-ethererrval(Machine *m, long *v, long *vmax, int init)
|
|
|
+ethererrval(Machine *m, ulong *v, ulong *vmax, int init)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -865,7 +877,7 @@ ethererrval(Machine *m, long *v, long *vmax, int init)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-batteryval(Machine *m, long *v, long *vmax, int)
|
|
|
+batteryval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
{
|
|
|
*v = m->batterystats[0];
|
|
|
if(m->bitsybatfd >= 0)
|
|
@@ -875,9 +887,9 @@ batteryval(Machine *m, long *v, long *vmax, int)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-signalval(Machine *m, long *v, long *vmax, int)
|
|
|
+signalval(Machine *m, ulong *v, ulong *vmax, int)
|
|
|
{
|
|
|
- long l;
|
|
|
+ ulong l;
|
|
|
|
|
|
*vmax = 1000;
|
|
|
l = m->netetherifstats[0];
|
|
@@ -983,7 +995,7 @@ void
|
|
|
labelstrs(Graph *g, char strs[Nlab][Lablen], int *np)
|
|
|
{
|
|
|
int j;
|
|
|
- long v, vmax;
|
|
|
+ ulong v, vmax;
|
|
|
|
|
|
g->newvalue(g->mach, &v, &vmax, 1);
|
|
|
if(logscale){
|
|
@@ -1022,7 +1034,7 @@ resize(void)
|
|
|
int i, j, k, n, startx, starty, x, y, dx, dy, ly, ondata, maxx, wid, nlab;
|
|
|
Graph *g;
|
|
|
Rectangle machr, r;
|
|
|
- long v, vmax;
|
|
|
+ ulong v, vmax;
|
|
|
char buf[128], labs[Nlab][Lablen];
|
|
|
|
|
|
draw(screen, screen->r, display->white, nil, ZP);
|
|
@@ -1096,9 +1108,9 @@ resize(void)
|
|
|
/* allocate data */
|
|
|
ondata = g->ndata;
|
|
|
g->ndata = Dx(machr)+1; /* may be too many if label will be drawn here; so what? */
|
|
|
- g->data = erealloc(g->data, g->ndata*sizeof(long));
|
|
|
+ g->data = erealloc(g->data, g->ndata*sizeof(ulong));
|
|
|
if(g->ndata > ondata)
|
|
|
- memset(g->data+ondata, 0, (g->ndata-ondata)*sizeof(long));
|
|
|
+ memset(g->data+ondata, 0, (g->ndata-ondata)*sizeof(ulong));
|
|
|
/* set geometry */
|
|
|
g->r = machr;
|
|
|
g->r.min.y = y;
|
|
@@ -1187,7 +1199,7 @@ main(int argc, char *argv[])
|
|
|
{
|
|
|
int i, j;
|
|
|
char *s;
|
|
|
- long v, vmax, nargs;
|
|
|
+ ulong v, vmax, nargs;
|
|
|
char args[100];
|
|
|
int sleeptime = 1000;
|
|
|
|
|
@@ -1267,6 +1279,11 @@ main(int argc, char *argv[])
|
|
|
case 'i':
|
|
|
addgraph(Mintr);
|
|
|
break;
|
|
|
+ case 'I':
|
|
|
+ addgraph(Mload);
|
|
|
+ addgraph(Midle);
|
|
|
+ addgraph(Minintr);
|
|
|
+ break;
|
|
|
case 'l':
|
|
|
addgraph(Mload);
|
|
|
break;
|