Linux Perf
stat.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_STATS_H
3 #define __PERF_STATS_H
4 
5 #include <linux/types.h>
6 #include <stdio.h>
7 #include "xyarray.h"
8 #include "rblist.h"
9 
10 struct stats {
11  double n, mean, M2;
12  u64 max, min;
13 };
14 
29 };
30 
32  struct stats res_stats[3];
34  u64 *group_data;
35 };
36 
37 enum aggr_mode {
44 };
45 
46 enum {
47  CTX_BIT_USER = 1 << 0,
48  CTX_BIT_KERNEL = 1 << 1,
49  CTX_BIT_HV = 1 << 2,
50  CTX_BIT_HOST = 1 << 3,
51  CTX_BIT_IDLE = 1 << 4,
52  CTX_BIT_MAX = 1 << 5,
53 };
54 
55 #define NUM_CTX CTX_BIT_MAX
56 
57 enum stat_type {
58  STAT_NONE = 0,
81 };
82 
83 struct runtime_stat {
84  struct rblist value_list;
85 };
86 
89  bool scale;
90  FILE *output;
91  unsigned int interval;
92  unsigned int timeout;
93  int times;
95  int stats_num;
96 };
97 
98 void update_stats(struct stats *stats, u64 val);
99 double avg_stats(struct stats *stats);
100 double stddev_stats(struct stats *stats);
101 double rel_stddev_stats(double stddev, double avg);
102 
103 static inline void init_stats(struct stats *stats)
104 {
105  stats->n = 0.0;
106  stats->mean = 0.0;
107  stats->M2 = 0.0;
108  stats->min = (u64) -1;
109  stats->max = 0;
110 }
111 
112 struct perf_evsel;
113 struct perf_evlist;
114 
117  int id;
118  double uval;
119  u64 val;
120  u64 run;
121  u64 ena;
122 };
123 
124 bool __perf_evsel_stat__is(struct perf_evsel *evsel,
125  enum perf_stat_evsel_id id);
126 
127 #define perf_stat_evsel__is(evsel, id) \
128  __perf_evsel_stat__is(evsel, PERF_STAT_EVSEL_ID__ ## id)
129 
130 extern struct runtime_stat rt_stat;
131 extern struct stats walltime_nsecs_stats;
132 
133 typedef void (*print_metric_t)(void *ctx, const char *color, const char *unit,
134  const char *fmt, double val);
135 typedef void (*new_line_t )(void *ctx);
136 
137 void runtime_stat__init(struct runtime_stat *st);
138 void runtime_stat__exit(struct runtime_stat *st);
142 void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count,
143  int cpu, struct runtime_stat *st);
145  void *ctx;
149 };
150 
151 void perf_stat__print_shadow_stats(struct perf_evsel *evsel,
152  double avg, int cpu,
153  struct perf_stat_output_ctx *out,
154  struct rblist *metric_events,
155  struct runtime_stat *st);
157 
158 int perf_evlist__alloc_stats(struct perf_evlist *evlist, bool alloc_raw);
159 void perf_evlist__free_stats(struct perf_evlist *evlist);
160 void perf_evlist__reset_stats(struct perf_evlist *evlist);
161 
163  struct perf_evsel *counter);
164 struct perf_tool;
165 union perf_event;
166 struct perf_session;
168  union perf_event *event,
169  struct perf_session *session);
170 
171 size_t perf_event__fprintf_stat(union perf_event *event, FILE *fp);
172 size_t perf_event__fprintf_stat_round(union perf_event *event, FILE *fp);
173 size_t perf_event__fprintf_stat_config(union perf_event *event, FILE *fp);
174 #endif
void runtime_stat__exit(struct runtime_stat *st)
Definition: stat-shadow.c:136
def avg(total, n)
Definition: Util.py:19
new_line_t new_line
Definition: stat.h:147
FILE * output
Definition: stat.h:90
void perf_stat__init_shadow_stats(void)
Definition: stat-shadow.c:141
stat_type
Definition: stat.h:57
size_t perf_event__fprintf_stat_config(union perf_event *event, FILE *fp)
Definition: stat.c:424
void(* new_line_t)(void *ctx)
Definition: stat.h:135
void perf_stat__reset_shadow_per_stat(struct runtime_stat *st)
Definition: stat-shadow.c:187
Definition: stat.h:80
bool __perf_evsel_stat__is(struct perf_evsel *evsel, enum perf_stat_evsel_id id)
Definition: stat.c:70
#define config
int perf_event__process_stat_event(struct perf_tool *tool, union perf_event *event, struct perf_session *session)
Definition: stat.h:58
Definition: rblist.h:22
print_metric_t print_metric
Definition: stat.h:146
static struct rblist metric_events
Definition: builtin-stat.c:139
int stats_num
Definition: stat.h:95
void perf_evlist__reset_stats(struct perf_evlist *evlist)
Definition: stat.c:197
struct runtime_stat rt_stat
Definition: stat-shadow.c:21
static void init_stats(struct stats *stats)
Definition: stat.h:103
void perf_stat__reset_shadow_stats(void)
Definition: stat-shadow.c:181
u64 min
Definition: stat.h:12
void perf_stat__print_shadow_stats(struct perf_evsel *evsel, double avg, int cpu, struct perf_stat_output_ctx *out, struct rblist *metric_events, struct runtime_stat *st)
Definition: stat-shadow.c:753
size_t perf_event__fprintf_stat(union perf_event *event, FILE *fp)
Definition: stat.c:400
Definition: tool.h:44
const char * fmt
Definition: dso.c:193
double avg_stats(struct stats *stats)
Definition: stat.c:26
static struct perf_session * session
Definition: builtin-lock.c:34
int perf_stat_process_counter(struct perf_stat_config *config, struct perf_evsel *counter)
Definition: stat.c:327
void perf_evlist__free_stats(struct perf_evlist *evlist)
Definition: stat.c:186
void runtime_stat__init(struct runtime_stat *st)
Definition: stat-shadow.c:126
perf_stat_evsel_id
Definition: stat.h:15
Definition: stat.h:41
struct stats walltime_nsecs_stats
Definition: stat-shadow.c:22
double M2
Definition: stat.h:11
struct perf_evsel * counter
Definition: stat.h:116
static struct perf_tool tool
Definition: builtin-diff.c:362
bool scale
Definition: stat.h:89
void update_stats(struct stats *stats, u64 val)
Definition: stat.c:10
unsigned int timeout
Definition: stat.h:92
#define event
double mean
Definition: stat.h:11
double n
Definition: stat.h:11
u64 * group_data
Definition: stat.h:34
void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count, int cpu, struct runtime_stat *st)
Definition: stat-shadow.c:208
int perf_evlist__alloc_stats(struct perf_evlist *evlist, bool alloc_raw)
Definition: stat.c:170
size_t perf_event__fprintf_stat_round(union perf_event *event, FILE *fp)
Definition: stat.c:413
struct runtime_stat * stats
Definition: stat.h:94
u64 max
Definition: stat.h:12
Definition: stat.h:10
double stddev_stats(struct stats *stats)
Definition: stat.c:47
void(* print_metric_t)(void *ctx, const char *color, const char *unit, const char *fmt, double val)
Definition: stat.h:133
unsigned int interval
Definition: stat.h:91
double rel_stddev_stats(double stddev, double avg)
Definition: stat.c:60
aggr_mode
Definition: stat.h:37
void perf_stat__collect_metric_expr(struct perf_evlist *)
Definition: stat-shadow.c:313
Definition: stat.h:38