From 809c8cb562f729a9a711c4912d7096f6681c5415 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Fri, 4 Sep 2009 17:03:13 +0200 Subject: [PATCH] --- yaml --- r: 158311 b: refs/heads/master c: 63d40deb2e7c64ed55943d49f078e09fc4b64b54 h: refs/heads/master i: 158309: 1d22417a1c8989457a333cd03a8f3649b99f64b3 158307: 94e30201e578afed2a0caa9748f797ae27b1bdd6 158303: 0809c0f6589ca654a386352b072d76630ec4c9f4 v: v3 --- [refs] | 2 +- trunk/tools/perf/builtin-stat.c | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 4d4b1ed78439..1a64c38d6e60 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9e9772c458d50dabdb5327821da3803254638cd1 +refs/heads/master: 63d40deb2e7c64ed55943d49f078e09fc4b64b54 diff --git a/trunk/tools/perf/builtin-stat.c b/trunk/tools/perf/builtin-stat.c index 9c6377f7152f..e9424fa72420 100644 --- a/trunk/tools/perf/builtin-stat.c +++ b/trunk/tools/perf/builtin-stat.c @@ -75,7 +75,7 @@ static int null_run = 0; static int fd[MAX_NR_CPUS][MAX_COUNTERS]; static u64 event_res[MAX_COUNTERS][3]; -static u64 event_scaled[MAX_COUNTERS]; +static int event_scaled[MAX_COUNTERS]; struct stats { @@ -97,17 +97,31 @@ static double avg_stats(struct stats *stats) } /* - * stddev = sqrt(1/N (\Sum n_i^2) - avg(n)^2) + * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance + * + * (\Sum n_i^2) - ((\Sum n_i)^2)/n + * s^2 ------------------------------- + * n - 1 + * + * http://en.wikipedia.org/wiki/Stddev + * + * The std dev of the mean is related to the std dev by: + * + * s + * s_mean = ------- + * sqrt(n) + * */ static double stddev_stats(struct stats *stats) { double avg = stats->sum / run_count; + double variance = (stats->sum_sq - stats->sum*avg)/(run_count - 1); + double variance_mean = variance / run_count; - return sqrt(stats->sum_sq/run_count - avg*avg); + return sqrt(variance_mean); } struct stats event_res_stats[MAX_COUNTERS][3]; -struct stats event_scaled_stats[MAX_COUNTERS]; struct stats runtime_nsecs_stats; struct stats walltime_nsecs_stats; struct stats runtime_cycles_stats; @@ -343,11 +357,10 @@ static void abs_printout(int counter, double avg, double stddev) static void print_counter(int counter) { double avg, stddev; - int scaled; + int scaled = event_scaled[counter]; avg = avg_stats(&event_res_stats[counter][0]); stddev = stddev_stats(&event_res_stats[counter][0]); - scaled = avg_stats(&event_scaled_stats[counter]); if (scaled == -1) { fprintf(stderr, " %14s %-24s\n",