diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-09-19 16:59:01 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-09-19 16:59:01 +0200 |
commit | bea8f35421628266658c14ea990d18b0969c4c0b (patch) | |
tree | 46c5d4616a003011a1237ed8d31592a662cf9720 /tools/perf/util/stat.c | |
parent | 26f45274afd938d82463816a12ec67448513294a (diff) | |
parent | 7ae92e744e3fb389afb1e24920ecda331d360c61 (diff) | |
download | linux-bea8f35421628266658c14ea990d18b0969c4c0b.tar.gz linux-bea8f35421628266658c14ea990d18b0969c4c0b.tar.xz |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
* Fix handling of unresolved samples when --symbols is used in 'report',
from Feng Tang.
* Add --symbols to 'script', similar to the one in 'report', from Feng Tang.
* Add union member access support to 'probe', from Hyeoncheol Lee.
* Make 'archive' work on Android, tweaking some of the utility parameters
used (tar, rm), from Irina Tirdea.
* Fixups to die() removal, from Namhyung Kim.
* Render fixes for the TUI, from Namhyung Kim.
* Don't enable annotation in non symbolic view, from Namhyung Kim.
* Fix pipe mode in 'report', from Namhyung Kim.
* Move related stats code from stat to util/, will be used by the 'stat'
kvm tool, from Xiao Guangrong.
* Add cpumask for uncore pmu, use it in 'stat', from Yan, Zheng.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/util/stat.c')
-rw-r--r-- | tools/perf/util/stat.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c new file mode 100644 index 000000000000..23742126f47c --- /dev/null +++ b/tools/perf/util/stat.c @@ -0,0 +1,57 @@ +#include <math.h> + +#include "stat.h" + +void update_stats(struct stats *stats, u64 val) +{ + double delta; + + stats->n++; + delta = val - stats->mean; + stats->mean += delta / stats->n; + stats->M2 += delta*(val - stats->mean); +} + +double avg_stats(struct stats *stats) +{ + return stats->mean; +} + +/* + * 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) + * + */ +double stddev_stats(struct stats *stats) +{ + double variance, variance_mean; + + if (!stats->n) + return 0.0; + + variance = stats->M2 / (stats->n - 1); + variance_mean = variance / stats->n; + + return sqrt(variance_mean); +} + +double rel_stddev_stats(double stddev, double avg) +{ + double pct = 0.0; + + if (avg) + pct = 100.0 * stddev/avg; + + return pct; +} |