| // SPDX-License-Identifier: GPL-2.0 | |
| #include "actions.h" | |
| #include "osnoise.h" | |
| /* | |
| * Define timerlat tracing mode. | |
| * | |
| * There are three tracing modes: | |
| * - tracefs-only, used when BPF is unavailable. | |
| * - BPF-only, used when BPF is available and neither trace saving nor | |
| * auto-analysis are enabled. | |
| * - mixed mode, used when BPF is available and either trace saving or | |
| * auto-analysis is enabled (which rely on sample collection through | |
| * tracefs). | |
| */ | |
| enum timerlat_tracing_mode { | |
| TRACING_MODE_BPF, | |
| TRACING_MODE_TRACEFS, | |
| TRACING_MODE_MIXED, | |
| }; | |
| struct timerlat_params { | |
| /* Common params */ | |
| char *cpus; | |
| cpu_set_t monitored_cpus; | |
| char *cgroup_name; | |
| unsigned long long runtime; | |
| long long stop_us; | |
| long long stop_total_us; | |
| long long timerlat_period_us; | |
| long long print_stack; | |
| int sleep_time; | |
| int output_divisor; | |
| int duration; | |
| int set_sched; | |
| int dma_latency; | |
| int no_aa; | |
| int dump_tasks; | |
| int cgroup; | |
| int hk_cpus; | |
| int user_workload; | |
| int kernel_workload; | |
| int user_data; | |
| int warmup; | |
| int buffer_size; | |
| int deepest_idle_state; | |
| cpu_set_t hk_cpu_set; | |
| struct sched_attr sched_param; | |
| struct trace_events *events; | |
| enum timerlat_tracing_mode mode; | |
| struct actions threshold_actions; | |
| struct actions end_actions; | |
| union { | |
| struct { | |
| /* top only */ | |
| int quiet; | |
| int aa_only; | |
| int pretty_output; | |
| }; | |
| struct { | |
| /* hist only */ | |
| char no_irq; | |
| char no_thread; | |
| char no_header; | |
| char no_summary; | |
| char no_index; | |
| char with_zeros; | |
| int bucket_size; | |
| int entries; | |
| }; | |
| }; | |
| }; | |
| int timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params); | |
| int timerlat_hist_main(int argc, char *argv[]); | |
| int timerlat_top_main(int argc, char *argv[]); | |
| int timerlat_main(int argc, char *argv[]); |