From: Michal Sojka Date: Fri, 17 Oct 2014 13:36:25 +0000 (+0200) Subject: latester: Add statistics about data out of histogram range X-Git-Tag: pc-sw-update~8 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/commitdiff_plain/869acdaf3491ca1072f6284a260e6e648af2c271 latester: Add statistics about data out of histogram range --- diff --git a/latester/histogram.h b/latester/histogram.h index b4546e4..52dc664 100644 --- a/latester/histogram.h +++ b/latester/histogram.h @@ -3,6 +3,7 @@ struct histogram { unsigned *data; + unsigned out_below, out_above; unsigned allocated; unsigned resolution; }; @@ -14,6 +15,7 @@ int histogram_init(struct histogram *h, size_t mem; h->allocated = max_value/resolution + 1; h->resolution = resolution; + h->out_below = h->out_above = 0; mem = h->allocated*sizeof(*h->data); h->data = malloc(mem); if (h->data) { @@ -25,10 +27,15 @@ int histogram_init(struct histogram *h, void histogram_add(struct histogram *h, int value) { - if (value < 0) value = 0; + if (value < 0) { + h->out_below++; + return; + } unsigned index = value / h->resolution; - if (index >= h->allocated) + if (index >= h->allocated) { + h->out_above++; index = h->allocated - 1; + } h->data[index]++; } @@ -56,6 +63,7 @@ struct histogram_stats { unsigned count; unsigned long long sum; unsigned avg; + unsigned below, above; /* Count of data out of histogram range */ unsigned percentile[101]; }; @@ -87,6 +95,9 @@ void histogram_stats(struct histogram *h, struct histogram_stats *s) while (sum < i * s->count / 100) sum += h->data[j++]; s->percentile[100] = (j-1) * h->resolution; + + s->below = h->out_below; + s->above = h->out_above; } #endif diff --git a/latester/latester.c b/latester/latester.c index ff627dc..72e123b 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -894,6 +894,8 @@ int main(int argc, const char *argv[]) histogram_stats(&histogram_gw, &hs); double avg = hs.count ? (double)hs.sum/hs.count : 0; fprintf(opt.f_stat, "avg=%g\n", avg); + fprintf(opt.f_stat, "out_of_range_below=%d\n", hs.below); + fprintf(opt.f_stat, "out_of_range_above=%d\n", hs.above); for (i = 0; i <= 20; i++) fprintf(opt.f_stat, "percentile%d=%d\n", i*5, hs.percentile[i*5]);