Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/tracing/rtla/src/osnoise.h
26285 views
1
// SPDX-License-Identifier: GPL-2.0
2
#pragma once
3
4
#include "utils.h"
5
#include "trace.h"
6
7
enum osnoise_mode {
8
MODE_OSNOISE = 0,
9
MODE_HWNOISE
10
};
11
12
struct osnoise_params {
13
/* Common params */
14
char *cpus;
15
cpu_set_t monitored_cpus;
16
char *trace_output;
17
char *cgroup_name;
18
unsigned long long runtime;
19
unsigned long long period;
20
long long threshold;
21
long long stop_us;
22
long long stop_total_us;
23
int sleep_time;
24
int duration;
25
int set_sched;
26
int cgroup;
27
int hk_cpus;
28
cpu_set_t hk_cpu_set;
29
struct sched_attr sched_param;
30
struct trace_events *events;
31
int warmup;
32
int buffer_size;
33
union {
34
struct {
35
/* top only */
36
int quiet;
37
int pretty_output;
38
enum osnoise_mode mode;
39
};
40
struct {
41
/* hist only */
42
int output_divisor;
43
char no_header;
44
char no_summary;
45
char no_index;
46
char with_zeros;
47
int bucket_size;
48
int entries;
49
};
50
};
51
};
52
53
/*
54
* osnoise_context - read, store, write, restore osnoise configs.
55
*/
56
struct osnoise_context {
57
int flags;
58
int ref;
59
60
char *curr_cpus;
61
char *orig_cpus;
62
63
/* 0 as init value */
64
unsigned long long orig_runtime_us;
65
unsigned long long runtime_us;
66
67
/* 0 as init value */
68
unsigned long long orig_period_us;
69
unsigned long long period_us;
70
71
/* 0 as init value */
72
long long orig_timerlat_period_us;
73
long long timerlat_period_us;
74
75
/* 0 as init value */
76
long long orig_tracing_thresh;
77
long long tracing_thresh;
78
79
/* -1 as init value because 0 is disabled */
80
long long orig_stop_us;
81
long long stop_us;
82
83
/* -1 as init value because 0 is disabled */
84
long long orig_stop_total_us;
85
long long stop_total_us;
86
87
/* -1 as init value because 0 is disabled */
88
long long orig_print_stack;
89
long long print_stack;
90
91
/* -1 as init value because 0 is off */
92
int orig_opt_irq_disable;
93
int opt_irq_disable;
94
95
/* -1 as init value because 0 is off */
96
int orig_opt_workload;
97
int opt_workload;
98
};
99
100
/*
101
* *_INIT_VALs are also invalid values, they are used to
102
* communicate errors.
103
*/
104
#define OSNOISE_OPTION_INIT_VAL (-1)
105
#define OSNOISE_TIME_INIT_VAL (0)
106
107
struct osnoise_context *osnoise_context_alloc(void);
108
int osnoise_get_context(struct osnoise_context *context);
109
void osnoise_put_context(struct osnoise_context *context);
110
111
int osnoise_set_cpus(struct osnoise_context *context, char *cpus);
112
void osnoise_restore_cpus(struct osnoise_context *context);
113
114
int osnoise_set_runtime_period(struct osnoise_context *context,
115
unsigned long long runtime,
116
unsigned long long period);
117
void osnoise_restore_runtime_period(struct osnoise_context *context);
118
119
int osnoise_set_stop_us(struct osnoise_context *context,
120
long long stop_us);
121
void osnoise_restore_stop_us(struct osnoise_context *context);
122
123
int osnoise_set_stop_total_us(struct osnoise_context *context,
124
long long stop_total_us);
125
void osnoise_restore_stop_total_us(struct osnoise_context *context);
126
127
int osnoise_set_timerlat_period_us(struct osnoise_context *context,
128
long long timerlat_period_us);
129
void osnoise_restore_timerlat_period_us(struct osnoise_context *context);
130
131
int osnoise_set_tracing_thresh(struct osnoise_context *context,
132
long long tracing_thresh);
133
void osnoise_restore_tracing_thresh(struct osnoise_context *context);
134
135
void osnoise_restore_print_stack(struct osnoise_context *context);
136
int osnoise_set_print_stack(struct osnoise_context *context,
137
long long print_stack);
138
139
int osnoise_set_irq_disable(struct osnoise_context *context, bool onoff);
140
int osnoise_set_workload(struct osnoise_context *context, bool onoff);
141
142
/*
143
* osnoise_tool - osnoise based tool definition.
144
*/
145
struct osnoise_tool {
146
struct trace_instance trace;
147
struct osnoise_context *context;
148
void *data;
149
void *params;
150
time_t start_time;
151
};
152
153
void osnoise_destroy_tool(struct osnoise_tool *top);
154
struct osnoise_tool *osnoise_init_tool(char *tool_name);
155
struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
156
void osnoise_report_missed_events(struct osnoise_tool *tool);
157
bool osnoise_trace_is_off(struct osnoise_tool *tool, struct osnoise_tool *record);
158
int osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params *params);
159
160
int osnoise_hist_main(int argc, char *argv[]);
161
int osnoise_top_main(int argc, char **argv);
162
int osnoise_main(int argc, char **argv);
163
int hwnoise_main(int argc, char **argv);
164
165