add stats to qallocb Reference: /n/atom/patch/applied/qallocstats Date: Thu Jan 16 23:47:53 CET 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/port/qallocb.c Thu Jan 16 23:47:45 2014 +++ /sys/src/nix/port/qallocb.c Thu Jan 16 23:47:46 2014 @@ -22,6 +22,8 @@ Lock; int sz; Block *free; + int count; + uvlong ticks; }; static Quick qtab[] = { @@ -65,10 +67,12 @@ { uchar *va, *ve; int i, bsz, asz, color; + uvlong t; uintmem pa; Block *b; Quick *q; + t = fastticks(nil); for(i = 0; i < nelem(qtab); i++) if(size <= qtab[i].sz) goto found; @@ -95,7 +99,11 @@ } b = q->free; q->free = b->next; - iunlock(q); + + q->count++; + q->ticks += fastticks(nil)-t; + + iunlock(q); /* not counted! */ b->next = nil; b->lim = b->rp + size; /* lie like a dog (qio counts alloc'd bytes .. pfft.) */ @@ -220,4 +228,18 @@ iallocsummary(void) { print("ialloc %P/%P\n", ialloc.bytes, sys->ialloc); +} + +char* +allocbstats(char *p, char *e) +{ + int i; + Quick *q; + + p = seprint(p, e, "ialloc %P/%P\n", ialloc.bytes, sys->ialloc); + for(i = 0; i < nelem(qtab); i++){ + q = qtab+i; + p = seprint(p, e, "allocb %d: %ud %llud\n", q->sz, q->count, q->ticks); + } + return p; }