| // 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[]); |