diff options
author | Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> | 2012-09-17 04:31:14 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-09-17 12:10:03 -0400 |
commit | 0007eceaceb11520071d053acfe06ee3326b1d13 (patch) | |
tree | d9b96c6a53c1ccca87222003e7c5c0e4b0f171a0 /tools/perf/util/stat.c | |
parent | 034a9265c289d5298bac7bfd824d3d5b9ec892b4 (diff) |
perf stat: Move stats related code to util/stat.c
Then, the code can be shared between kvm events and perf stat.
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
[ Dong Hao <haodong@linux.vnet.ibm.com>: rebase it on acme's git tree ]
Signed-off-by: Dong Hao <haodong@linux.vnet.ibm.com>
Cc: Avi Kivity <avi@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: kvm@vger.kernel.org
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Runzhen Wang <runzhen@linux.vnet.ibm.com>
Cc: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com
Link: http://lkml.kernel.org/r/1347870675-31495-3-git-send-email-haodong@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
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 @@ | |||
1 | #include <math.h> | ||
2 | |||
3 | #include "stat.h" | ||
4 | |||
5 | void update_stats(struct stats *stats, u64 val) | ||
6 | { | ||
7 | double delta; | ||
8 | |||
9 | stats->n++; | ||
10 | delta = val - stats->mean; | ||
11 | stats->mean += delta / stats->n; | ||
12 | stats->M2 += delta*(val - stats->mean); | ||
13 | } | ||
14 | |||
15 | double avg_stats(struct stats *stats) | ||
16 | { | ||
17 | return stats->mean; | ||
18 | } | ||
19 | |||
20 | /* | ||
21 | * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance | ||
22 | * | ||
23 | * (\Sum n_i^2) - ((\Sum n_i)^2)/n | ||
24 | * s^2 = ------------------------------- | ||
25 | * n - 1 | ||
26 | * | ||
27 | * http://en.wikipedia.org/wiki/Stddev | ||
28 | * | ||
29 | * The std dev of the mean is related to the std dev by: | ||
30 | * | ||
31 | * s | ||
32 | * s_mean = ------- | ||
33 | * sqrt(n) | ||
34 | * | ||
35 | */ | ||
36 | double stddev_stats(struct stats *stats) | ||
37 | { | ||
38 | double variance, variance_mean; | ||
39 | |||
40 | if (!stats->n) | ||
41 | return 0.0; | ||
42 | |||
43 | variance = stats->M2 / (stats->n - 1); | ||
44 | variance_mean = variance / stats->n; | ||
45 | |||
46 | return sqrt(variance_mean); | ||
47 | } | ||
48 | |||
49 | double rel_stddev_stats(double stddev, double avg) | ||
50 | { | ||
51 | double pct = 0.0; | ||
52 | |||
53 | if (avg) | ||
54 | pct = 100.0 * stddev/avg; | ||
55 | |||
56 | return pct; | ||
57 | } | ||