--- /sys/src/9k/port/qmalloc.c +++ /sys/src/9k/port/qmalloc.c @@ -48,9 +48,47 @@ static Header *tailptr; static Header checkval; static int morecore(unsigned); +enum +{ + QSmalign = 0, + QSmalignquick, + QSmalignrover, + QSmalignfront, + QSmalignback, + QSmaligntail, + QSmalignnottail, + QSmalloc, + QSmallocrover, + QSmalloctail, + QSfree, + QSfreetail, + QSfreequick, + QSfreenext, + QSfreeprev, + QSmax +}; + +static char* qstatstr[QSmax] = { +[QSmalign] "malign", +[QSmalignquick] "malignquick", +[QSmalignrover] "malignrover", +[QSmalignfront] "malignfront", +[QSmalignback] "malignback", +[QSmaligntail] "maligntail", +[QSmalignnottail] "malignnottail", +[QSmalloc] "malloc", +[QSmallocrover] "mallocrover", +[QSmalloctail] "malloctail", +[QSfree] "free", +[QSfreetail] "freetail", +[QSfreequick] "freequick", +[QSfreenext] "freenext", +[QSfreeprev] "freeprev", +}; + static void* qmalloc(usize); static void qfreeinternal(void*); -static int qstats[32]; +static int qstats[QSmax]; static Lock mainlock; @@ -83,7 +121,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) if(align <= sizeof(Align)) return qmalloc(nbytes); - qstats[5]++; + qstats[QSmalign]++; nunits = NUNITS(nbytes); if(nunits <= NQUICK){ /* @@ -98,7 +136,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) *pp = p->s.next; p->s.next = &checkval; QUNLOCK(&qlist->lk); - qstats[6]++; + qstats[QSmalignquick]++; return p+1; } pp = &p->s.next; @@ -125,7 +163,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) */ q->s.next = p->s.next; rover = q; - qstats[7]++; + qstats[QSmalignrover]++; /* * Free any runt in front of the alignment. @@ -139,7 +177,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) r->s.size = n; r->s.next = &checkval; qfreeinternal(r+1); - qstats[8]++; + qstats[QSmalignfront]++; } /* @@ -149,7 +187,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) r = p+nunits; r->s.size = p->s.size - nunits; r->s.next = &checkval; - qstats[9]++; + qstats[QSmalignback]++; qfreeinternal(r+1); p->s.size = nunits; @@ -170,7 +208,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) q = ALIGNHDR(tailptr+1, align); if(q == tailptr+1){ tailalloc(p, nunits); - qstats[10]++; + qstats[QSmaligntail]++; } else{ naligned = NUNITS(align)-1; @@ -193,7 +231,7 @@ qmallocalign(usize nbytes, uintptr align, long offset, usize span) n = q-tailptr - 1; tailalloc(r, n); tailalloc(p, nunits); - qstats[11]++; + qstats[QSmalignnottail]++; qfreeinternal(r+1); } MUNLOCK; @@ -213,7 +251,7 @@ qmalloc(usize nbytes) return nil; //*/ - qstats[0]++; + qstats[QSmalloc]++; nunits = NUNITS(nbytes); if(nunits <= NQUICK){ qlist = &quicklist[nunits]; @@ -243,7 +281,7 @@ qmalloc(usize nbytes) q->s.next = p->s.next; p->s.next = &checkval; rover = q; - qstats[2]++; + qstats[QSmallocrover]++; MUNLOCK; return p+1; } @@ -255,7 +293,7 @@ qmalloc(usize nbytes) } tailsize += n; } - qstats[3]++; + qstats[QSmalloctail]++; tailalloc(p, nunits); MUNLOCK; @@ -271,7 +309,7 @@ qfreeinternal(void* ap) if(ap == nil) return; - qstats[16]++; + qstats[QSfree]++; p = (Header*)ap - 1; if((nunits = p->s.size) == 0 || p->s.next != &checkval) @@ -280,7 +318,7 @@ qfreeinternal(void* ap) /* block before tail */ tailptr = p; tailsize += nunits; - qstats[17]++; + qstats[QSfreetail]++; return; } if(nunits <= NQUICK) { @@ -289,7 +327,7 @@ qfreeinternal(void* ap) p->s.next = qlist->first; qlist->first = p; QUNLOCK(&qlist->lk); - qstats[18]++; + qstats[QSfreequick]++; return; } if((q = rover) == nil) { @@ -303,13 +341,13 @@ qfreeinternal(void* ap) if(p+p->s.size == q->s.next) { p->s.size += q->s.next->s.size; p->s.next = q->s.next->s.next; - qstats[19]++; + qstats[QSfreenext]++; } else p->s.next = q->s.next; if(q+q->s.size == p) { q->s.size += p->s.size; q->s.next = p->s.next; - qstats[20]++; + qstats[QSfreeprev]++; } else q->s.next = p; rover = q; @@ -364,7 +402,7 @@ mallocreadfmt(char* s, char* e) for(i = 0; i < nelem(qstats); i++){ if(qstats[i] == 0) continue; -// p = seprint(p, e, "qstats[%d] %ud\n", i, qstats[i]); +// p = seprint(p, e, "%s %ud\n", qstatstr[i], qstats[i]); } USED(p); MUNLOCK; @@ -432,7 +470,7 @@ mallocsummary(void) for(i = 0; i < nelem(qstats); i++){ if(qstats[i] == 0) continue; - print("qstats[%d] %ud\n", i, qstats[i]); + print("%s %ud\n", qstatstr[i], qstats[i]); } }