| 
									
										
										
										
											2012-09-17 16:31:14 +08:00
										 |  |  | #ifndef __PERF_STATS_H
 | 
					
						
							|  |  |  | #define __PERF_STATS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-25 21:31:02 +02:00
										 |  |  | #include <linux/types.h>
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:25:59 +02:00
										 |  |  | #include <stdio.h>
 | 
					
						
							| 
									
										
										
										
											2012-09-17 16:31:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct stats | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	double n, mean, M2; | 
					
						
							| 
									
										
										
										
											2013-08-02 14:05:40 -06:00
										 |  |  | 	u64 max, min; | 
					
						
							| 
									
										
										
										
											2012-09-17 16:31:14 +08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-04 15:50:55 +02:00
										 |  |  | enum perf_stat_evsel_id { | 
					
						
							|  |  |  | 	PERF_STAT_EVSEL_ID__NONE = 0, | 
					
						
							| 
									
										
										
										
											2015-06-03 16:25:52 +02:00
										 |  |  | 	PERF_STAT_EVSEL_ID__CYCLES_IN_TX, | 
					
						
							|  |  |  | 	PERF_STAT_EVSEL_ID__TRANSACTION_START, | 
					
						
							|  |  |  | 	PERF_STAT_EVSEL_ID__ELISION_START, | 
					
						
							|  |  |  | 	PERF_STAT_EVSEL_ID__CYCLES_IN_TX_CP, | 
					
						
							| 
									
										
										
										
											2015-06-04 15:50:55 +02:00
										 |  |  | 	PERF_STAT_EVSEL_ID__MAX, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct perf_stat { | 
					
						
							|  |  |  | 	struct stats		res_stats[3]; | 
					
						
							|  |  |  | 	enum perf_stat_evsel_id	id; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:25:59 +02:00
										 |  |  | enum aggr_mode { | 
					
						
							|  |  |  | 	AGGR_NONE, | 
					
						
							|  |  |  | 	AGGR_GLOBAL, | 
					
						
							|  |  |  | 	AGGR_SOCKET, | 
					
						
							|  |  |  | 	AGGR_CORE, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-17 16:31:14 +08:00
										 |  |  | 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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-02 14:05:40 -06:00
										 |  |  | static inline void init_stats(struct stats *stats) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	stats->n    = 0.0; | 
					
						
							|  |  |  | 	stats->mean = 0.0; | 
					
						
							|  |  |  | 	stats->M2   = 0.0; | 
					
						
							|  |  |  | 	stats->min  = (u64) -1; | 
					
						
							|  |  |  | 	stats->max  = 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-06-04 15:50:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct perf_evsel; | 
					
						
							|  |  |  | bool __perf_evsel_stat__is(struct perf_evsel *evsel, | 
					
						
							|  |  |  | 			   enum perf_stat_evsel_id id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define perf_stat_evsel__is(evsel, id) \
 | 
					
						
							|  |  |  | 	__perf_evsel_stat__is(evsel, PERF_STAT_EVSEL_ID__ ## id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void perf_stat_evsel_id_init(struct perf_evsel *evsel); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-03 16:25:59 +02:00
										 |  |  | extern struct stats walltime_nsecs_stats; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void perf_stat__reset_shadow_stats(void); | 
					
						
							|  |  |  | void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count, | 
					
						
							|  |  |  | 				    int cpu); | 
					
						
							|  |  |  | void perf_stat__print_shadow_stats(FILE *out, struct perf_evsel *evsel, | 
					
						
							|  |  |  | 				   double avg, int cpu, enum aggr_mode aggr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-14 10:19:27 +02:00
										 |  |  | struct perf_counts *perf_counts__new(int ncpus); | 
					
						
							|  |  |  | void perf_counts__delete(struct perf_counts *counts); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-14 10:19:26 +02:00
										 |  |  | void perf_evsel__reset_counts(struct perf_evsel *evsel, int ncpus); | 
					
						
							|  |  |  | int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus); | 
					
						
							|  |  |  | void perf_evsel__free_counts(struct perf_evsel *evsel); | 
					
						
							| 
									
										
										
										
											2012-09-17 16:31:14 +08:00
										 |  |  | #endif
 |