Lines Matching +full:higher +full:- +full:than +full:- +full:threshold

1 // SPDX-License-Identifier: GPL-2.0
38 * osnoise_free_top - free runtime data
42 free(data->cpu_data); in osnoise_free_top()
48 osnoise_free_top(tool->data); in osnoise_free_top_tool()
52 * osnoise_alloc_histogram - alloc runtime data
62 data->nr_cpus = nr_cpus; in osnoise_alloc_top()
65 data->cpu_data = calloc(1, sizeof(*data->cpu_data) * nr_cpus); in osnoise_alloc_top()
66 if (!data->cpu_data) in osnoise_alloc_top()
77 * osnoise_top_handler - this is the handler for osnoise tracer events
88 int cpu = record->cpu; in osnoise_top_handler()
92 data = tool->data; in osnoise_top_handler()
93 cpu_data = &data->cpu_data[cpu]; in osnoise_top_handler()
95 cpu_data->sum_cycles++; in osnoise_top_handler()
98 update_sum(&cpu_data->sum_runtime, &val); in osnoise_top_handler()
101 update_max(&cpu_data->max_noise, &val); in osnoise_top_handler()
102 update_sum(&cpu_data->sum_noise, &val); in osnoise_top_handler()
105 update_max(&cpu_data->max_sample, &val); in osnoise_top_handler()
108 update_sum(&cpu_data->hw_count, &val); in osnoise_top_handler()
111 update_sum(&cpu_data->nmi_count, &val); in osnoise_top_handler()
114 update_sum(&cpu_data->irq_count, &val); in osnoise_top_handler()
117 update_sum(&cpu_data->softirq_count, &val); in osnoise_top_handler()
120 update_sum(&cpu_data->thread_count, &val); in osnoise_top_handler()
126 * osnoise_top_header - print the header of the tool output
130 struct osnoise_params *params = to_osnoise_params(top->params); in osnoise_top_header()
131 struct trace_seq *s = top->trace.seq; in osnoise_top_header()
132 bool pretty = params->common.pretty_output; in osnoise_top_header()
135 get_duration(top->start_time, duration, sizeof(duration)); in osnoise_top_header()
142 if (params->mode == MODE_OSNOISE) { in osnoise_top_header()
145 } else if (params->mode == MODE_HWNOISE) { in osnoise_top_header()
146 trace_seq_printf(s, "Hardware-related Noise"); in osnoise_top_header()
166 if (params->mode == MODE_HWNOISE) in osnoise_top_header()
178 * clear_terminal - clears the output terminal
187 * osnoise_top_print - prints the output of a given CPU
191 struct osnoise_params *params = to_osnoise_params(tool->params); in osnoise_top_print()
192 struct trace_seq *s = tool->trace.seq; in osnoise_top_print()
198 data = tool->data; in osnoise_top_print()
199 cpu_data = &data->cpu_data[cpu]; in osnoise_top_print()
201 if (!cpu_data->sum_runtime) in osnoise_top_print()
204 percentage = ((cpu_data->sum_runtime - cpu_data->sum_noise) * 10000000) in osnoise_top_print()
205 / cpu_data->sum_runtime; in osnoise_top_print()
209 trace_seq_printf(s, "%3d #%-6d %12llu ", cpu, cpu_data->sum_cycles, cpu_data->sum_runtime); in osnoise_top_print()
210 trace_seq_printf(s, "%12llu ", cpu_data->sum_noise); in osnoise_top_print()
212 trace_seq_printf(s, "%12llu %12llu", cpu_data->max_noise, cpu_data->max_sample); in osnoise_top_print()
214 trace_seq_printf(s, "%12llu ", cpu_data->hw_count); in osnoise_top_print()
215 trace_seq_printf(s, "%12llu ", cpu_data->nmi_count); in osnoise_top_print()
217 if (params->mode == MODE_HWNOISE) { in osnoise_top_print()
222 trace_seq_printf(s, "%12llu ", cpu_data->irq_count); in osnoise_top_print()
223 trace_seq_printf(s, "%12llu ", cpu_data->softirq_count); in osnoise_top_print()
224 trace_seq_printf(s, "%12llu\n", cpu_data->thread_count); in osnoise_top_print()
228 * osnoise_print_stats - print data for all cpus
233 struct osnoise_params *params = to_osnoise_params(top->params); in osnoise_print_stats()
234 struct trace_instance *trace = &top->trace; in osnoise_print_stats()
235 static int nr_cpus = -1; in osnoise_print_stats()
238 if (nr_cpus == -1) in osnoise_print_stats()
241 if (!params->common.quiet) in osnoise_print_stats()
242 clear_terminal(trace->seq); in osnoise_print_stats()
247 if (params->common.cpus && !CPU_ISSET(i, &params->common.monitored_cpus)) in osnoise_print_stats()
252 trace_seq_do_printf(trace->seq); in osnoise_print_stats()
253 trace_seq_reset(trace->seq); in osnoise_print_stats()
258 * osnoise_top_usage - prints osnoise top usage message
265 " [-h] [-q] [-D] [-d s] [-a us] [-p us] [-r us] [-s us] [-S us] \\", in osnoise_top_usage()
266 " [-T us] [-t[file]] [-e sys[:event]] [--filter <filter>] [--trigger <trigger>] \\", in osnoise_top_usage()
267 " [-c cpu-list] [-H cpu-list] [-P priority] [-C[=cgroup_name]] [--warm-up s]", in osnoise_top_usage()
269 " -h/--help: print this menu", in osnoise_top_usage()
270 " -a/--auto: set automatic trace mode, stopping the session if argument in us sample is hit", in osnoise_top_usage()
271 " -p/--period us: osnoise period in us", in osnoise_top_usage()
272 " -r/--runtime us: osnoise runtime in us", in osnoise_top_usage()
273 " -s/--stop us: stop trace if a single sample is higher than the argument in us", in osnoise_top_usage()
274 " -S/--stop-total us: stop trace if the total sample is higher than the argument in us", in osnoise_top_usage()
275 " -T/--threshold us: the minimum delta to be considered a noise", in osnoise_top_usage()
276 " -c/--cpus cpu-list: list of cpus to run osnoise threads", in osnoise_top_usage()
277 " -H/--house-keeping cpus: run rtla control threads only on the given cpus", in osnoise_top_usage()
278 …" -C/--cgroup[=cgroup_name]: set cgroup, if no cgroup_name is passed, the rtla's cgroup will be … in osnoise_top_usage()
279 " -d/--duration time[s|m|h|d]: duration of the session", in osnoise_top_usage()
280 " -D/--debug: print debug info", in osnoise_top_usage()
281 " -t/--trace[file]: save the stopped trace to [file|osnoise_trace.txt]", in osnoise_top_usage()
282 …" -e/--event <sys:event>: enable the <sys:event> in the trace instance, multiple -e are allowed", in osnoise_top_usage()
283 " --filter <filter>: enable a trace event filter to the previous -e event", in osnoise_top_usage()
284 " --trigger <trigger>: enable a trace event trigger to the previous -e event", in osnoise_top_usage()
285 " -q/--quiet print only a summary at the end", in osnoise_top_usage()
286 " -P/--priority o:prio|r:prio|f:prio|d:runtime:period : set scheduling parameters", in osnoise_top_usage()
287 " o:prio - use SCHED_OTHER with prio", in osnoise_top_usage()
288 " r:prio - use SCHED_RR with prio", in osnoise_top_usage()
289 " f:prio - use SCHED_FIFO with prio", in osnoise_top_usage()
290 " d:runtime[us|ms|s]:period[us|ms|s] - use SCHED_DEADLINE with runtime and period", in osnoise_top_usage()
292 " --warm-up s: let the workload run for s seconds before collecting data", in osnoise_top_usage()
293 " --trace-buffer-size kB: set the per-cpu trace buffer size in kB", in osnoise_top_usage()
294 …" --on-threshold <action>: define action to be executed at stop-total threshold, multiple are… in osnoise_top_usage()
295 " --on-end: define action to be executed at measurement end, multiple are allowed", in osnoise_top_usage()
302 if (params->mode == MODE_OSNOISE) { in osnoise_top_usage()
304 "rtla osnoise top: a per-cpu summary of the OS noise (version %s)\n", in osnoise_top_usage()
310 if (params->mode == MODE_HWNOISE) { in osnoise_top_usage()
312 "rtla hwnoise: a summary of hardware-related noise (version %s)\n", in osnoise_top_usage()
328 * osnoise_top_parse_args - allocs, parse and fill the cmd line parameters
342 actions_init(&params->common.threshold_actions); in osnoise_top_parse_args()
343 actions_init(&params->common.end_actions); in osnoise_top_parse_args()
346 params->mode = MODE_HWNOISE; in osnoise_top_parse_args()
350 params->runtime = 750000; in osnoise_top_parse_args()
351 params->period = 1000000; in osnoise_top_parse_args()
362 {"house-keeping", required_argument, 0, 'H'}, in osnoise_top_parse_args()
369 {"stop-total", required_argument, 0, 'S'}, in osnoise_top_parse_args()
370 {"threshold", required_argument, 0, 'T'}, in osnoise_top_parse_args()
374 {"warm-up", required_argument, 0, '2'}, in osnoise_top_parse_args()
375 {"trace-buffer-size", required_argument, 0, '3'}, in osnoise_top_parse_args()
376 {"on-threshold", required_argument, 0, '4'}, in osnoise_top_parse_args()
377 {"on-end", required_argument, 0, '5'}, in osnoise_top_parse_args()
388 if (c == -1) in osnoise_top_parse_args()
394 params->common.stop_us = get_llong_from_str(optarg); in osnoise_top_parse_args()
396 /* set sample threshold to 1 */ in osnoise_top_parse_args()
397 params->threshold = 1; in osnoise_top_parse_args()
404 retval = parse_cpu_set(optarg, &params->common.monitored_cpus); in osnoise_top_parse_args()
406 osnoise_top_usage(params, "\nInvalid -c cpu list\n"); in osnoise_top_parse_args()
407 params->common.cpus = optarg; in osnoise_top_parse_args()
410 params->common.cgroup = 1; in osnoise_top_parse_args()
413 params->common.cgroup_name = NULL; in osnoise_top_parse_args()
416 params->common.cgroup_name = ++optarg; in osnoise_top_parse_args()
423 params->common.duration = parse_seconds_duration(optarg); in osnoise_top_parse_args()
424 if (!params->common.duration) in osnoise_top_parse_args()
425 osnoise_top_usage(params, "Invalid -d duration\n"); in osnoise_top_parse_args()
434 if (params->common.events) in osnoise_top_parse_args()
435 tevent->next = params->common.events; in osnoise_top_parse_args()
436 params->common.events = tevent; in osnoise_top_parse_args()
444 params->common.hk_cpus = 1; in osnoise_top_parse_args()
445 retval = parse_cpu_set(optarg, &params->common.hk_cpu_set); in osnoise_top_parse_args()
452 params->period = get_llong_from_str(optarg); in osnoise_top_parse_args()
453 if (params->period > 10000000) in osnoise_top_parse_args()
454 osnoise_top_usage(params, "Period longer than 10 s\n"); in osnoise_top_parse_args()
457 retval = parse_prio(optarg, &params->common.sched_param); in osnoise_top_parse_args()
458 if (retval == -1) in osnoise_top_parse_args()
459 osnoise_top_usage(params, "Invalid -P priority"); in osnoise_top_parse_args()
460 params->common.set_sched = 1; in osnoise_top_parse_args()
463 params->common.quiet = 1; in osnoise_top_parse_args()
466 params->runtime = get_llong_from_str(optarg); in osnoise_top_parse_args()
467 if (params->runtime < 100) in osnoise_top_parse_args()
468 osnoise_top_usage(params, "Runtime shorter than 100 us\n"); in osnoise_top_parse_args()
471 params->common.stop_us = get_llong_from_str(optarg); in osnoise_top_parse_args()
474 params->common.stop_total_us = get_llong_from_str(optarg); in osnoise_top_parse_args()
482 } else if (optind < argc && argv[optind][0] != '-') in osnoise_top_parse_args()
488 params->threshold = get_llong_from_str(optarg); in osnoise_top_parse_args()
491 if (params->common.events) { in osnoise_top_parse_args()
492 retval = trace_event_add_trigger(params->common.events, optarg); in osnoise_top_parse_args()
498 osnoise_top_usage(params, "--trigger requires a previous -e\n"); in osnoise_top_parse_args()
502 if (params->common.events) { in osnoise_top_parse_args()
503 retval = trace_event_add_filter(params->common.events, optarg); in osnoise_top_parse_args()
509 osnoise_top_usage(params, "--filter requires a previous -e\n"); in osnoise_top_parse_args()
513 params->common.warmup = get_llong_from_str(optarg); in osnoise_top_parse_args()
516 params->common.buffer_size = get_llong_from_str(optarg); in osnoise_top_parse_args()
519 retval = actions_parse(&params->common.threshold_actions, optarg, in osnoise_top_parse_args()
527 retval = actions_parse(&params->common.end_actions, optarg, in osnoise_top_parse_args()
540 actions_add_trace_output(&params->common.threshold_actions, trace_output); in osnoise_top_parse_args()
547 return &params->common; in osnoise_top_parse_args()
551 * osnoise_top_apply_config - apply the top configs to the initialized tool
556 struct osnoise_params *params = to_osnoise_params(tool->params); in osnoise_top_apply_config()
563 if (params->mode == MODE_HWNOISE) { in osnoise_top_apply_config()
564 retval = osnoise_set_irq_disable(tool->context, 1); in osnoise_top_apply_config()
571 if (isatty(STDOUT_FILENO) && !params->common.quiet) in osnoise_top_apply_config()
572 params->common.pretty_output = 1; in osnoise_top_apply_config()
577 return -1; in osnoise_top_apply_config()
581 * osnoise_init_top - initialize a osnoise top tool with parameters
594 tool->data = osnoise_alloc_top(nr_cpus); in osnoise_init_top()
595 if (!tool->data) { in osnoise_init_top()
600 tep_register_event_handler(tool->trace.tep, -1, "ftrace", "osnoise", in osnoise_init_top()