From: Michal Sojka Date: Tue, 4 Feb 2014 17:32:56 +0000 (+0100) Subject: latester: Add percentiles to statistics X-Git-Tag: fix-allnoconfig~51 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/commitdiff_plain/a3b8b7b78302d32d42d600ee7342552f29a84f06 latester: Add percentiles to statistics --- diff --git a/latester/histogram.h b/latester/histogram.h index 80d629e..b7c1cca 100644 --- a/latester/histogram.h +++ b/latester/histogram.h @@ -52,5 +52,41 @@ void histogram_fprint(struct histogram *h, FILE *f) } +struct histogram_stats { + unsigned count; + unsigned long long sum; + unsigned avg; + unsigned percentile[100]; +}; + +void histogram_stats(struct histogram *h, struct histogram_stats *s) +{ + unsigned long long sum; + unsigned i, j; + + if (!s) + return; + + memset(s, 0, sizeof(*s)); + + for (i = 0; i < h->allocated; i++) { + s->count += h->data[i]; + s->sum += h->data[i] * i * h->resolution; + } + if (s->count == 0) + return; + + s->avg = s->sum / s->count; + + for (i = 0, j = 0, sum = 0; i < 100; i++) { + while (sum <= i * s->count / 100) + sum += h->data[j++]; + + s->percentile[i] = (j-1) * h->resolution; + } + while (sum < i * s->count / 100) + sum += h->data[j++]; + s->percentile[100] = (j-1) * h->resolution; +} #endif diff --git a/latester/latester.c b/latester/latester.c index 8b1fb86..ff627dc 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -865,6 +865,7 @@ int main(int argc, const char *argv[]) fclose(opt.f_msgs); if (opt.f_stat) { + struct histogram_stats hs; fprintf(opt.f_stat, "cmdline='"); for (i=0; i