-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Xiao Guangrong
authored and
Arnaldo Carvalho de Melo
committed
Sep 17, 2012
1 parent
034a926
commit 0007ece
Showing
4 changed files
with
76 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#ifndef __PERF_STATS_H | ||
#define __PERF_STATS_H | ||
|
||
#include "types.h" | ||
|
||
struct stats | ||
{ | ||
double n, mean, M2; | ||
}; | ||
|
||
void update_stats(struct stats *stats, u64 val); | ||
double avg_stats(struct stats *stats); | ||
double stddev_stats(struct stats *stats); | ||
double rel_stddev_stats(double stddev, double avg); | ||
|
||
#endif |