Blame view

kernel/linux-imx6_3.14.28/tools/perf/util/stat.c 1.05 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  #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);
  
  	if (val > stats->max)
  		stats->max = val;
  
  	if (val < stats->min)
  		stats->min = val;
  }
  
  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 < 2)
  		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;
  }