mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
Pull rtla trace tooling updates from Steven Rostedt:
- Officially add Tomas Glozar as a maintainer to RTLA tool
- Add for_each_monitored_cpu() helper
In multiple places, RTLA tools iterate over the list of CPUs running
tracer threads.
Use single helper instead of repeating the for/if combination.
- Remove unused variable option_index in argument parsing
RTLA tools use getopt_long() for argument parsing. For its last
argument, an unused variable "option_index" is passed.
Remove the variable and pass NULL to getopt_long() to shorten the
naturally long parsing functions, and make them more readable.
- Fix unassigned nr_cpus after code consolidation
In recent code consolidation, timerlat tool cleanup, previously
implemented separately for each tool, was moved to a common function
timerlat_free().
The cleanup relies on nr_cpus being set. This was not done in the new
function, leaving the variable uninitialized.
Initialize the variable properly, and remove silencing of compiler
warning for uninitialized variables.
- Stop tracing on user latency in BPF mode
Despite the name, rtla-timerlat's -T/--thread option sets timerlat's
stop_tracing_total_us option, which also stops tracing on
return-from-user latency, not only on thread latency.
Implement the same behavior also in BPF sample collection stop
tracing handler to avoid a discrepancy and restore correspondence of
behavior with the equivalent option of cyclictest.
- Fix threshold actions always triggering
A bug in threshold action logic caused the action to execute even if
tracing did not stop because of threshold.
Fix the logic to stop correctly.
- Fix few minor issues in tests
Extend tests that were shown to need it to 5s, fix osnoise test
calling timerlat by mistake, and use new, more reliable output
checking in timerlat's "top stop at failed action" test.
- Do not print usage on argument parsing error
RTLA prints the entire usage message on encountering errors in
argument parsing, like a malformed CPU list.
The usage message has gotten too long. Instead of printing it, use
newly added fatal() helper function to simply exit with the error
message, excluding the usage.
- Fix unintuitive -C/--cgroup interface
"-C cgroup" and "--cgroup cgroup" are invalid syntax, despite that
being a common way to specify an option with argument. Moreover,
using them fails silently and no cgroup is set.
Create new helper function to unify the handling of all such options
and allow all of:
-Xsomething
-X=something
-X something
as well as the equivalent for the long option.
- Fix -a overriding -t argument filename
Fix a bug where -a following -t custom_file.txt overrides the custom
filename with the default timerlat_trace.txt.
- Stop tracing correctly on multiple events at once
In some race scenarios, RTLA BPF sample collection might send
multiple stop tracing events via the BPF ringbuffer at once.
Compare the number of events for != 0 instead of == 1 to cover for
this scenario and stop tracing properly.
* tag 'trace-tools-v6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
rtla/timerlat: Exit top main loop on any non-zero wait_retval
rtla/tests: Don't rely on matching ^1ALL
rtla: Fix -a overriding -t argument
rtla: Fix -C/--cgroup interface
tools/rtla: Replace osnoise_hist_usage("...") with fatal("...")
tools/rtla: Replace osnoise_top_usage("...") with fatal("...")
tools/rtla: Replace timerlat_hist_usage("...") with fatal("...")
tools/rtla: Replace timerlat_top_usage("...") with fatal("...")
tools/rtla: Add fatal() and replace error handling pattern
rtla/tests: Fix osnoise test calling timerlat
rtla/tests: Extend action tests to 5s
tools/rtla: Fix --on-threshold always triggering
rtla/timerlat_bpf: Stop tracing on user latency
tools/rtla: Fix unassigned nr_cpus
tools/rtla: Remove unused optional option_index
tools/rtla: Add for_each_monitored_cpu() helper
MAINTAINERS: Add Tomas Glozar as a maintainer to RTLA tool
130 lines
5.1 KiB
Plaintext
130 lines
5.1 KiB
Plaintext
**-c**, **--cpus** *cpu-list*
|
|
|
|
Set the |tool| tracer to run the sample threads in the cpu-list.
|
|
|
|
By default, the |tool| tracer runs the sample threads on all CPUs.
|
|
|
|
**-H**, **--house-keeping** *cpu-list*
|
|
|
|
Run rtla control threads only on the given cpu-list.
|
|
|
|
If omitted, rtla will attempt to auto-migrate its main thread to any CPU that is not running any workload threads.
|
|
|
|
**-d**, **--duration** *time[s|m|h|d]*
|
|
|
|
Set the duration of the session.
|
|
|
|
**-D**, **--debug**
|
|
|
|
Print debug info.
|
|
|
|
**-e**, **--event** *sys:event*
|
|
|
|
Enable an event in the trace (**-t**) session. The argument can be a specific event, e.g., **-e** *sched:sched_switch*, or all events of a system group, e.g., **-e** *sched*. Multiple **-e** are allowed. It is only active when **-t** or **-a** are set.
|
|
|
|
**--filter** *<filter>*
|
|
|
|
Filter the previous **-e** *sys:event* event with *<filter>*. For further information about event filtering see https://www.kernel.org/doc/html/latest/trace/events.html#event-filtering.
|
|
|
|
**--trigger** *<trigger>*
|
|
Enable a trace event trigger to the previous **-e** *sys:event*.
|
|
If the *hist:* trigger is activated, the output histogram will be automatically saved to a file named *system_event_hist.txt*.
|
|
For example, the command:
|
|
|
|
rtla <command> <mode> -t -e osnoise:irq_noise --trigger="hist:key=desc,duration/1000:sort=desc,duration/1000:vals=hitcount"
|
|
|
|
Will automatically save the content of the histogram associated to *osnoise:irq_noise* event in *osnoise_irq_noise_hist.txt*.
|
|
|
|
For further information about event trigger see https://www.kernel.org/doc/html/latest/trace/events.html#event-triggers.
|
|
|
|
**-P**, **--priority** *o:prio|r:prio|f:prio|d:runtime:period*
|
|
|
|
Set scheduling parameters to the |tool| tracer threads, the format to set the priority are:
|
|
|
|
- *o:prio* - use SCHED_OTHER with *prio*;
|
|
- *r:prio* - use SCHED_RR with *prio*;
|
|
- *f:prio* - use SCHED_FIFO with *prio*;
|
|
- *d:runtime[us|ms|s]:period[us|ms|s]* - use SCHED_DEADLINE with *runtime* and *period* in nanoseconds.
|
|
|
|
If not set, tracer threads keep their default priority. For rtla user threads, it is set to SCHED_FIFO with priority 95. For kernel threads, see *osnoise* and *timerlat* tracer documentation for the running kernel version.
|
|
|
|
**-C**, **--cgroup** \[*cgroup*]
|
|
|
|
Set a *cgroup* to the tracer's threads. If the **-C** option is passed without arguments, the tracer's thread will inherit **rtla**'s *cgroup*. Otherwise, the threads will be placed on the *cgroup* passed to the option.
|
|
|
|
If not set, the behavior differs between workload types. User workloads created by rtla will inherit rtla's cgroup. Kernel workloads are assigned the root cgroup.
|
|
|
|
**--warm-up** *s*
|
|
|
|
After starting the workload, let it run for *s* seconds before starting collecting the data, allowing the system to warm-up. Statistical data generated during warm-up is discarded.
|
|
|
|
**--trace-buffer-size** *kB*
|
|
Set the per-cpu trace buffer size in kB for the tracing output.
|
|
|
|
If not set, the default tracefs buffer size is used.
|
|
|
|
**--on-threshold** *action*
|
|
|
|
Defines an action to be executed when tracing is stopped on a latency threshold
|
|
specified by |threshold|.
|
|
|
|
Multiple --on-threshold actions may be specified, and they will be executed in
|
|
the order they are provided. If any action fails, subsequent actions in the list
|
|
will not be executed.
|
|
|
|
Supported actions are:
|
|
|
|
- *trace[,file=<filename>]*
|
|
|
|
Saves trace output, optionally taking a filename. Alternative to -t/--trace.
|
|
Note that unlike -t/--trace, specifying this multiple times will result in
|
|
the trace being saved multiple times.
|
|
|
|
- *signal,num=<sig>,pid=<pid>*
|
|
|
|
Sends signal to process. "parent" might be specified in place of pid to target
|
|
the parent process of rtla.
|
|
|
|
- *shell,command=<command>*
|
|
|
|
Execute shell command.
|
|
|
|
- *continue*
|
|
|
|
Continue tracing after actions are executed instead of stopping.
|
|
|
|
Example:
|
|
|
|
$ rtla |tool| |thresharg| 20 --on-threshold trace
|
|
--on-threshold shell,command="grep ipi_send |tracer|\_trace.txt"
|
|
--on-threshold signal,num=2,pid=parent
|
|
|
|
This will save a trace with the default filename "|tracer|\_trace.txt", print its
|
|
lines that contain the text "ipi_send" on standard output, and send signal 2
|
|
(SIGINT) to the parent process.
|
|
|
|
Performance Considerations:
|
|
|
|
|actionsperf|
|
|
|
|
**--on-end** *action*
|
|
|
|
Defines an action to be executed at the end of tracing.
|
|
|
|
Multiple --on-end actions can be specified, and they will be executed in the order
|
|
they are provided. If any action fails, subsequent actions in the list will not be
|
|
executed.
|
|
|
|
See the documentation for **--on-threshold** for the list of supported actions, with
|
|
the exception that *continue* has no effect.
|
|
|
|
Example:
|
|
|
|
$ rtla |tool| -d 5s --on-end trace
|
|
|
|
This runs rtla with the default options, and saves trace output at the end.
|
|
|
|
**-h**, **--help**
|
|
|
|
Print help menu.
|