stats: add kernel malloc and kernel draw allocation size graphs

This commit is contained in:
cinap_lenrek 2015-06-16 08:08:42 +02:00
parent 45b79036be
commit 921aa0a6c3
2 changed files with 79 additions and 8 deletions

View file

@ -68,6 +68,12 @@ total pages of active memory.
The graph displays the fraction The graph displays the fraction
of the machine's total memory in use. of the machine's total memory in use.
.TP .TP
.B "k kern
kernel memory allocation size in bytes.
.TP
.B "d draw
draw memory allocation size in bytes.
.TP
.B .B
.B "n etherin,out,err .B "n etherin,out,err
number of packets sent and received per second, and total number of errors, displayed as separate graphs. number of packets sent and received per second, and total number of errors, displayed as separate graphs.

View file

@ -34,6 +34,11 @@ enum
Swap, Swap,
Maxswap, Maxswap,
Kern,
Maxkern,
Draw,
Maxdraw,
/* /dev/sysstats */ /* /dev/sysstats */
Procno = 0, Procno = 0,
Context, Context,
@ -66,7 +71,7 @@ struct Machine
int tempfd; int tempfd;
int disable; int disable;
uvlong devswap[4]; uvlong devswap[8];
uvlong devsysstat[10]; uvlong devsysstat[10];
uvlong prevsysstat[10]; uvlong prevsysstat[10];
int nproc; int nproc;
@ -117,6 +122,8 @@ enum Menu2
Mload, Mload,
Mmem, Mmem,
Mswap, Mswap,
Mkern,
Mdraw,
Msyscall, Msyscall,
Mtlbmiss, Mtlbmiss,
Mtlbpurge, Mtlbpurge,
@ -139,6 +146,8 @@ char *menu2str[Nmenu2+1] = {
"add load ", "add load ",
"add mem ", "add mem ",
"add swap ", "add swap ",
"add kern ",
"add draw ",
"add syscall ", "add syscall ",
"add tlbmiss ", "add tlbmiss ",
"add tlbpurge", "add tlbpurge",
@ -160,6 +169,8 @@ void contextval(Machine*, uvlong*, uvlong*, int),
idleval(Machine*, uvlong*, uvlong*, int), idleval(Machine*, uvlong*, uvlong*, int),
memval(Machine*, uvlong*, uvlong*, int), memval(Machine*, uvlong*, uvlong*, int),
swapval(Machine*, uvlong*, uvlong*, int), swapval(Machine*, uvlong*, uvlong*, int),
kernval(Machine*, uvlong*, uvlong*, int),
drawval(Machine*, uvlong*, uvlong*, int),
syscallval(Machine*, uvlong*, uvlong*, int), syscallval(Machine*, uvlong*, uvlong*, int),
tlbmissval(Machine*, uvlong*, uvlong*, int), tlbmissval(Machine*, uvlong*, uvlong*, int),
tlbpurgeval(Machine*, uvlong*, uvlong*, int), tlbpurgeval(Machine*, uvlong*, uvlong*, int),
@ -183,6 +194,8 @@ void (*newvaluefn[Nmenu2])(Machine*, uvlong*, uvlong*, int init) = {
loadval, loadval,
memval, memval,
swapval, swapval,
kernval,
drawval,
syscallval, syscallval,
tlbmissval, tlbmissval,
tlbpurgeval, tlbpurgeval,
@ -194,7 +207,7 @@ Image *cols[Ncolor][3];
Graph *graph; Graph *graph;
Machine *mach; Machine *mach;
char *mysysname; char *mysysname;
char argchars[] = "8bceEfiImlnpstwz"; char argchars[] = "8bcdeEfiIkmlnpstwz";
int pids[NPROC]; int pids[NPROC];
int parity; /* toggled to avoid patterns in textured background */ int parity; /* toggled to avoid patterns in textured background */
int nmach; int nmach;
@ -599,9 +612,35 @@ readswap(Machine *m, uvlong *a)
a[1] = a[4]; a[1] = a[4];
a[2] = a[5]; a[2] = a[5];
a[3] = a[6]; a[3] = a[6];
a[4] = 0;
a[5] = 0;
if(m->bufp = strstr(m->buf, "kernel malloc")){
while(m->bufp > m->buf && m->bufp[-1] != '\n')
m->bufp--;
a[4] = strtoull(m->bufp, &m->bufp, 10);
while(*m->bufp++ == '/')
a[5] = strtoull(m->bufp, &m->bufp, 10);
}
a[6] = 0;
a[7] = 0;
if(m->bufp = strstr(m->buf, "kernel draw")){
while(m->bufp > m->buf && m->bufp[-1] != '\n')
m->bufp--;
a[6] = strtoull(m->bufp, &m->bufp, 10);
while(*m->bufp++ == '/')
a[7] = strtoull(m->bufp, &m->bufp, 10);
}
return 1; return 1;
} }
return readnums(m, nelem(m->devswap), a, 0);
a[4] = 0;
a[5] = 0;
a[6] = 0;
a[7] = 0;
return readnums(m, 4, a, 0);
} }
char* char*
@ -665,10 +704,6 @@ initmach(Machine *m, char *name)
m->swapfd = open(buf, OREAD); m->swapfd = open(buf, OREAD);
if(loadbuf(m, &m->swapfd) && readswap(m, a)) if(loadbuf(m, &m->swapfd) && readswap(m, a))
memmove(m->devswap, a, sizeof m->devswap); memmove(m->devswap, a, sizeof m->devswap);
else{
m->devswap[Maxswap] = 100;
m->devswap[Maxmem] = 100;
}
snprint(buf, sizeof buf, "%s/dev/sysstat", mpt); snprint(buf, sizeof buf, "%s/dev/sysstat", mpt);
m->statsfd = open(buf, OREAD); m->statsfd = open(buf, OREAD);
@ -726,7 +761,7 @@ alarmed(void *a, char *s)
int int
needswap(int init) needswap(int init)
{ {
return init | present[Mmem] | present[Mswap]; return init | present[Mmem] | present[Mswap] | present[Mkern] | present[Mdraw];
} }
@ -823,6 +858,8 @@ memval(Machine *m, uvlong *v, uvlong *vmax, int)
{ {
*v = m->devswap[Mem]; *v = m->devswap[Mem];
*vmax = m->devswap[Maxmem]; *vmax = m->devswap[Maxmem];
if(*vmax == 0)
*vmax = 1;
} }
void void
@ -830,6 +867,26 @@ swapval(Machine *m, uvlong *v, uvlong *vmax, int)
{ {
*v = m->devswap[Swap]; *v = m->devswap[Swap];
*vmax = m->devswap[Maxswap]; *vmax = m->devswap[Maxswap];
if(*vmax == 0)
*vmax = 1;
}
void
kernval(Machine *m, uvlong *v, uvlong *vmax, int)
{
*v = m->devswap[Kern];
*vmax = m->devswap[Maxkern];
if(*vmax == 0)
*vmax = 1;
}
void
drawval(Machine *m, uvlong *v, uvlong *vmax, int)
{
*v = m->devswap[Draw];
*vmax = m->devswap[Maxdraw];
if(*vmax == 0)
*vmax = 1;
} }
void void
@ -1090,6 +1147,8 @@ labelstrs(Graph *g, char strs[Nlab][Lablen], int *np)
uvlong v, vmax; uvlong v, vmax;
g->newvalue(g->mach, &v, &vmax, 1); g->newvalue(g->mach, &v, &vmax, 1);
if(vmax == 0)
vmax = 1;
if(logscale){ if(logscale){
for(j=1; j<=2; j++) for(j=1; j<=2; j++)
sprint(strs[j-1], "%g", scale*pow(10., j)*(double)vmax/100.); sprint(strs[j-1], "%g", scale*pow(10., j)*(double)vmax/100.);
@ -1404,6 +1463,12 @@ main(int argc, char *argv[])
case 'w': case 'w':
addgraph(Mswap); addgraph(Mswap);
break; break;
case 'k':
addgraph(Mkern);
break;
case 'd':
addgraph(Mdraw);
break;
case 'z': case 'z':
addgraph(Mtemp); addgraph(Mtemp);
break; break;