Lines Matching +full:stop +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0
23 static int dma_latency_fd = -1;
26 * timerlat_apply_config - apply common configs to the initialized tool
35 * If BPF enablement fails, fall back to tracefs mode. in timerlat_apply_config()
39 params->mode = TRACING_MODE_TRACEFS; in timerlat_apply_config()
40 } else if (!tep_find_event_by_name(tool->trace.tep, "osnoise", "timerlat_sample")) { in timerlat_apply_config()
42 params->mode = TRACING_MODE_TRACEFS; in timerlat_apply_config()
47 params->mode = TRACING_MODE_TRACEFS; in timerlat_apply_config()
51 if (params->mode != TRACING_MODE_BPF) { in timerlat_apply_config()
53 * In tracefs and mixed mode, timerlat tracer handles stopping in timerlat_apply_config()
56 retval = osnoise_set_stop_us(tool->context, params->common.stop_us); in timerlat_apply_config()
58 err_msg("Failed to set stop us\n"); in timerlat_apply_config()
62 retval = osnoise_set_stop_total_us(tool->context, params->common.stop_total_us); in timerlat_apply_config()
64 err_msg("Failed to set stop total us\n"); in timerlat_apply_config()
70 retval = osnoise_set_timerlat_period_us(tool->context, in timerlat_apply_config()
71 params->timerlat_period_us ? in timerlat_apply_config()
72 params->timerlat_period_us : in timerlat_apply_config()
80 retval = osnoise_set_print_stack(tool->context, params->print_stack); in timerlat_apply_config()
87 * If the user did not specify a type of thread, try user-threads first. in timerlat_apply_config()
90 if (!params->common.kernel_workload && !params->common.user_data) { in timerlat_apply_config()
93 debug_msg("User-space interface detected, setting user-threads\n"); in timerlat_apply_config()
94 params->common.user_workload = 1; in timerlat_apply_config()
95 params->common.user_data = 1; in timerlat_apply_config()
97 debug_msg("User-space interface not detected, setting kernel-threads\n"); in timerlat_apply_config()
98 params->common.kernel_workload = 1; in timerlat_apply_config()
102 return common_apply_config(tool, ¶ms->common); in timerlat_apply_config()
105 return -1; in timerlat_apply_config()
110 struct timerlat_params *params = to_timerlat_params(tool->params); in timerlat_enable()
113 if (params->dma_latency >= 0) { in timerlat_enable()
114 dma_latency_fd = set_cpu_dma_latency(params->dma_latency); in timerlat_enable()
117 return -1; in timerlat_enable()
121 if (params->deepest_idle_state >= -1) { in timerlat_enable()
123 err_msg("rtla built without libcpupower, --deepest-idle-state is not supported\n"); in timerlat_enable()
124 return -1; in timerlat_enable()
130 if (params->common.cpus && !CPU_ISSET(i, ¶ms->common.monitored_cpus)) in timerlat_enable()
134 return -1; in timerlat_enable()
136 if (set_deepest_cpu_idle_state(i, params->deepest_idle_state) < 0) { in timerlat_enable()
138 return -1; in timerlat_enable()
143 if (!params->no_aa) { in timerlat_enable()
144 tool->aa = osnoise_init_tool("timerlat_aa"); in timerlat_enable()
145 if (!tool->aa) in timerlat_enable()
146 return -1; in timerlat_enable()
148 retval = timerlat_aa_init(tool->aa, params->dump_tasks); in timerlat_enable()
154 retval = enable_tracer_by_name(tool->aa->trace.inst, "timerlat"); in timerlat_enable()
161 if (params->common.warmup > 0) { in timerlat_enable()
162 debug_msg("Warming up for %d seconds\n", params->common.warmup); in timerlat_enable()
163 sleep(params->common.warmup); in timerlat_enable()
165 return -1; in timerlat_enable()
171 * Let the trace instance start first for the case of hitting a stop in timerlat_enable()
175 if (tool->record) in timerlat_enable()
176 trace_instance_start(&tool->record->trace); in timerlat_enable()
177 if (!params->no_aa) in timerlat_enable()
178 trace_instance_start(&tool->aa->trace); in timerlat_enable()
179 if (params->mode == TRACING_MODE_TRACEFS) { in timerlat_enable()
180 trace_instance_start(&tool->trace); in timerlat_enable()
194 struct timerlat_params *params = to_timerlat_params(tool->params); in timerlat_analyze()
197 if (!params->no_aa) in timerlat_analyze()
198 timerlat_auto_analysis(params->common.stop_us, in timerlat_analyze()
199 params->common.stop_total_us); in timerlat_analyze()
200 } else if (params->common.aa_only) { in timerlat_analyze()
204 * If the trace did not stop with --aa-only, at least print in timerlat_analyze()
207 max_lat = tracefs_instance_file_read(trace_inst->inst, "tracing_max_latency", NULL); in timerlat_analyze()
217 struct timerlat_params *params = to_timerlat_params(tool->params); in timerlat_free()
223 if (params->deepest_idle_state >= -1) { in timerlat_free()
225 if (params->common.cpus && in timerlat_free()
226 !CPU_ISSET(i, ¶ms->common.monitored_cpus)) in timerlat_free()
232 osnoise_destroy_tool(tool->aa); in timerlat_free()
234 if (params->mode != TRACING_MODE_TRACEFS) in timerlat_free()
247 " usage: [rtla] timerlat [MODE] ...", in timerlat_usage()
250 " top - prints the summary from timerlat tracer", in timerlat_usage()
251 " hist - prints a histogram of timer latencies", in timerlat_usage()
253 "if no MODE is given, the top mode is called, passing the arguments", in timerlat_usage()
276 if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) { in timerlat_main()
278 } else if (strncmp(argv[1], "-", 1) == 0) { in timerlat_main()
283 run_tool(&timerlat_top_ops, argc-1, &argv[1]); in timerlat_main()
286 run_tool(&timerlat_hist_ops, argc-1, &argv[1]); in timerlat_main()