 0007eceace
			
		
	
	
	0007eceace
	
	
	
		
			
			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>
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			984 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			984 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #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;
 | |
| }
 |