summaryrefslogtreecommitdiff
path: root/sys/src/cmd/stats.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-01-05 00:52:14 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2018-01-05 00:52:14 +0100
commitb437065950b5d0234358fcfe8495f6bdb0bf3003 (patch)
treedbed53ff75256bc401b50cd3b18ad14b321d10c4 /sys/src/cmd/stats.c
parentd3e54ff2d9039c67f6fe7d99349e1c83b696b7ae (diff)
stats: show amount of reclaimable pages (add -r flag)
reclaimable pages are user pages that are used for caches like the image cache, mount cache and swap cache.
Diffstat (limited to 'sys/src/cmd/stats.c')
-rw-r--r--sys/src/cmd/stats.c76
1 files changed, 55 insertions, 21 deletions
diff --git a/sys/src/cmd/stats.c b/sys/src/cmd/stats.c
index 09ef62c63..dfb71a1cd 100644
--- a/sys/src/cmd/stats.c
+++ b/sys/src/cmd/stats.c
@@ -26,12 +26,13 @@ struct Graph
enum
{
- /* old /dev/swap */
+ /* /dev/swap */
Mem = 0,
Maxmem,
Swap,
Maxswap,
-
+ Reclaim,
+ Maxreclaim,
Kern,
Maxkern,
Draw,
@@ -48,6 +49,7 @@ enum
Load,
Idle,
InIntr,
+
/* /net/ether0/stats */
In = 0,
Link,
@@ -69,7 +71,7 @@ struct Machine
int tempfd;
int disable;
- uvlong devswap[8];
+ uvlong devswap[10];
uvlong devsysstat[10];
uvlong prevsysstat[10];
int nproc;
@@ -120,6 +122,7 @@ enum Menu2
Mload,
Mmem,
Mswap,
+ Mreclaim,
Mkern,
Mdraw,
Msyscall,
@@ -144,6 +147,7 @@ char *menu2str[Nmenu2+1] = {
"add load ",
"add mem ",
"add swap ",
+ "add reclaim ",
"add kern ",
"add draw ",
"add syscall ",
@@ -167,6 +171,7 @@ void contextval(Machine*, uvlong*, uvlong*, int),
idleval(Machine*, uvlong*, uvlong*, int),
memval(Machine*, uvlong*, uvlong*, int),
swapval(Machine*, uvlong*, uvlong*, int),
+ reclaimval(Machine*, uvlong*, uvlong*, int),
kernval(Machine*, uvlong*, uvlong*, int),
drawval(Machine*, uvlong*, uvlong*, int),
syscallval(Machine*, uvlong*, uvlong*, int),
@@ -192,6 +197,7 @@ void (*newvaluefn[Nmenu2])(Machine*, uvlong*, uvlong*, int init) = {
loadval,
memval,
swapval,
+ reclaimval,
kernval,
drawval,
syscallval,
@@ -205,7 +211,7 @@ Image *cols[Ncolor][3];
Graph *graph;
Machine *mach;
char *mysysname;
-char argchars[] = "8bcdeEfiIkmlnpstwz";
+char argchars[] = "8bcdeEfiIkmlnprstwz";
int pids[NPROC];
int parity; /* toggled to avoid patterns in textured background */
int nmach;
@@ -465,42 +471,58 @@ readnums(Machine *m, int n, uvlong *a, int spanlines)
int
readswap(Machine *m, uvlong *a)
{
+ static int xxx = 0;
+
if(strstr(m->buf, "memory\n")){
/* new /dev/swap - skip first 3 numbers */
if(!readnums(m, 7, a, 1))
return 0;
- a[0] = a[3];
- a[1] = a[4];
- a[2] = a[5];
- a[3] = a[6];
- a[4] = 0;
- a[5] = 0;
+ a[Mem] = a[3];
+ a[Maxmem] = a[4];
+ a[Swap] = a[5];
+ a[Maxswap] = a[6];
+
+ a[Reclaim] = 0;
+ a[Maxreclaim] = 0;
+ if(m->bufp = strstr(m->buf, "reclaim")){
+ while(m->bufp > m->buf && m->bufp[-1] != '\n')
+ m->bufp--;
+ a[Reclaim] = strtoull(m->bufp, &m->bufp, 10);
+ while(*m->bufp++ == '/')
+ a[Maxreclaim] = strtoull(m->bufp, &m->bufp, 10);
+ }
+
+ a[Kern] = 0;
+ a[Maxkern] = 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);
+ a[Kern] = strtoull(m->bufp, &m->bufp, 10);
while(*m->bufp++ == '/')
- a[5] = strtoull(m->bufp, &m->bufp, 10);
+ a[Maxkern] = strtoull(m->bufp, &m->bufp, 10);
}
- a[6] = 0;
- a[7] = 0;
+ a[Draw] = 0;
+ a[Maxdraw] = 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);
+ a[Draw] = strtoull(m->bufp, &m->bufp, 10);
while(*m->bufp++ == '/')
- a[7] = strtoull(m->bufp, &m->bufp, 10);
+ a[Maxdraw] = strtoull(m->bufp, &m->bufp, 10);
}
return 1;
}
- a[4] = 0;
- a[5] = 0;
- a[6] = 0;
- a[7] = 0;
+ a[Reclaim] = 0;
+ a[Maxreclaim] = 0;
+ a[Kern] = 0;
+ a[Maxkern] = 0;
+ a[Draw] = 0;
+ a[Maxdraw] = 0;
+
return readnums(m, 4, a, 0);
}
@@ -636,7 +658,7 @@ alarmed(void *a, char *s)
int
needswap(int init)
{
- return init | present[Mmem] | present[Mswap] | present[Mkern] | present[Mdraw];
+ return init | present[Mmem] | present[Mswap] | present[Mreclaim] | present[Mkern] | present[Mdraw];
}
@@ -747,6 +769,15 @@ swapval(Machine *m, uvlong *v, uvlong *vmax, int)
}
void
+reclaimval(Machine *m, uvlong *v, uvlong *vmax, int)
+{
+ *v = m->devswap[Reclaim];
+ *vmax = m->devswap[Maxreclaim];
+ if(*vmax == 0)
+ *vmax = 1;
+}
+
+void
kernval(Machine *m, uvlong *v, uvlong *vmax, int)
{
*v = m->devswap[Kern];
@@ -1327,6 +1358,9 @@ main(int argc, char *argv[])
case 'p':
addgraph(Mtlbpurge);
break;
+ case 'r':
+ addgraph(Mreclaim);
+ break;
case 's':
addgraph(Msyscall);
break;