P 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 _documenthsourceNlineNubhsubstitution_definition)}(h!.. |tool| replace:: timerlat top h]h timerlat top}hhsbah}(h]h ]h"]toolah$]h&]uh1hhJ/var/lib/git/docbuild/linux/Documentation/tools/rtla/rtla-timerlat-top.rsthKhhhhubhsection)}(hhh](htitle)}(hrtla-timerlat-toph]hrtla-timerlat-top}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(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&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSYNOPSISh]hSYNOPSIS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(h%**rtla timerlat top** [*OPTIONS*] ...h](hstrong)}(h**rtla timerlat top**h]hrtla timerlat top}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj,ubh [}(hj,hhhNhNubhemphasis)}(h *OPTIONS*h]hOPTIONS}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj,ubh] ...}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]synopsisah ]h"]synopsisah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h DESCRIPTIONh]h DESCRIPTION}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhhhhKubh)}(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 }(hjwhhhNhNubj1)}(h**rtla timerlat**h]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjwubh tool is an interface for the }(hjwhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjwubh tracer. The }(hjwhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjwubh 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.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh8Documentation/tools/rtla/common_timerlat_description.rsthKhjfhhubh)}(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 }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh_ tracer outputs information in two ways. It periodically prints the timer latency at the timer }(hjhhhNhNubjE)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh handler and the }(hjhhhNhNubjE)}(h*Thread*h]hThread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubhI handler. It also enables the trace of the most relevant information via }(hjhhhNhNubj1)}(h **osnoise:**h]hosnoise:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh tracepoints.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjfhhubh)}(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 }(hjhhhNhNubj1)}(h**rtla timerlat**h]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh tool sets the options of the }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh 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 }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh tracer. If either BPF or the }(hjhhhNhNubj1)}(h**osnoise:timerlat_sample**h]hosnoise:timerlat_sample}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh/ tracepoint it attaches to is unavailable, the }(hjhhhNhNubj1)}(h**rtla timerlat**h]h rtla timerlat}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubhS tool falls back to using tracefs to process the data asynchronously in user space.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK hjfhhubh)}(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 }(hjzhhhNhNubj1)}(h**rtla timerlat top**h]hrtla timerlat top}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjzubh4 displays a summary of the periodic output from the }(hjzhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjzubhN tracer. It also provides information for each operating system noise via the }(hjzhhhNhNubj1)}(h **osnoise:**h]hosnoise:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjzubh. tracepoints that can be seem with the option }(hjzhhhNhNubj1)}(h**-T**h]h-T}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjfhhubeh}(h] descriptionah ]h"] descriptionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOPTIONSh]hOPTIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hI.. |threshold| replace:: **-a/--auto**, **-i/--irq**, or **-T/--thread**h](j1)}(h **-a/--auto**h]h -a/--auto}hjsbah}(h]h ]h"]h$]h&]uh1j0hjubh, }hjsbj1)}(h **-i/--irq**h]h-i/--irq}hjsbah}(h]h ]h"]h$]h&]uh1j0hjubh, or }hjsbj1)}(h**-T/--thread**h]h -T/--thread}hjsbah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"] thresholdah$]h&]uh1hh4Documentation/tools/rtla/common_timerlat_options.rsthKhjhhubh)}(h.. |thresharg| replace:: -Th]h-T}hj'sbah}(h]h ]h"] threshargah$]h&]uh1hhj&hKhjhhubh)}(h#.. |tracer| replace:: timerlat h]htimerlat}hj6sbah}(h]h ]h"]tracerah$]h&]uh1hhj&hKhjhhubh)}(hX@.. |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. h](h5For time-sensitive actions, it is recommended to run }hjEsbj1)}(h**rtla timerlat**h]h rtla timerlat}hjMsbah}(h]h ]h"]h$]h&]uh1j0hjEubh 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.}hjEsbeh}(h]h ]h"] actionsperfah$]h&]uh1hhj&hKhjhhubh)}(h**-a**, **--auto** *us*h](j1)}(h**-a**h]h-a}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjfubh, }(hjfhhhNhNubj1)}(h **--auto**h]h--auto}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjfubh }(hjfhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjfubeh}(h]h ]h"]h$]h&]uh1hhj&hK hjhhubh 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 }(hjhhhNhNubj1)}(h**-T**h]h-T}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh }hjsbj1)}(h**-s**h]h-s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }hjsbjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh }(hjhhhNhNubj1)}(h**-t**h]h-t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh. By default, }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh tracer uses FIFO:95 for }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh threads, thus equilavent to }(hjhhhNhNubj1)}(h**-P**h]h-P}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }hjsbjE)}(h*f:95*h]hf:95}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK hjubah}(h]h ]h"]h$]h&]uh1jhj&hK hjhhubh)}(h**-p**, **--period** *us*h](j1)}(h**-p**h]h-p}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj^ubh, }(hj^hhhNhNubj1)}(h **--period**h]h--period}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj^ubh }(hj^hhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj^ubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjhhubj)}(h2Set the *timerlat* tracer period in microseconds. h]h)}(h1Set the *timerlat* tracer period in microseconds.h](hSet the }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh tracer period in microseconds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjubah}(h]h ]h"]h$]h&]uh1jhj&hKhjhhubh)}(h**-i**, **--irq** *us*h](j1)}(h**-i**h]h-i}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--irq**h]h--irq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjhhubj)}(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 }(hjhhhNhNubjE)}(h*IRQ*h]hIRQ}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh+ latency is higher than the argument in us.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjubah}(h]h ]h"]h$]h&]uh1jhj&hKhjhhubh)}(h**-T**, **--thread** *us*h](j1)}(h**-T**h]h-T}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj*ubh, }(hj*hhhNhNubj1)}(h **--thread**h]h--thread}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj*ubh }(hj*hhhNhNubjE)}(h*us*h]hus}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj*ubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjhhubj)}(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 }(hjjhhhNhNubjE)}(h*Thread*h]hThread}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjjubh+ latency is higher than the argument in us.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjfubah}(h]h ]h"]h$]h&]uh1jhj&hKhjhhubh)}(h**-s**, **--stack** *us*h](j1)}(h**-s**h]h-s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--stack**h]h--stack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1hhj&hKhjhhubj)}(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 }(hjhhhNhNubjE)}(h*IRQ*h]hIRQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh if a }(hjhhhNhNubjE)}(h*Thread*h]hThread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh+ latency is higher than the argument in us.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK hjubah}(h]h ]h"]h$]h&]uh1jhj&hK hjhhubh)}(h**-t**, **--trace** \[*file*]h](j1)}(h**-t**h]h-t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--trace**h]h--trace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh [}(hjhhhNhNubjE)}(h*file*h]hfile}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh]}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK#hjhhubj)}(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 [}(hjLhhhNhNubjE)}(h*file|timerlat_trace.txt*h]hfile|timerlat_trace.txt}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjLubh].}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK%hjHubah}(h]h ]h"]h$]h&]uh1jhj&hK%hjhhubhdefinition_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](j1)}(h**--dma-latency**h]h --dma-latency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j}hj&hK*hjyubh 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 }(hjhhhNhNubjE)}(h*us*h]hus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh,, aiming to bound exit from idle latencies. }(hjhhhNhNubjE)}(h *cyclictest*h]h cyclictest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh sets this value to }(hjhhhNhNubjE)}(h*0*h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh by default, use }(hjhhhNhNubj1)}(h**--dma-latency**h]h --dma-latency}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*0*h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh to have similar results.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK(hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jwhj&hK*hjtubjx)}(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](j1)}(h**--deepest-idle-state**h]h--deepest-idle-state}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj&ubh }(hj&hhhNhNubjE)}(h*n*h]hn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj&ubeh}(h]h ]h"]h$]h&]uh1j}hj&hK2hj"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 }(hjShhhNhNubjE)}(h*n*h]hn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjSubhS for cpus that are running timerlat threads to reduce exit from idle latencies. If }(hjShhhNhNubjE)}(h*n*h]hn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjSubh is -1, all idle states are disabled. On exit from timerlat, the idle state setting is restored to its original state before running timerlat.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK-hjPubh)}(h+Requires rtla to be built with libcpupower.h]h+Requires rtla to be built with libcpupower.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hK2hjPubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jwhj&hK2hjthhubeh}(h]h ]h"]h$]h&]uh1jrhjhhhj&hNubh)}(h**-k**, **--kernel-threads**h](j1)}(h**-k**h]h-k}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h**--kernel-threads**h]h--kernel-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1hhj&hK4hjhhubj)}(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 }(hjhhhNhNubj1)}(h**-u**h]h-u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK6hjubah}(h]h ]h"]h$]h&]uh1jhj&hK6hjhhubh)}(h**-u**, **--user-threads**h](j1)}(h**-u**h]h-u}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h**--user-threads**h]h--user-threads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1hhj&hK8hjhhubj)}(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. }(hj'hhhNhNubj1)}(h**--user-threads**h]h--user-threads}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj'ubh& will be used unless the user specify }(hj'hhhNhNubj1)}(h**-k**h]h-k}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hK:hj#ubah}(h]h ]h"]h$]h&]uh1jhj&hK:hjhhubh)}(h**-U**, **--user-load**h](j1)}(h**-U**h]h-U}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj_ubh, }(hj_hhhNhNubj1)}(h**--user-load**h]h --user-load}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj_ubeh}(h]h ]h"]h$]h&]uh1hhj&hK?hjhhubj)}(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&]uh1hhj&hKAhjubah}(h]h ]h"]h$]h&]uh1jhj&hKAhjhhubh)}(h**-q**, **--quiet**h](j1)}(h**-q**h]h-q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--quiet**h]h--quiet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**-c**, **--cpus** *cpu-list*h](j1)}(h**-c**h]h-c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--cpus**h]h--cpus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h *cpu-list*h]hcpu-list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(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.}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj! ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubh)}(h&**-H**, **--house-keeping** *cpu-list*h](j1)}(h**-H**h]h-H}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj9 ubh, }(hj9 hhhNhNubj1)}(h**--house-keeping**h]h--house-keeping}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj9 ubh }(hj9 hhhNhNubjE)}(h *cpu-list*h]hcpu-list}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj9 ubeh}(h]h ]h"]h$]h&]uh1hhj hKhjhhubj)}(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.}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhju ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubh)}(h&**-d**, **--duration** *time[s|m|h|d]*h](j1)}(h**-d**h]h-d}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh, }(hj hhhNhNubj1)}(h**--duration**h]h --duration}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(h*time[s|m|h|d]*h]h time[s|m|h|d]}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1hhj hK 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&]uh1hhj hK hj ubah}(h]h ]h"]h$]h&]uh1jhj hK hjhhubh)}(h**-D**, **--debug**h](j1)}(h**-D**h]h-D}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh, }(hj hhhNhNubj1)}(h **--debug**h]h--debug}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1hhj hK hjhhubj)}(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 hKhjhhubh)}(h**-e**, **--event** *sys:event*h](j1)}(h**-e**h]h-e}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj# ubh, }(hj# hhhNhNubj1)}(h **--event**h]h--event}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj# ubh }(hj# hhhNhNubjE)}(h *sys:event*h]h sys:event}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj# ubeh}(h]h ]h"]h$]h&]uh1hhj hKhjhhubj)}(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 (}(hjc hhhNhNubj1)}(h**-t**h]h-t}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh7) session. The argument can be a specific event, e.g., }(hjc hhhNhNubj1)}(h**-e**h]h-e}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh }(hjc hhhNhNubjE)}(h*sched:sched_switch*h]hsched:sched_switch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjc ubh), or all events of a system group, e.g., }(hjc hhhNhNubj1)}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh }hjc sbjE)}(h*sched*h]hsched}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjc ubh . Multiple }(hjc hhhNhNubj1)}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh% are allowed. It is only active when }(hjc hhhNhNubj1)}(h**-t**h]h-t}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh or }(hjc hhhNhNubj1)}(h**-a**h]h-a}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjc ubh are set.}(hjc hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj_ ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubh)}(h**--filter** **h](j1)}(h **--filter**h]h--filter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(h **h]h}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhjhhubj)}(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 }(hj5 hhhNhNubj1)}(h**-e**h]h-e}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj5 ubh }(hj5 hhhNhNubjE)}(h *sys:event*h]h sys:event}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj5 ubh event with }(hj5 hhhNhNubjE)}(h **h]h}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj5 ubh4. For further information about event filtering see }(hj5 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}(hju hhhNhNubah}(h]h ]h"]h$]h&]refurijw uh1js hj5 ubh.}(hj5 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj1 ubah}(h]h ]h"]h$]h&]uh1jhj hKhjhhubjs)}(hhh]jx)}(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](j1)}(h **--trigger**h]h --trigger}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(h **h]h }(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j}hj 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 hhhNhNubj1)}(h**-e**h]h-e}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(h *sys:event*h]h sys:event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubh . If the }(hj hhhNhNubjE)}(h*hist:*h]hhist:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubhX trigger is activated, the output histogram will be automatically saved to a file named }(hj hhhNhNubjE)}(h*system_event_hist.txt*h]hsystem_event_hist.txt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj 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 }(hj, hhhNhNubjE)}(h*osnoise:irq_noise*h]hosnoise:irq_noise}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj, ubh event in }(hj, hhhNhNubjE)}(h*osnoise_irq_noise_hist.txt*h]hosnoise_irq_noise_hist.txt}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj, ubh.}(hj, 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 }(hj^ hhhNhNubjt )}(hGhttps://www.kernel.org/doc/html/latest/trace/events.html#event-triggersh]hGhttps://www.kernel.org/doc/html/latest/trace/events.html#event-triggers}(hjf hhhNhNubah}(h]h ]h"]h$]h&]refurijh uh1js hj^ ubh.}(hj^ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK"hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jwhj hK"hj ubah}(h]h ]h"]h$]h&]uh1jrhjhhhj hNubh)}(h>**-P**, **--priority** *o:prio|r:prio|f:prio|d:runtime:period*h](j1)}(h**-P**h]h-P}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh, }(hj hhhNhNubj1)}(h**--priority**h]h --priority}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(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&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1hhj hK$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:}(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](jE)}(h*o:prio*h]ho:prio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubh - use SCHED_OTHER with }(hj hhhNhNubjE)}(h*prio*h]hprio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj 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](jE)}(h*r:prio*h]hr:prio}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj! ubh - use SCHED_RR with }(hj! hhhNhNubjE)}(h*prio*h]hprio}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj! 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)}(hjV h](jE)}(h*f:prio*h]hf:prio}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjX ubh - use SCHED_FIFO with }(hjX hhhNhNubjE)}(h*prio*h]hprio}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjX ubh;}(hjX hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK*hjT 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](jE)}(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&]uh1jDhj ubh - use SCHED_DEADLINE with }(hj hhhNhNubjE)}(h *runtime*h]hruntime}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubh and }(hj hhhNhNubjE)}(h*period*h]hperiod}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj 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&hjhhubh)}(h **-C**, **--cgroup**\[*=cgroup*]h](j1)}(h**-C**h]h-C}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh, }(hj hhhNhNubj1)}(h **--cgroup**h]h--cgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh[}(hj hhhNhNubjE)}(h *=cgroup*h]h=cgroup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubh]}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK-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'hhhNhNubjE)}(h*cgroup*h]hcgroup}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj'ubh# to the tracer’s threads. If the }(hj'hhhNhNubj1)}(h**-C**h]h-C}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj'ubhH option is passed without arguments, the tracer’s thread will inherit }(hj'hhhNhNubj1)}(h**rtla**h]hrtla}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj'ubh’s }(hj'hhhNhNubjE)}(h*cgroup*h]hcgroup}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj'ubh/. Otherwise, the threads will be placed on the }(hj'hhhNhNubjE)}(h*cgroup*h]hcgroup}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj'ubh passed to the option.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK/hj#ubah}(h]h ]h"]h$]h&]uh1jhj hK/hjhhubh)}(h**--warm-up** *s*h](j1)}(h **--warm-up**h]h --warm-up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*s*h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1hhj hK1hjhhubj)}(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 }(hjhhhNhNubjE)}(h*s*h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh seconds before starting collecting the data, allowing the system to warm-up. Statistical data generated during warm-up is discarded.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK3hjubah}(h]h ]h"]h$]h&]uh1jhj hK3hjhhubjs)}(hhh]jx)}(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](j1)}(h**--trace-buffer-size**h]h--trace-buffer-size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh }(hjhhhNhNubjE)}(h*kB*h]hkB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j}hj hK6hjubj)}(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&]uh1hhj hK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jwhj hK6hjubah}(h]h ]h"]h$]h&]uh1jrhjhhhj hNubh)}(h**--on-threshold** *action*h](j1)}(h**--on-threshold**h]h--on-threshold}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj=ubh }(hj=hhhNhNubjE)}(h*action*h]haction}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj=ubeh}(h]h ]h"]h$]h&]uh1hhj hK8hjhhubj)}(hXDefines 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=]* Saves trace output, optionally taking a filename. Alternative to -t/--trace. Note that nlike -t/--trace, specifying this multiple times will result in the trace being saved multiple times. - *signal,num=,pid=* Sends signal to process. "parent" might be specified in place of pid to target the parent process of rtla. - *shell,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| h](h)}(hiDefines an action to be executed when tracing is stopped on a latency threshold specified by |threshold|.h](h]Defines an action to be executed when tracing is stopped on a latency threshold specified by }(hjkhhhNhNubj1)}(hjh]h -a/--auto}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j0hNhNhjkhhubh, }(hjkhhhNhNubj1)}(hjh]h-i/--irq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hNhNhjkhhubh, or }(hjkhhhNhNubj1)}(hjh]h -T/--thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hNhNhjkhhubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK:hjgubh)}(hMultiple --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.h]hMultiple --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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK=hjgubh)}(hSupported actions are:h]hSupported actions are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKAhjgubj )}(hhh](j )}(h*trace[,file=]* Saves trace output, optionally taking a filename. Alternative to -t/--trace. Note that nlike -t/--trace, specifying this multiple times will result in the trace being saved multiple times. h](h)}(h*trace[,file=]*h]jE)}(hjh]htrace[,file=]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubah}(h]h ]h"]h$]h&]uh1hhj hKChjubh)}(hSaves trace output, optionally taking a filename. Alternative to -t/--trace. Note that nlike -t/--trace, specifying this multiple times will result in the trace being saved multiple times.h]hSaves trace output, optionally taking a filename. Alternative to -t/--trace. Note that nlike -t/--trace, specifying this multiple times will result in the trace being saved multiple times.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKEhjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h*signal,num=,pid=* Sends signal to process. "parent" might be specified in place of pid to target the parent process of rtla. h](h)}(h*signal,num=,pid=*h]jE)}(hjh]hsignal,num=,pid=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubah}(h]h ]h"]h$]h&]uh1hhj hKIhjubh)}(hjSends signal to process. "parent" might be specified in place of pid to target the parent process of rtla.h]hnSends signal to process. “parent” might be specified in place of pid to target the parent process of rtla.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKKhjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(h2*shell,command=* Execute shell command. h](h)}(h*shell,command=*h]jE)}(hj/h]hshell,command=}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj-ubah}(h]h ]h"]h$]h&]uh1hhj hKNhj)ubh)}(hExecute shell command.h]hExecute shell command.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKPhj)ubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hM*continue* Continue tracing after actions are executed instead of stopping. h](h)}(h *continue*h]jE)}(hj^h]hcontinue}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj\ubah}(h]h ]h"]h$]h&]uh1hhj hKRhjXubh)}(h@Continue tracing after actions are executed instead of stopping.h]h@Continue tracing after actions are executed instead of stopping.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKThjXubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j j uh1j hj hKChjgubh)}(hExample:h]hExample:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKVhjgubh)}(h$ rtla |tool| |thresharg| 20 --on-threshold trace --on-threshold shell,command="grep ipi_send |tracer|\_trace.txt" --on-threshold signal,num=2,pid=parenth](h$ rtla }(hjhhhNhNubh timerlat top}(hjhhhNhNubh }(hjhhhNhNubh-T}(hjhhhNhNubhG 20 --on-threshold trace --on-threshold shell,command=”grep ipi_send }(hjhhhNhNubhtimerlat}(hjhhhNhNubh5_trace.txt” --on-threshold signal,num=2,pid=parent}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKXhjgubh)}(hThis 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.h](h4This will save a trace with the default filename “}(hjhhhNhNubhtimerlat}(hjhhhNhNubh_trace.txt”, print its lines that contain the text “ipi_send” on standard output, and send signal 2 (SIGINT) to the parent process.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hK\hjgubh)}(hPerformance Considerations:h]hPerformance Considerations:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK`hjgubh)}(h |actionsperf|h](h5For time-sensitive actions, it is recommended to run }(hjhhhNhNubj1)}(hjOh]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hNhNhjhhubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKbhjgubeh}(h]h ]h"]h$]h&]uh1jhj hK:hjhhubh)}(h**--on-end** *action*h](j1)}(h **--on-end**h]h--on-end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj ubh }(hj hhhNhNubjE)}(h*action*h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKdhjhhubj)}(hXDefines 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](h)}(h7Defines an action to be executed at the end of tracing.h]h7Defines an action to be executed at the end of tracing.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKfhj4ubh)}(hMultiple --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.h]hMultiple --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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhhj4ubh)}(hSee the documentation for **--on-threshold** for the list of supported actions, with the exception that *continue* has no effect.h](hSee the documentation for }(hjThhhNhNubj1)}(h**--on-threshold**h]h--on-threshold}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjTubh< for the list of supported actions, with the exception that }(hjThhhNhNubjE)}(h *continue*h]hcontinue}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjTubh has no effect.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKlhj4ubh)}(hExample:h]hExample:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKohj4ubh)}(h"$ rtla |tool| -d 5s --on-end traceh](h$ rtla }(hjhhhNhNubh timerlat top}(hjhhhNhNubh -d 5s --on-end trace}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKqhj4ubh)}(hKThis runs rtla with the default options, and saves trace output at the end.h]hKThis runs rtla with the default options, and saves trace output at the end.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKshj4ubeh}(h]h ]h"]h$]h&]uh1jhj hKfhjhhubh)}(h**-h**, **--help**h](j1)}(h**-h**h]h-h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh, }(hjhhhNhNubj1)}(h **--help**h]h--help}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1hhj hKuhjhhubj)}(hPrint help menu. h]h)}(hPrint help menu.h]hPrint help menu.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKwhjubah}(h]h ]h"]h$]h&]uh1jhj hKwhjhhubh)}(h**--dump-tasks**h]j1)}(hjh]h --dump-tasks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubah}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h **--no-aa**h]j1)}(hj2h]h--no-aa}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj0ubah}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj)}(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}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjGubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubh)}(h**--aa-only** *us*h](j1)}(h **--aa-only**h]h --aa-only}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j0hj_ubh }(hj_hhhNhNubjE)}(h*us*h]hus}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj_ubeh}(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'hjubah}(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 }(hjhhhNhNubjE)}(h*1-23*h]h1-23}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubhB in the automatic trace mode, instructing the tracer to stop if a }(hjhhhNhNubjE)}(h*40 us*h]h40 us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh 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:spacepreserveuh1jhhhK3hjhhubh)}(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 }(hjhhhNhNubjE)}(h *IRQ handler*h]h IRQ handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh that handles }(hjhhhNhNubj1)}(h **timerlat**h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh wakeup: }(hjhhhNhNubjE)}(h*65.52%*h]h65.52%}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh. This can be caused by the current thread masking interrupts, which can be seen in the blocking thread stacktrace: the current thread (}(hjhhhNhNubjE)}(h*objtool:49256*h]h objtool:49256}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh) disabled interrupts via }(hjhhhNhNubjE)}(h*raw spin lock*h]h raw spin lock}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubhP operations inside mem cgroup, while doing write syscall in a btrfs file system.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphjhhubh)}(hOThe raw trace is saved in the **timerlat_trace.txt** file for further analysis.h](hThe raw trace is saved in the }(hjfhhhNhNubj1)}(h**timerlat_trace.txt**h]htimerlat_trace.txt}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjfubh file for further analysis.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjhhubh)}(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 }(hjhhhNhNubj1)}(h**rtla timerlat**h]h rtla timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh! was dispatched without changing }(hjhhhNhNubjE)}(h *timerlat*h]htimerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubh^ tracer threads’ priority. That is generally not needed because these threads have priority }(hjhhhNhNubjE)}(h *FIFO:95*h]hFIFO:95}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jDhjubhi by default, which is a common priority used by real-time kernel developers to analyze scheduling delays.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKyhjhhubh)}(hhh](h)}(hSEE ALSOh]hSEE ALSO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h1**rtla-timerlat**\(1), **rtla-timerlat-hist**\(1)h](j1)}(h**rtla-timerlat**h]h rtla-timerlat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh(1), }(hjhhhNhNubj1)}(h**rtla-timerlat-hist**h]hrtla-timerlat-hist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh(1)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hd*timerlat* tracer documentation: h](jE)}(h *timerlat*h]htimerlat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jDhj ubh tracer documentation: <}(hj hhhNhNubjt )}(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&]refurij!uh1js hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]see-alsoah ]h"]see alsoah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hAUTHORh]hAUTHOR}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hhhhhKubh)}(h:Written by Daniel Bristot de Oliveira h](h'Written by Daniel Bristot de Oliveira <}(hjQhhhNhNubjt )}(hbristot@kernel.orgh]hbristot@kernel.org}(hjYhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bristot@kernel.orguh1js hjQubh>}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj@hhubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hjusbah}(h]h ]h"]h$]h&]jjuh1jshj@hhh,Documentation/tools/rtla/common_appendix.rsthKubeh}(h]authorah ]h"]authorah$]h&]uh1hhjhhhhhKubeh}(h]exampleah ]h"]exampleah$]h&]uh1hhhhhhhhK-ubh)}(hhh](h)}(h EXIT STATUSh]h EXIT STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhjhKubj)}(h0 Passed: the test did not hit the stop tracing condition 1 Error: invalid argument 2 Failed: the test hit the stop tracing conditionh]h0 Passed: the test did not hit the stop tracing condition 1 Error: invalid argument 2 Failed: the test hit the stop tracing condition}hjsbah}(h]h ]h"]h$]h&]jjuh1jhjhKhjhhubeh}(h] exit-statusah ]h"] exit statusah$]h&]uh1hhhhhhjhKubh)}(hhh](h)}(hREPORTING BUGSh]hREPORTING BUGS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhjhK ubh)}(hUReport bugs to and h](hReport bugs to <}(hjhhhNhNubjt )}(hlinux-kernel@vger.kernel.orgh]hlinux-kernel@vger.kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:linux-kernel@vger.kernel.orguh1js hjubh> and <}(hjhhhNhNubjt )}(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.orguh1js hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubeh}(h]reporting-bugsah ]h"]reporting bugsah$]h&]uh1hhhhhhjhK ubh)}(hhh](h)}(hLICENSEh]hLICENSE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhjhKubh)}(h6**rtla** is Free Software licensed under the GNU GPLv2h](j1)}(h**rtla**h]hrtla}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j0hjubh. is Free Software licensed under the GNU GPLv2}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj hhubeh}(h]licenseah ]h"]licenseah$]h&]uh1hhhhhhjhKubh)}(hhh](h)}(hCOPYINGh]hCOPYING}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhhjhKubh)}(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).}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj?hhubeh}(h]copyingah ]h"]copyingah$]h&]uh1hhhhhhjhKubeh}(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}(hhj#jj3j'jBj6jcjEusubstitution_names}(toolh thresholdj# threshargj3tracerjB actionsperfjcurefnames}refids}nameids}(jsjpjkjhjcj`jjjjjjj=j:jjjjjjj<j9jcj`u nametypes}(jsjkjcjjjj=jjjj<jcuh}(jphjhhj`jjjfjjjjj:jjj@jjjjj9j j`j?u 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.