sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget0/translations/zh_CN/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/tools/rtla/rtla-timerlat-topmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hrtla-timerlat-toph]hrtla-timerlat-top}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhJ/var/lib/git/docbuild/linux/Documentation/tools/rtla/rtla-timerlat-top.rsthKubh)}(hhh](h)}(h+Measures the operating system timer latencyh]h+Measures the operating system timer latency}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hManual sectionh]hManual section}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h1 h]h paragraph)}(h1h]h1}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSYNOPSISh]hSYNOPSIS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK ubh)}(h%**rtla timerlat top** [*OPTIONS*] ...h](hstrong)}(h**rtla timerlat top**h]hrtla timerlat top}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh [}(hjhhhNhNubhemphasis)}(h *OPTIONS*h]hOPTIONS}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh] ...}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hj hhubeh}(h]synopsisah ]h"]synopsisah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h DESCRIPTIONh]h DESCRIPTION}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhhhhKubh)}(hXBThe **rtla timerlat** tool is an interface for the *timerlat* tracer. The *timerlat* tracer dispatches a kernel thread per-cpu. These threads set a periodic timer to wake themselves up and go back to sleep. After the wakeup, they collect and generate useful information for the debugging of operating system timer latency.h](hThe }(hjfhhhNhNubj )}(h**rtla timerlat**h]h rtla timerlat}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh tool is an interface for the }(hjfhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjfubh tracer. The }(hjfhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjfubh tracer dispatches a kernel thread per-cpu. These threads set a periodic timer to wake themselves up and go back to sleep. After the wakeup, they collect and generate useful information for the debugging of operating system timer latency.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh8Documentation/tools/rtla/common_timerlat_description.rsthKhjUhhubh)}(hThe *timerlat* tracer outputs information in two ways. It periodically prints the timer latency at the timer *IRQ* handler and the *Thread* handler. It also enable the trace of the most relevant information via **osnoise:** tracepoints.h](hThe }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh_ tracer outputs information in two ways. It periodically prints the timer latency at the timer }(hjhhhNhNubj4)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh handler and the }(hjhhhNhNubj4)}(h*Thread*h]hThread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhH handler. It also enable the trace of the most relevant information via }(hjhhhNhNubj )}(h **osnoise:**h]hosnoise:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh tracepoints.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjUhhubh)}(hThe **rtla timerlat top** displays a summary of the periodic output from the *timerlat* tracer. It also provides information for each operating system noise via the **osnoise:** tracepoints that can be seem with the option **-T**.h](hThe }(hjhhhNhNubj )}(h**rtla timerlat top**h]hrtla timerlat top}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 displays a summary of the periodic output from the }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhN tracer. It also provides information for each operating system noise via the }(hjhhhNhNubj )}(h **osnoise:**h]hosnoise:}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. tracepoints that can be seem with the option }(hjhhhNhNubj )}(h**-T**h]h-T}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjUhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOPTIONSh]hOPTIONS}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hhhhhKubh)}(h**-a**, **--auto** *us*h](j )}(h**-a**h]h-a}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh, }(hjphhhNhNubj )}(h **--auto**h]h--auto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh }(hjphhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjpubeh}(h]h ]h"]h$]h&]uh1hh4Documentation/tools/rtla/common_timerlat_options.rsthKhj_hhubh block_quote)}(hXSet 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 equilavent to **-P** *f:95*. h]h)}(hXSet 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 equilavent to **-P** *f:95*.h](h|Set the automatic trace mode. This mode sets some commonly used options while debugging the system. It is equivalent to use }(hjhhhNhNubj )}(h**-T**h]h-T}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh }hjsbj )}(h**-s**h]h-s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }hjsbj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh }(hjhhhNhNubj )}(h**-t**h]h-t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. By default, }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer uses FIFO:95 for }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh threads, thus equilavent to }(hjhhhNhNubj )}(h**-P**h]h-P}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }hjsbj4)}(h*f:95*h]hf:95}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**-p**, **--period** *us*h](j )}(h**-p**h]h-p}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh, }(hjihhhNhNubj )}(h **--period**h]h--period}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh }(hjihhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjiubeh}(h]h ]h"]h$]h&]uh1hhjhKhj_hhubj)}(h2Set the *timerlat* tracer period in microseconds. h]h)}(h1Set the *timerlat* tracer period in microseconds.h](hSet the }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer period in microseconds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjhK hj_hhubh)}(h**-i**, **--irq** *us*h](j )}(h**-i**h]h-i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--irq**h]h--irq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhK hj_hhubj)}(hCStop trace if the *IRQ* latency is higher than the argument in us. h]h)}(hBStop trace if the *IRQ* latency is higher than the argument in us.h](hStop trace if the }(hjhhhNhNubj4)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh+ latency is higher than the argument in us.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**-T**, **--thread** *us*h](j )}(h**-T**h]h-T}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh, }(hj5hhhNhNubj )}(h **--thread**h]h--thread}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh }(hj5hhhNhNubj4)}(h*us*h]hus}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj5ubeh}(h]h ]h"]h$]h&]uh1hhjhKhj_hhubj)}(hFStop trace if the *Thread* latency is higher than the argument in us. h]h)}(hEStop trace if the *Thread* latency is higher than the argument in us.h](hStop trace if the }(hjuhhhNhNubj4)}(h*Thread*h]hThread}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjuubh+ latency is higher than the argument in us.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjqubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**-s**, **--stack** *us*h](j )}(h**-s**h]h-s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--stack**h]h--stack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhj_hhubj)}(h[Save the stack trace at the *IRQ* if a *Thread* latency is higher than the argument in us. h]h)}(hZSave the stack trace at the *IRQ* if a *Thread* latency is higher than the argument in us.h](hSave the stack trace at the }(hjhhhNhNubj4)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh if a }(hjhhhNhNubj4)}(h*Thread*h]hThread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh+ latency is higher than the argument in us.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**-t**, **--trace** \[*file*]h](j )}(h**-t**h]h-t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--trace**h]h--trace}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh [}(hjhhhNhNubj4)}(h*file*h]hfile}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh]}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj_hhubj)}(h7Save the stopped trace to [*file|timerlat_trace.txt*]. h]h)}(h6Save the stopped trace to [*file|timerlat_trace.txt*].h](hSave the stopped trace to [}(hjWhhhNhNubj4)}(h*file|timerlat_trace.txt*h]hfile|timerlat_trace.txt}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjWubh].}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjSubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubhdefinition_list)}(hhh](hdefinition_list_item)}(h**--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. h](hterm)}(h**--dma-latency** *us*h](j )}(h**--dma-latency**h]h --dma-latency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubh definition)}(hhh]h)}(hSet 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.h](h Set the /dev/cpu_dma_latency to }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh,, aiming to bound exit from idle latencies. }(hjhhhNhNubj4)}(h *cyclictest*h]h cyclictest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh sets this value to }(hjhhhNhNubj4)}(h*0*h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh by default, use }(hjhhhNhNubj )}(h**--dma-latency**h]h --dma-latency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*0*h]h0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh to have similar results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(hXR**--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. h](j)}(h**--deepest-idle-state** *n*h](j )}(h**--deepest-idle-state**h]h--deepest-idle-state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh }(hj1hhhNhNubj4)}(h*n*h]hn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj1ubeh}(h]h ]h"]h$]h&]uh1jhjhK(hj-ubj)}(hhh](h)}(hXDisable 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.h](h Disable idle states higher than }(hj^hhhNhNubj4)}(h*n*h]hn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj^ubhS for cpus that are running timerlat threads to reduce exit from idle latencies. If }(hj^hhhNhNubj4)}(h*n*h]hn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj^ubh is -1, all idle states are disabled. On exit from timerlat, the idle state setting is restored to its original state before running timerlat.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK#hj[ubh)}(h+Requires rtla to be built with libcpupower.h]h+Requires rtla to be built with libcpupower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hj[ubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjhhubeh}(h]h ]h"]h$]h&]uh1j}hj_hhhjhNubh)}(h**-k**, **--kernel-threads**h](j )}(h**-k**h]h-k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h**--kernel-threads**h]h--kernel-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhK*hj_hhubj)}(h:Use timerlat kernel-space threads, in contrast of **-u**. h]h)}(h9Use timerlat kernel-space threads, in contrast of **-u**.h](h2Use timerlat kernel-space threads, in contrast of }(hjhhhNhNubj )}(h**-u**h]h-u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjhK,hj_hhubh)}(h**-u**, **--user-threads**h](j )}(h**-u**h]h-u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h**--user-threads**h]h--user-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhK.hj_hhubj)}(hX;Set timerlat to run without a workload, and then dispatches user-space workloads to wait on the timerlat_fd. Once the workload is awakes, 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**. h]h)}(hX:Set timerlat to run without a workload, and then dispatches user-space workloads to wait on the timerlat_fd. Once the workload is awakes, 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**.h](hSet timerlat to run without a workload, and then dispatches user-space workloads to wait on the timerlat_fd. Once the workload is awakes, it goes to sleep again adding so the measurement for the kernel-to-user and user-to-kernel to the tracer output. }(hj2hhhNhNubj )}(h**--user-threads**h]h--user-threads}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh& will be used unless the user specify }(hj2hhhNhNubj )}(h**-k**h]h-k}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK0hj.ubah}(h]h ]h"]h$]h&]uh1jhjhK0hj_hhubh)}(h**-U**, **--user-load**h](j )}(h**-U**h]h-U}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh, }(hjjhhhNhNubj )}(h**--user-load**h]h --user-load}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1hhjhK5hj_hhubj)}(hSet 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/sample/timerlat_load.py for an example of user-load code. h]h)}(hSet 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/sample/timerlat_load.py for an example of user-load code.h]hSet 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/sample/timerlat_load.py for an example of user-load code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjhK7hj_hhubh)}(h**-q**, **--quiet**h](j )}(h**-q**h]h-q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--quiet**h]h--quiet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hh/Documentation/tools/rtla/common_top_options.rsthKhj_hhubj)}(h0Print only a summary at the end of the session. h]h)}(h/Print only a summary at the end of the session.h]h/Print only a summary at the end of the session.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**-c**, **--cpus** *cpu-list*h](j )}(h**-c**h]h-c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--cpus**h]h--cpus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h *cpu-list*h]hcpu-list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hh+Documentation/tools/rtla/common_options.rsthKhj_hhubj)}(hBSet the osnoise tracer to run the sample threads in the cpu-list. h]h)}(hASet the osnoise tracer to run the sample threads in the cpu-list.h]hASet the osnoise tracer to run the sample threads in the cpu-list.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj+hKhj_hhubh)}(h&**-H**, **--house-keeping** *cpu-list*h](j )}(h**-H**h]h-H}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh, }(hjDhhhNhNubj )}(h**--house-keeping**h]h--house-keeping}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh }(hjDhhhNhNubj4)}(h *cpu-list*h]hcpu-list}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj_hhubj)}(h5Run rtla control threads only on the given cpu-list. h]h)}(h4Run rtla control threads only on the given cpu-list.h]h4Run rtla control threads only on the given cpu-list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhjubah}(h]h ]h"]h$]h&]uh1jhj+hKhj_hhubh)}(h&**-d**, **--duration** *time[s|m|h|d]*h](j )}(h**-d**h]h-d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h**--duration**h]h --duration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*time[s|m|h|d]*h]h time[s|m|h|d]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhj+hK hj_hhubj)}(h!Set the duration of the session. h]h)}(h Set the duration of the session.h]h Set the duration of the session.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK hjubah}(h]h ]h"]h$]h&]uh1jhj+hK hj_hhubh)}(h**-D**, **--debug**h](j )}(h**-D**h]h-D}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--debug**h]h--debug}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhj+hK hj_hhubj)}(hPrint debug info. h]h)}(hPrint debug info.h]hPrint debug info.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj ubah}(h]h ]h"]h$]h&]uh1jhj+hKhj_hhubh)}(h**-e**, **--event** *sys:event*h](j )}(h**-e**h]h-e}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubh, }(hj. hhhNhNubj )}(h **--event**h]h--event}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubh }(hj. hhhNhNubj4)}(h *sys:event*h]h sys:event}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj. ubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj_hhubj)}(hEnable 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. h]h)}(hEnable 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.h](hEnable an event in the trace (}(hjn hhhNhNubj )}(h**-t**h]h-t}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh7) session. The argument can be a specific event, e.g., }(hjn hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh }(hjn hhhNhNubj4)}(h*sched:sched_switch*h]hsched:sched_switch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjn ubh), or all events of a system group, e.g., }(hjn hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh }hjn sbj4)}(h*sched*h]hsched}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjn ubh . Multiple }(hjn hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh% are allowed. It is only active when }(hjn hhhNhNubj )}(h**-t**h]h-t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh or }(hjn hhhNhNubj )}(h**-a**h]h-a}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh are set.}(hjn hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhjj ubah}(h]h ]h"]h$]h&]uh1jhj+hKhj_hhubh)}(h**--filter** **h](j )}(h **--filter**h]h--filter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h **h]h}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj_hhubj)}(hFilter the previous **-e** *sys:event* event with **. For further information about event filtering see https://www.kernel.org/doc/html/latest/trace/events.html#event-filtering. h]h)}(hFilter the previous **-e** *sys:event* event with **. For further information about event filtering see https://www.kernel.org/doc/html/latest/trace/events.html#event-filtering.h](hFilter the previous }(hj@ hhhNhNubj )}(h**-e**h]h-e}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ ubh }(hj@ hhhNhNubj4)}(h *sys:event*h]h sys:event}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj@ ubh event with }(hj@ hhhNhNubj4)}(h **h]h}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj@ ubh4. For further information about event filtering see }(hj@ hhhNhNubh reference)}(hHhttps://www.kernel.org/doc/html/latest/trace/events.html#event-filteringh]hHhttps://www.kernel.org/doc/html/latest/trace/events.html#event-filtering}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j~ hj@ ubh.}(hj@ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj< ubah}(h]h ]h"]h$]h&]uh1jhj+hKhj_hhubj~)}(hhh]j)}(hXj**--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 -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. h](j)}(h**--trigger** **h](j )}(h **--trigger**h]h --trigger}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h **h]h }(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1jhj+hK"hj ubj)}(hhh](h)}(hEnable 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:h](h-Enable a trace event trigger to the previous }(hj hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h *sys:event*h]h sys:event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh . If the }(hj hhhNhNubj4)}(h*hist:*h]hhist:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubhX trigger is activated, the output histogram will be automatically saved to a file named }(hj hhhNhNubj4)}(h*system_event_hist.txt*h]hsystem_event_hist.txt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh. For example, the command:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj ubh)}(h{rtla -t -e osnoise:irq_noise --trigger="hist:key=desc,duration/1000:sort=desc,duration/1000:vals=hitcount"h]hrtla -t -e osnoise:irq_noise --trigger=”hist:key=desc,duration/1000:sort=desc,duration/1000:vals=hitcount”}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj ubh)}(h}Will automatically save the content of the histogram associated to *osnoise:irq_noise* event in *osnoise_irq_noise_hist.txt*.h](hCWill automatically save the content of the histogram associated to }(hj7 hhhNhNubj4)}(h*osnoise:irq_noise*h]hosnoise:irq_noise}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj7 ubh event in }(hj7 hhhNhNubj4)}(h*osnoise_irq_noise_hist.txt*h]hosnoise_irq_noise_hist.txt}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj7 ubh.}(hj7 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK hj ubh)}(hxFor further information about event trigger see https://www.kernel.org/doc/html/latest/trace/events.html#event-triggers.h](h0For further information about event trigger see }(hji hhhNhNubj )}(hGhttps://www.kernel.org/doc/html/latest/trace/events.html#event-triggersh]hGhttps://www.kernel.org/doc/html/latest/trace/events.html#event-triggers}(hjq hhhNhNubah}(h]h ]h"]h$]h&]refurijs uh1j~ hji ubh.}(hji hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK"hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj+hK"hj ubah}(h]h ]h"]h$]h&]uh1j}hj_hhhj+hNubh)}(h>**-P**, **--priority** *o:prio|r:prio|f:prio|d:runtime:period*h](j )}(h**-P**h]h-P}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj )}(h**--priority**h]h --priority}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h'*o:prio|r:prio|f:prio|d:runtime:period*h]h%o:prio|r:prio|f:prio|d:runtime:period}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1hhj+hK$hj_hhubj)}(hX@Set scheduling parameters to the osnoise 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. h](h)}(h\Set scheduling parameters to the osnoise tracer threads, the format to set the priority are:h]h\Set scheduling parameters to the osnoise tracer threads, the format to set the priority are:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK&hj ubh bullet_list)}(hhh](h list_item)}(h'*o:prio* - use SCHED_OTHER with *prio*;h]h)}(hj h](j4)}(h*o:prio*h]ho:prio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh - use SCHED_OTHER with }(hj hhhNhNubj4)}(h*prio*h]hprio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh;}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK(hj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(h$*r:prio* - use SCHED_RR with *prio*;h]h)}(hj* h](j4)}(h*r:prio*h]hr:prio}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj, ubh - use SCHED_RR with }(hj, hhhNhNubj4)}(h*prio*h]hprio}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj, ubh;}(hj, hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK)hj( ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(h&*f:prio* - use SCHED_FIFO with *prio*;h]h)}(hja h](j4)}(h*f:prio*h]hf:prio}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjc ubh - use SCHED_FIFO with }(hjc hhhNhNubj4)}(h*prio*h]hprio}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjc ubh;}(hjc hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK*hj_ ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hf*d:runtime[us|ms|s]:period[us|ms|s]* - use SCHED_DEADLINE with *runtime* and *period* in nanoseconds. h]h)}(he*d:runtime[us|ms|s]:period[us|ms|s]* - use SCHED_DEADLINE with *runtime* and *period* in nanoseconds.h](j4)}(h$*d:runtime[us|ms|s]:period[us|ms|s]*h]h"d:runtime[us|ms|s]:period[us|ms|s]}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh - use SCHED_DEADLINE with }(hj hhhNhNubj4)}(h *runtime*h]hruntime}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh and }(hj hhhNhNubj4)}(h*period*h]hperiod}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh in nanoseconds.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK+hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]bullet-uh1j hj+hK(hj ubeh}(h]h ]h"]h$]h&]uh1jhj+hK&hj_hhubh)}(h **-C**, **--cgroup**\[*=cgroup*]h](j )}(h**-C**h]h-C}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj )}(h **--cgroup**h]h--cgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh[}(hj hhhNhNubj4)}(h *=cgroup*h]h=cgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh]}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK-hj_hhubj)}(hSet 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. h]h)}(hSet 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.h](hSet a }(hj2 hhhNhNubj4)}(h*cgroup*h]hcgroup}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2 ubh# to the tracer’s threads. If the }(hj2 hhhNhNubj )}(h**-C**h]h-C}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2 ubhH option is passed without arguments, the tracer’s thread will inherit }(hj2 hhhNhNubj )}(h**rtla**h]hrtla}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2 ubh’s }(hj2 hhhNhNubj4)}(h*cgroup*h]hcgroup}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2 ubh/. Otherwise, the threads will be placed on the }(hj2 hhhNhNubj4)}(h*cgroup*h]hcgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2 ubh passed to the option.}(hj2 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK/hj. ubah}(h]h ]h"]h$]h&]uh1jhj+hK/hj_hhubh)}(h**--warm-up** *s*h](j )}(h **--warm-up**h]h --warm-up}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h*s*h]hs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1hhj+hK1hj_hhubj)}(hAfter 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. h]h)}(hAfter 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.h](h,After starting the workload, let it run for }(hj hhhNhNubj4)}(h*s*h]hs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh seconds before starting collecting the data, allowing the system to warm-up. Statistical data generated during warm-up is discarded.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hK3hj ubah}(h]h ]h"]h$]h&]uh1jhj+hK3hj_hhubj~)}(hhh]j)}(h]**--trace-buffer-size** *kB* Set the per-cpu trace buffer size in kB for the tracing output. h](j)}(h**--trace-buffer-size** *kB*h](j )}(h**--trace-buffer-size**h]h--trace-buffer-size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h*kB*h]hkB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1jhj+hK6hj ubj)}(hhh]h)}(h?Set the per-cpu trace buffer size in kB for the tracing output.h]h?Set the per-cpu trace buffer size in kB for the tracing output.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK6hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj+hK6hj ubah}(h]h ]h"]h$]h&]uh1j}hj_hhhj+hNubh)}(h**-h**, **--help**h](j )}(h**-h**h]h-h}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh, }(hjHhhhNhNubj )}(h **--help**h]h--help}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1hhj+hK8hj_hhubj)}(hPrint help menu. h]h)}(hPrint help menu.h]hPrint help menu.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK:hjrubah}(h]h ]h"]h$]h&]uh1jhj+hK:hj_hhubh)}(h**--dump-tasks**h]j )}(hjh]h --dump-tasks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/Documentation/tools/rtla/common_timerlat_aa.rsthKhj_hhubj)}(hUprints the task running on all CPUs if stop conditions are met (depends on !--no-aa) h]h)}(hTprints the task running on all CPUs if stop conditions are met (depends on !--no-aa)h]hTprints the task running on all CPUs if stop conditions are met (depends on !--no-aa)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h **--no-aa**h]j )}(hjh]h--no-aa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhKhj_hhubj)}(h8disable auto-analysis, reducing rtla timerlat cpu usage h]h)}(h7disable auto-analysis, reducing rtla timerlat cpu usageh]h7disable auto-analysis, reducing rtla timerlat cpu usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj_hhubh)}(h**--aa-only** *us*h](j )}(h **--aa-only**h]h --aa-only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhhhK#hj_hhubj)}(hXSet stop tracing conditions and run without collecting and displaying statistics. Print the auto-analysis if the system hits the stop tracing condition. This option is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of collecting the statistics. h]h)}(hXSet stop tracing conditions and run without collecting and displaying statistics. Print the auto-analysis if the system hits the stop tracing condition. This option is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of collecting the statistics.h]hXSet stop tracing conditions and run without collecting and displaying statistics. Print the auto-analysis if the system hits the stop tracing condition. This option is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of collecting the statistics.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhhhK%hj_hhubeh}(h]optionsah ]h"]optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hEXAMPLEh]hEXAMPLE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hhhhhK+ubh)}(hIn the example below, the timerlat tracer is dispatched in cpus *1-23* in the automatic trace mode, instructing the tracer to stop if a *40 us* latency or higher is found::h](h@In the example below, the timerlat tracer is dispatched in cpus }(hjDhhhNhNubj4)}(h*1-23*h]h1-23}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubhB in the automatic trace mode, instructing the tracer to stop if a }(hjDhhhNhNubj4)}(h*40 us*h]h40 us}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubh latency or higher is found:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hj3hhubh literal_block)}(hX# timerlat -a 40 -c 1-23 -q Timer Latency 0 00:00:12 | IRQ Timer Latency (us) | Thread Timer Latency (us) CPU COUNT | cur min avg max | cur min avg max 1 #12322 | 0 0 1 15 | 10 3 9 31 2 #12322 | 3 0 1 12 | 10 3 9 23 3 #12322 | 1 0 1 21 | 8 2 8 34 4 #12322 | 1 0 1 17 | 10 2 11 33 5 #12322 | 0 0 1 12 | 8 3 8 25 6 #12322 | 1 0 1 14 | 16 3 11 35 7 #12322 | 0 0 1 14 | 9 2 8 29 8 #12322 | 1 0 1 22 | 9 3 9 34 9 #12322 | 0 0 1 14 | 8 2 8 24 10 #12322 | 1 0 0 12 | 9 3 8 24 11 #12322 | 0 0 0 15 | 6 2 7 29 12 #12321 | 1 0 0 13 | 5 3 8 23 13 #12319 | 0 0 1 14 | 9 3 9 26 14 #12321 | 1 0 0 13 | 6 2 8 24 15 #12321 | 1 0 1 15 | 12 3 11 27 16 #12318 | 0 0 1 13 | 7 3 10 24 17 #12319 | 0 0 1 13 | 11 3 9 25 18 #12318 | 0 0 0 12 | 8 2 8 20 19 #12319 | 0 0 1 18 | 10 2 9 28 20 #12317 | 0 0 0 20 | 9 3 8 34 21 #12318 | 0 0 0 13 | 8 3 8 28 22 #12319 | 0 0 1 11 | 8 3 10 22 23 #12320 | 28 0 1 28 | 41 3 11 41 rtla timerlat hit stop tracing ## CPU 23 hit stop tracing, analyzing it ## IRQ handler delay: 27.49 us (65.52 %) IRQ latency: 28.13 us Timerlat IRQ duration: 9.59 us (22.85 %) Blocking thread: 3.79 us (9.03 %) objtool:49256 3.79 us Blocking thread stacktrace -> timerlat_irq -> __hrtimer_run_queues -> hrtimer_interrupt -> __sysvec_apic_timer_interrupt -> sysvec_apic_timer_interrupt -> asm_sysvec_apic_timer_interrupt -> _raw_spin_unlock_irqrestore -> cgroup_rstat_flush_locked -> cgroup_rstat_flush_irqsafe -> mem_cgroup_flush_stats -> mem_cgroup_wb_stats -> balance_dirty_pages -> balance_dirty_pages_ratelimited_flags -> btrfs_buffered_write -> btrfs_do_write_iter -> vfs_write -> __x64_sys_pwrite64 -> do_syscall_64 -> entry_SYSCALL_64_after_hwframe ------------------------------------------------------------------------ Thread latency: 41.96 us (100%) The system has exit from idle latency! Max timerlat IRQ latency from idle: 17.48 us in cpu 4 Saving trace to timerlat_trace.txth]hX# timerlat -a 40 -c 1-23 -q Timer Latency 0 00:00:12 | IRQ Timer Latency (us) | Thread Timer Latency (us) CPU COUNT | cur min avg max | cur min avg max 1 #12322 | 0 0 1 15 | 10 3 9 31 2 #12322 | 3 0 1 12 | 10 3 9 23 3 #12322 | 1 0 1 21 | 8 2 8 34 4 #12322 | 1 0 1 17 | 10 2 11 33 5 #12322 | 0 0 1 12 | 8 3 8 25 6 #12322 | 1 0 1 14 | 16 3 11 35 7 #12322 | 0 0 1 14 | 9 2 8 29 8 #12322 | 1 0 1 22 | 9 3 9 34 9 #12322 | 0 0 1 14 | 8 2 8 24 10 #12322 | 1 0 0 12 | 9 3 8 24 11 #12322 | 0 0 0 15 | 6 2 7 29 12 #12321 | 1 0 0 13 | 5 3 8 23 13 #12319 | 0 0 1 14 | 9 3 9 26 14 #12321 | 1 0 0 13 | 6 2 8 24 15 #12321 | 1 0 1 15 | 12 3 11 27 16 #12318 | 0 0 1 13 | 7 3 10 24 17 #12319 | 0 0 1 13 | 11 3 9 25 18 #12318 | 0 0 0 12 | 8 2 8 20 19 #12319 | 0 0 1 18 | 10 2 9 28 20 #12317 | 0 0 0 20 | 9 3 8 34 21 #12318 | 0 0 0 13 | 8 3 8 28 22 #12319 | 0 0 1 11 | 8 3 10 22 23 #12320 | 28 0 1 28 | 41 3 11 41 rtla timerlat hit stop tracing ## CPU 23 hit stop tracing, analyzing it ## IRQ handler delay: 27.49 us (65.52 %) IRQ latency: 28.13 us Timerlat IRQ duration: 9.59 us (22.85 %) Blocking thread: 3.79 us (9.03 %) objtool:49256 3.79 us Blocking thread stacktrace -> timerlat_irq -> __hrtimer_run_queues -> hrtimer_interrupt -> __sysvec_apic_timer_interrupt -> sysvec_apic_timer_interrupt -> asm_sysvec_apic_timer_interrupt -> _raw_spin_unlock_irqrestore -> cgroup_rstat_flush_locked -> cgroup_rstat_flush_irqsafe -> mem_cgroup_flush_stats -> mem_cgroup_wb_stats -> balance_dirty_pages -> balance_dirty_pages_ratelimited_flags -> btrfs_buffered_write -> btrfs_do_write_iter -> vfs_write -> __x64_sys_pwrite64 -> do_syscall_64 -> entry_SYSCALL_64_after_hwframe ------------------------------------------------------------------------ Thread latency: 41.96 us (100%) The system has exit from idle latency! Max timerlat IRQ latency from idle: 17.48 us in cpu 4 Saving trace to timerlat_trace.txt}hjxsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jvhhhK1hj3hhubh)}(hXIn this case, the major factor was the delay suffered by the *IRQ handler* that handles **timerlat** wakeup: *65.52%*. This can be caused by the current thread masking interrupts, which can be seen in the blocking thread stacktrace: the current thread (*objtool:49256*) disabled interrupts via *raw spin lock* operations inside mem cgroup, while doing write syscall in a btrfs file system.h](h=In this case, the major factor was the delay suffered by the }(hjhhhNhNubj4)}(h *IRQ handler*h]h IRQ handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh that handles }(hjhhhNhNubj )}(h **timerlat**h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh wakeup: }(hjhhhNhNubj4)}(h*65.52%*h]h65.52%}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh. This can be caused by the current thread masking interrupts, which can be seen in the blocking thread stacktrace: the current thread (}(hjhhhNhNubj4)}(h*objtool:49256*h]h objtool:49256}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh) disabled interrupts via }(hjhhhNhNubj4)}(h*raw spin lock*h]h raw spin lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhP operations inside mem cgroup, while doing write syscall in a btrfs file system.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKnhj3hhubh)}(hOThe raw trace is saved in the **timerlat_trace.txt** file for further analysis.h](hThe raw trace is saved in the }(hjhhhNhNubj )}(h**timerlat_trace.txt**h]htimerlat_trace.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh file for further analysis.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhj3hhubh)}(hXNote that **rtla timerlat** was dispatched without changing *timerlat* tracer threads' priority. That is generally not needed because these threads have priority *FIFO:95* by default, which is a common priority used by real-time kernel developers to analyze scheduling delays.h](h Note that }(hjhhhNhNubj )}(h**rtla timerlat**h]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! was dispatched without changing }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh^ tracer threads’ priority. That is generally not needed because these threads have priority }(hjhhhNhNubj4)}(h *FIFO:95*h]hFIFO:95}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhi by default, which is a common priority used by real-time kernel developers to analyze scheduling delays.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhj3hhubh)}(hhh](h)}(hSEE ALSOh]hSEE ALSO}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThhhhhK}ubh)}(h1**rtla-timerlat**\(1), **rtla-timerlat-hist**\(1)h](j )}(h**rtla-timerlat**h]h rtla-timerlat}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh(1), }(hjehhhNhNubj )}(h**rtla-timerlat-hist**h]hrtla-timerlat-hist}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh(1)}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK~hjThhubh)}(hd*timerlat* tracer documentation: h](j4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer documentation: <}(hjhhhNhNubj )}(hAhttps://www.kernel.org/doc/html/latest/trace/timerlat-tracer.htmlh]hAhttps://www.kernel.org/doc/html/latest/trace/timerlat-tracer.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j~ hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjThhubeh}(h]see-alsoah ]h"]see alsoah$]h&]uh1hhj3hhhhhK}ubh)}(hhh](h)}(hAUTHORh]hAUTHOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h:Written by Daniel Bristot de Oliveira h](h'Written by Daniel Bristot de Oliveira <}(hjhhhNhNubj )}(hbristot@kernel.orgh]hbristot@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bristot@kernel.orguh1j~ hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]authorah ]h"]authorah$]h&]uh1hhj3hhhhhKubeh}(h]exampleah ]h"]exampleah$]h&]uh1hhhhhhhhK+ubh)}(hhh](h)}(hREPORTING BUGSh]hREPORTING BUGS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhh,Documentation/tools/rtla/common_appendix.rsthKubh)}(hUReport bugs to and h](hReport bugs to <}(hjhhhNhNubj )}(hlinux-kernel@vger.kernel.orgh]hlinux-kernel@vger.kernel.org}(hj'hhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:linux-kernel@vger.kernel.orguh1j~ hjubh> and <}(hjhhhNhNubj )}(h!linux-trace-devel@vger.kernel.orgh]h!linux-trace-devel@vger.kernel.org}(hj;hhhNhNubah}(h]h ]h"]h$]h&]refuri(mailto:linux-trace-devel@vger.kernel.orguh1j~ hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj hhubeh}(h]reporting-bugsah ]h"]reporting bugsah$]h&]uh1hhhhhhjhKubh)}(hhh](h)}(hLICENSEh]hLICENSE}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhjhKubh)}(h6**rtla** is Free Software licensed under the GNU GPLv2h](j )}(h**rtla**h]hrtla}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh. is Free Software licensed under the GNU GPLv2}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj]hhubeh}(h]licenseah ]h"]licenseah$]h&]uh1hhhhhhjhKubh)}(hhh](h)}(hCOPYINGh]hCOPYING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhjhK ubh)}(hwCopyright \(C) 2021 Red Hat, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).h]hwCopyright (C) 2021 Red Hat, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjhhubeh}(h]copyingah ]h"]copyingah$]h&]uh1hhhhhhjhK ubeh}(h]+measures-the-operating-system-timer-latencyah ]h"]+measures the operating system timer latencyah$]h&]uh1hhhhhhhhKubeh}(h]rtla-timerlat-topah ]h"]rtla-timerlat-topah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjRjOj\jYj0j-j jjjjjjZjWjjjju nametypes}(jjjRj\j0j jjjZjjuh}(jhjhjOj jYjUj-j_jj3jjTjjjWj jj]jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log].Documentation/tools/rtla/rtla-timerlat-top.rst(NNNNta decorationNhhub.