| .. |threshold| replace:: **-a/--auto**, **-i/--irq**, or **-T/--thread** |
| .. |thresharg| replace:: -T |
| .. |tracer| replace:: timerlat |
| |
| .. |actionsperf| replace:: |
| For time-sensitive actions, it is recommended to run **rtla timerlat** with BPF |
| support and RT priority. Note that due to implementational limitations, actions |
| might be delayed up to one second after tracing is stopped if BPF mode is not |
| available or disabled. |
| |
| **-a**, **--auto** *us* |
| |
| Set the automatic trace mode. This mode sets some commonly used options |
| while debugging the system. It is equivalent to use **-T** *us* **-s** *us* |
| **-t**. By default, *timerlat* tracer uses FIFO:95 for *timerlat* threads, |
| thus equivalent to **-P** *f:95*. |
| |
| **-p**, **--period** *us* |
| |
| Set the *timerlat* tracer period in microseconds. |
| |
| **-i**, **--irq** *us* |
| |
| Stop trace if the *IRQ* latency is higher than the argument in us. |
| |
| **-T**, **--thread** *us* |
| |
| Stop trace if the *Thread* latency is higher than the argument in us. |
| |
| **-s**, **--stack** *us* |
| |
| Save the stack trace at the *IRQ* if a *Thread* latency is higher than the |
| argument in us. |
| |
| **-t**, **--trace** \[*file*] |
| |
| Save the stopped trace to [*file|timerlat_trace.txt*]. |
| |
| **--dma-latency** *us* |
| Set the /dev/cpu_dma_latency to *us*, aiming to bound exit from idle latencies. |
| *cyclictest* sets this value to *0* by default, use **--dma-latency** *0* to have |
| similar results. |
| |
| **--deepest-idle-state** *n* |
| Disable idle states higher than *n* for cpus that are running timerlat threads to |
| reduce exit from idle latencies. If *n* is -1, all idle states are disabled. |
| On exit from timerlat, the idle state setting is restored to its original state |
| before running timerlat. |
| |
| Requires rtla to be built with libcpupower. |
| |
| **-k**, **--kernel-threads** |
| |
| Use timerlat kernel-space threads, in contrast of **-u**. |
| |
| **-u**, **--user-threads** |
| |
| Set timerlat to run without a workload, and then dispatches user-space workloads |
| to wait on the timerlat_fd. Once the workload is awakened, it goes to sleep again |
| adding so the measurement for the kernel-to-user and user-to-kernel to the tracer |
| output. **--user-threads** will be used unless the user specify **-k**. |
| |
| **-U**, **--user-load** |
| |
| Set timerlat to run without workload, waiting for the user to dispatch a per-cpu |
| task that waits for a new period on the tracing/osnoise/per_cpu/cpu$ID/timerlat_fd. |
| See linux/tools/rtla/example/timerlat_load.py for an example of user-load code. |
| |
| **--bpf-action** *bpf-program* |
| |
| Loads a BPF program from an ELF file and executes it when a latency threshold is exceeded. |
| |
| The BPF program must be a valid ELF file loadable with libbpf. The program must contain |
| a function named ``action_handler``, stored in an ELF section with the ``tp_`` prefix. |
| The prefix is used by libbpf to set BPF program type to BPF_PROG_TYPE_TRACEPOINT. |
| |
| The program receives a ``struct trace_event_raw_timerlat_sample`` parameter |
| containing timerlat sample data. |
| |
| An example is provided in ``tools/tracing/rtla/example/timerlat_bpf_action.c``. |
| This example demonstrates how to create a BPF program that prints latency information using |
| bpf_trace_printk() when a threshold is exceeded. |
| |
| **Note**: BPF actions require BPF support to be available. If BPF is not available |
| or disabled, the tool falls back to tracefs mode and BPF actions are not supported. |