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 enables 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&]uh1j3hjubhI handler. It also enables 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)}(hXThe **rtla timerlat** tool sets the options of the *timerlat* tracer and collects and displays a summary of the results. By default, the collection is done synchronously in kernel space using a dedicated BPF program attached to the *timerlat* tracer. If either BPF or the **osnoise:timerlat_sample** tracepoint it attaches to is unavailable, the **rtla timerlat** tool falls back to using tracefs to process the data asynchronously in user space.h](hThe }(hjhhhNhNubj )}(h**rtla timerlat**h]h rtla timerlat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh tool sets the options of the }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer and collects and displays a summary of the results. By default, the collection is done synchronously in kernel space using a dedicated BPF program attached to the }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer. If either BPF or the }(hjhhhNhNubj )}(h**osnoise:timerlat_sample**h]hosnoise:timerlat_sample}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ tracepoint it attaches to is unavailable, the }(hjhhhNhNubj )}(h**rtla timerlat**h]h rtla timerlat}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhS tool falls back to using tracefs to process the data asynchronously in user space.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hjUhhubh)}(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 }(hjihhhNhNubj )}(h**rtla timerlat top**h]hrtla timerlat top}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh4 displays a summary of the periodic output from the }(hjihhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjiubhN tracer. It also provides information for each operating system noise via the }(hjihhhNhNubj )}(h **osnoise:**h]hosnoise:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh. tracepoints that can be seem with the option }(hjihhhNhNubj )}(h**-T**h]h-T}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjUhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOPTIONSh]hOPTIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h**-a**, **--auto** *us*h](j )}(h**-a**h]h-a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--auto**h]h--auto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hh4Documentation/tools/rtla/common_timerlat_options.rsthKhjhhubh 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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh }hjsbj )}(h**-s**h]h-s}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }hjsbj4)}(h*us*h]hus}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh }(hjhhhNhNubj )}(h**-t**h]h-t}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. By default, }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh tracer uses FIFO:95 for }(hjhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh threads, thus equilavent to }(hjhhhNhNubj )}(h**-P**h]h-P}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }hjsbj4)}(h*f:95*h]hf:95}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**-p**, **--period** *us*h](j )}(h**-p**h]h-p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--period**h]h--period}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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 hj ubah}(h]h ]h"]h$]h&]uh1jhjhK hjhhubh)}(h**-i**, **--irq** *us*h](j )}(h**-i**h]h-i}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh, }(hj7hhhNhNubj )}(h **--irq**h]h--irq}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh }(hj7hhhNhNubj4)}(h*us*h]hus}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj7ubeh}(h]h ]h"]h$]h&]uh1hhjhK hjhhubj)}(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 }(hjwhhhNhNubj4)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjwubh+ latency is higher than the argument in us.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjsubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**-T**, **--thread** *us*h](j )}(h**-T**h]h-T}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--thread**h]h--thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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 }(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&]uh1jhjhKhjhhubh)}(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}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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 }(hjChhhNhNubj4)}(h*IRQ*h]hIRQ}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCubh if a }(hjChhhNhNubj4)}(h*Thread*h]hThread}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCubh+ latency is higher than the argument in us.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj?ubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**-t**, **--trace** \[*file*]h](j )}(h**-t**h]h-t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh, }(hj{hhhNhNubj )}(h **--trace**h]h--trace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh [}(hj{hhhNhNubj4)}(h*file*h]hfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj{ubh]}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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 [}(hjhhhNhNubj4)}(h*file|timerlat_trace.txt*h]hfile|timerlat_trace.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh].}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubhdefinition_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 }(hj!hhhNhNubj4)}(h*us*h]hus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubh,, aiming to bound exit from idle latencies. }(hj!hhhNhNubj4)}(h *cyclictest*h]h cyclictest}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubh sets this value to }(hj!hhhNhNubj4)}(h*0*h]h0}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubh by default, use }(hj!hhhNhNubj )}(h**--dma-latency**h]h --dma-latency}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh }(hj!hhhNhNubj4)}(h*0*h]h0}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubh to have similar results.}(hj!hhhNhNubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*n*h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjubj)}(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 }(hjhhhNhNubj4)}(h*n*h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhS for cpus that are running timerlat threads to reduce exit from idle latencies. If }(hjhhhNhNubj4)}(h*n*h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh is -1, all idle states are disabled. On exit from timerlat, the idle state setting is restored to its original state before running timerlat.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK#hjubh)}(h+Requires rtla to be built with libcpupower.h]h+Requires rtla to be built with libcpupower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhjhNubh)}(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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhK*hjhhubj)}(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 }(hjFhhhNhNubj )}(h**-u**h]h-u}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK,hjBubah}(h]h ]h"]h$]h&]uh1jhjhK,hjhhubh)}(h**-u**, **--user-threads**h](j )}(h**-u**h]h-u}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh, }(hjlhhhNhNubj )}(h**--user-threads**h]h--user-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1hhjhK.hjhhubj)}(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. }(hjhhhNhNubj )}(h**--user-threads**h]h--user-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& will be used unless the user specify }(hjhhhNhNubj )}(h**-k**h]h-k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjhK0hjhhubh)}(h**-U**, **--user-load**h](j )}(h**-U**h]h-U}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h**--user-load**h]h --user-load}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhK5hjhhubj)}(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&]uh1jhjhK7hjhhubh)}(h**-q**, **--quiet**h](j )}(h**-q**h]h-q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--quiet**h]h--quiet}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hh/Documentation/tools/rtla/common_top_options.rsthKhjhhubj)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj>hKhjhhubh)}(h**-c**, **--cpus** *cpu-list*h](j )}(h**-c**h]h-c}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh, }(hjWhhhNhNubj )}(h **--cpus**h]h--cpus}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh }(hjWhhhNhNubj4)}(h *cpu-list*h]hcpu-list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjWubeh}(h]h ]h"]h$]h&]uh1hh+Documentation/tools/rtla/common_options.rsthKhjhhubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h&**-H**, **--house-keeping** *cpu-list*h](j )}(h**-H**h]h-H}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h**--house-keeping**h]h--house-keeping}(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&]uh1hhjhKhjhhubj)}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h&**-d**, **--duration** *time[s|m|h|d]*h](j )}(h**-d**h]h-d}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj )}(h**--duration**h]h --duration}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h*time[s|m|h|d]*h]h time[s|m|h|d]}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubeh}(h]h ]h"]h$]h&]uh1hhjhK hjhhubj)}(h!Set the duration of the session. h]h)}(h Set the duration of the session.h]h Set the duration of the session.}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hj< ubah}(h]h ]h"]h$]h&]uh1jhjhK hjhhubh)}(h**-D**, **--debug**h](j )}(h**-D**h]h-D}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubh, }(hjT hhhNhNubj )}(h **--debug**h]h--debug}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubeh}(h]h ]h"]h$]h&]uh1hhjhK hjhhubj)}(hPrint debug info. h]h)}(hPrint debug info.h]hPrint debug info.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj~ ubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**-e**, **--event** *sys:event*h](j )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj )}(h **--event**h]h--event}(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 ubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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 (}(hj hhhNhNubj )}(h**-t**h]h-t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh7) session. The argument can be a specific event, e.g., }(hj hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj4)}(h*sched:sched_switch*h]hsched:sched_switch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh), or all events of a system group, e.g., }(hj hhhNhNubj )}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj4)}(h*sched*h]hsched}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh . Multiple }(hj hhhNhNubj )}(h**-e**h]h-e}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh% are allowed. It is only active when }(hj hhhNhNubj )}(h**-t**h]h-t}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh or }(hj hhhNhNubj )}(h**-a**h]h-a}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh are set.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**--filter** **h](j )}(h **--filter**h]h--filter}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubh }(hjz hhhNhNubj4)}(h **h]h}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjz ubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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}(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 event with }(hj hhhNhNubj4)}(h **h]h}(hj 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&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(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&]uh1jhjhK"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}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubh }(hj; hhhNhNubj4)}(h *sys:event*h]h sys:event}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj; ubh . If the }(hj; hhhNhNubj4)}(h*hist:*h]hhist:}(hjg 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}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj; ubh. For example, the command:}(hj; hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj8 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&]uh1hhjhKhj8 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 }(hj hhhNhNubj4)}(h*osnoise:irq_noise*h]hosnoise:irq_noise}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh event in }(hj hhhNhNubj4)}(h*osnoise_irq_noise_hist.txt*h]hosnoise_irq_noise_hist.txt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hj8 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 }(hj 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK"hj8 ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhK"hj ubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubh)}(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&]uh1hhjhK$hjhhubj)}(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:}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK&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}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj] ubh;}(hj] hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK(hjY ubah}(h]h ]h"]h$]h&]uh1jW hjT ubjX )}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh;}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK)hj ubah}(h]h ]h"]h$]h&]uh1jW hjT ubjX )}(h&*f:prio* - use SCHED_FIFO with *prio*;h]h)}(hj h](j4)}(h*f:prio*h]hf:prio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh - use SCHED_FIFO with }(hj hhhNhNubj4)}(h*prio*h]hprio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh;}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK*hj ubah}(h]h ]h"]h$]h&]uh1jW hjT ubjX )}(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&]uh1hhjhK+hj ubah}(h]h ]h"]h$]h&]uh1jW hjT ubeh}(h]h ]h"]h$]h&]bullet-uh1jR hjhK(hj@ ubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjhhubh)}(h **-C**, **--cgroup**\[*=cgroup*]h](j )}(h**-C**h]h-C}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh, }(hjV hhhNhNubj )}(h **--cgroup**h]h--cgroup}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubh[}(hjV hhhNhNubj4)}(h *=cgroup*h]h=cgroup}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjV ubh]}(hjV hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK-hjhhubj)}(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 }(hj hhhNhNubj4)}(h*cgroup*h]hcgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh# to the tracer’s threads. If the }(hj hhhNhNubj )}(h**-C**h]h-C}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhH option is passed without arguments, the tracer’s thread will inherit }(hj hhhNhNubj )}(h**rtla**h]hrtla}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh’s }(hj hhhNhNubj4)}(h*cgroup*h]hcgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh/. Otherwise, the threads will be placed on the }(hj hhhNhNubj4)}(h*cgroup*h]hcgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubh passed to the option.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK/hj ubah}(h]h ]h"]h$]h&]uh1jhjhK/hjhhubh)}(h**--warm-up** *s*h](j )}(h **--warm-up**h]h --warm-up}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj4)}(h*s*h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjhhubj)}(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 }(hj6hhhNhNubj4)}(h*s*h]hs}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj6ubh seconds before starting collecting the data, allowing the system to warm-up. Statistical data generated during warm-up is discarded.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK3hj2ubah}(h]h ]h"]h$]h&]uh1jhjhK3hjhhubj)}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh }(hjchhhNhNubj4)}(h*kB*h]hkB}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjcubeh}(h]h ]h"]h$]h&]uh1jhjhK6hj_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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjhK6hj\ubah}(h]h ]h"]h$]h&]uh1jhjhhhjhNubh)}(h**-h**, **--help**h](j )}(h**-h**h]h-h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj )}(h **--help**h]h--help}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhK8hjhhubj)}(hPrint help menu. h]h)}(hPrint help menu.h]hPrint help menu.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK:hjubah}(h]h ]h"]h$]h&]uh1jhjhK:hjhhubh)}(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.rsthKhjhhubj)}(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&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubh)}(h **--no-aa**h]j )}(hj$h]h--no-aa}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhj hKhjhhubj)}(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}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubh)}(h**--aa-only** *us*h](j )}(h **--aa-only**h]h --aa-only}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh }(hjQhhhNhNubj4)}(h*us*h]hus}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjQubeh}(h]h ]h"]h$]h&]uh1hhhhK#hjhhubj)}(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%hj{ubah}(h]h ]h"]h$]h&]uh1jhhhK%hjhhubeh}(h]optionsah ]h"]optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hEXAMPLEh]hEXAMPLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK+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 }(hjhhhNhNubj4)}(h*1-23*h]h1-23}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubhB in the automatic trace mode, instructing the tracer to stop if a }(hjhhhNhNubj4)}(h*40 us*h]h40 us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh latency or higher is found:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubh 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}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhK1hjhhubh)}(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}(hj hhhNhNubah}(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}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubh) disabled interrupts via }(hjhhhNhNubj4)}(h*raw spin lock*h]h raw spin lock}(hj@hhhNhNubah}(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&]uh1hhhhKnhjhhubh)}(hOThe raw trace is saved in the **timerlat_trace.txt** file for further analysis.h](hThe raw trace is saved in the }(hjXhhhNhNubj )}(h**timerlat_trace.txt**h]htimerlat_trace.txt}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh file for further analysis.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKuhjhhubh)}(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 }(hjxhhhNhNubj )}(h**rtla timerlat**h]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh! was dispatched without changing }(hjxhhhNhNubj4)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjxubh^ tracer threads’ priority. That is generally not needed because these threads have priority }(hjxhhhNhNubj4)}(h *FIFO:95*h]hFIFO:95}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjxubhi by default, which is a common priority used by real-time kernel developers to analyze scheduling delays.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjhhubh)}(hhh](h)}(hSEE ALSOh]hSEE ALSO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK}ubh)}(h1**rtla-timerlat**\(1), **rtla-timerlat-hist**\(1)h](j )}(h**rtla-timerlat**h]h rtla-timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh(1), }(hjhhhNhNubj )}(h**rtla-timerlat-hist**h]hrtla-timerlat-hist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh(1)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK~hjhhubh)}(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&]uh1hhhhKhjhhubeh}(h]see-alsoah ]h"]see alsoah$]h&]uh1hhjhhhhhK}ubh)}(hhh](h)}(hAUTHORh]hAUTHOR}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhKubh)}(h:Written by Daniel Bristot de Oliveira h](h'Written by Daniel Bristot de Oliveira <}(hjChhhNhNubj )}(hbristot@kernel.orgh]hbristot@kernel.org}(hjKhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bristot@kernel.orguh1j hjCubh>}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj2hhubeh}(h]authorah ]h"]authorah$]h&]uh1hhjhhhhhKubeh}(h]exampleah ]h"]exampleah$]h&]uh1hhhhhhhhK+ubh)}(hhh](h)}(hREPORTING BUGSh]hREPORTING BUGS}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhhh,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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri(mailto:linux-trace-devel@vger.kernel.orguh1j hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjuhhubeh}(h]reporting-bugsah ]h"]reporting bugsah$]h&]uh1hhhhhhjhKubh)}(hhh](h)}(hLICENSEh]hLICENSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhjhKubh)}(h6**rtla** is Free Software licensed under the GNU GPLv2h](j )}(h**rtla**h]hrtla}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. is Free Software licensed under the GNU GPLv2}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubeh}(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).}(hj hhhNhNubah}(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_handlerjTerror_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}(j.j+j&j#jRjOjjjjjrjoj/j,jjjgjjjjjju nametypes}(j.j&jRjjjrj/jjjjjuh}(j+hj#hjOj jjUjjjojj,jjgj2jjujjjju 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.