€•~ˆŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/trace/osnoise-tracer”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒOSNOISE Tracer”h]”hŒOSNOISE Tracer”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒB/var/lib/git/docbuild/linux/Documentation/trace/osnoise-tracer.rst”h´KubhŒ paragraph”“”)”}”(hXyIn the context of high-performance computing (HPC), the Operating System Noise (*osnoise*) refers to the interference experienced by an application due to activities inside the operating system. In the context of Linux, NMIs, IRQs, SoftIRQs, and any other system thread can cause noise to the system. Moreover, hardware-related jobs can also cause noise, for example, via SMIs.”h]”(hŒPIn the context of high-performance computing (HPC), the Operating System Noise (”…””}”(hhÍh²hh³Nh´NubhŒemphasis”“”)”}”(hŒ *osnoise*”h]”hŒosnoise”…””}”(hh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhÍubhX ) refers to the interference experienced by an application due to activities inside the operating system. In the context of Linux, NMIs, IRQs, SoftIRQs, and any other system thread can cause noise to the system. Moreover, hardware-related jobs can also cause noise, for example, via SMIs.”…””}”(hhÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒghwlat_detector is one of the tools used to identify the most complex source of noise: *hardware noise*.”h]”(hŒVhwlat_detector is one of the tools used to identify the most complex source of noise: ”…””}”(hhïh²hh³Nh´NubhÖ)”}”(hŒ*hardware noise*”h]”hŒhardware noise”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhïubhŒ.”…””}”(hhïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)”}”(hXIn a nutshell, the hwlat_detector creates a thread that runs periodically for a given period. At the beginning of a period, the thread disables interrupt and starts sampling. While running, the hwlatd thread reads the time in a loop. As interrupts are disabled, threads, IRQs, and SoftIRQs cannot interfere with the hwlatd thread. Hence, the cause of any gap between two different reads of the time roots either on NMI or in the hardware itself. At the end of the period, hwlatd enables interrupts and reports the max observed gap between the reads. It also prints a NMI occurrence counter. If the output does not report NMI executions, the user can conclude that the hardware is the culprit for the latency. The hwlat detects the NMI execution by observing the entry and exit of a NMI.”h]”hXIn a nutshell, the hwlat_detector creates a thread that runs periodically for a given period. At the beginning of a period, the thread disables interrupt and starts sampling. While running, the hwlatd thread reads the time in a loop. As interrupts are disabled, threads, IRQs, and SoftIRQs cannot interfere with the hwlatd thread. Hence, the cause of any gap between two different reads of the time roots either on NMI or in the hardware itself. At the end of the period, hwlatd enables interrupts and reports the max observed gap between the reads. It also prints a NMI occurrence counter. If the output does not report NMI executions, the user can conclude that the hardware is the culprit for the latency. The hwlat detects the NMI execution by observing the entry and exit of a NMI.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hXÅThe osnoise tracer leverages the hwlat_detector by running a similar loop with preemption, SoftIRQs and IRQs enabled, thus allowing all the sources of *osnoise* during its execution. Using the same approach of hwlat, osnoise takes note of the entry and exit point of any source of interferences, increasing a per-cpu interference counter. The osnoise tracer also saves an interference counter for each source of interference. The interference counter for NMI, IRQs, SoftIRQs, and threads is increased anytime the tool observes these interferences' entry events. When a noise happens without any interference from the operating system level, the hardware noise counter increases, pointing to a hardware-related noise. In this way, osnoise can account for any source of interference. At the end of the period, the osnoise tracer prints the sum of all noise, the max single noise, the percentage of CPU available for the thread, and the counters for the noise sources.”h]”(hŒ—The osnoise tracer leverages the hwlat_detector by running a similar loop with preemption, SoftIRQs and IRQs enabled, thus allowing all the sources of ”…””}”(hjh²hh³Nh´NubhÖ)”}”(hŒ *osnoise*”h]”hŒosnoise”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhX' during its execution. Using the same approach of hwlat, osnoise takes note of the entry and exit point of any source of interferences, increasing a per-cpu interference counter. The osnoise tracer also saves an interference counter for each source of interference. The interference counter for NMI, IRQs, SoftIRQs, and threads is increased anytime the tool observes these interferences’ entry events. When a noise happens without any interference from the operating system level, the hardware noise counter increases, pointing to a hardware-related noise. In this way, osnoise can account for any source of interference. At the end of the period, the osnoise tracer prints the sum of all noise, the max single noise, the percentage of CPU available for the thread, and the counters for the noise sources.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)”}”(hhh]”(h»)”}”(hŒUsage”h]”hŒUsage”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj=h²hh³hÊh´K,ubhÌ)”}”(hŒ}Write the ASCII text "osnoise" into the current_tracer file of the tracing system (generally mounted at /sys/kernel/tracing).”h]”hŒWrite the ASCII text “osnoise†into the current_tracer file of the tracing system (generally mounted at /sys/kernel/tracing).”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj=h²hubhÌ)”}”(hŒ For example::”h]”hŒ For example:”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hj=h²hubhŒ literal_block”“”)”}”(hŒW[root@f32 ~]# cd /sys/kernel/tracing/ [root@f32 tracing]# echo osnoise > current_tracer”h]”hŒW[root@f32 ~]# cd /sys/kernel/tracing/ [root@f32 tracing]# echo osnoise > current_tracer”…””}”hjlsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jjh³hÊh´K3hj=h²hubhÌ)”}”(hŒ>It is possible to follow the trace by reading the trace file::”h]”hŒ=It is possible to follow the trace by reading the trace file:”…””}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj=h²hubjk)”}”(hXÜ[root@f32 tracing]# cat trace # tracer: osnoise # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth MAX # || / SINGLE Interference counters: # |||| RUNTIME NOISE % OF CPU NOISE +-----------------------------+ # TASK-PID CPU# |||| TIMESTAMP IN US IN US AVAILABLE IN US HW NMI IRQ SIRQ THREAD # | | | |||| | | | | | | | | | | <...>-859 [000] .... 81.637220: 1000000 190 99.98100 9 18 0 1007 18 1 <...>-860 [001] .... 81.638154: 1000000 656 99.93440 74 23 0 1006 16 3 <...>-861 [002] .... 81.638193: 1000000 5675 99.43250 202 6 0 1013 25 21 <...>-862 [003] .... 81.638242: 1000000 125 99.98750 45 1 0 1011 23 0 <...>-863 [004] .... 81.638260: 1000000 1721 99.82790 168 7 0 1002 49 41 <...>-864 [005] .... 81.638286: 1000000 263 99.97370 57 6 0 1006 26 2 <...>-865 [006] .... 81.638302: 1000000 109 99.98910 21 3 0 1006 18 1 <...>-866 [007] .... 81.638326: 1000000 7816 99.21840 107 8 0 1016 39 19”h]”hXÜ[root@f32 tracing]# cat trace # tracer: osnoise # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth MAX # || / SINGLE Interference counters: # |||| RUNTIME NOISE % OF CPU NOISE +-----------------------------+ # TASK-PID CPU# |||| TIMESTAMP IN US IN US AVAILABLE IN US HW NMI IRQ SIRQ THREAD # | | | |||| | | | | | | | | | | <...>-859 [000] .... 81.637220: 1000000 190 99.98100 9 18 0 1007 18 1 <...>-860 [001] .... 81.638154: 1000000 656 99.93440 74 23 0 1006 16 3 <...>-861 [002] .... 81.638193: 1000000 5675 99.43250 202 6 0 1013 25 21 <...>-862 [003] .... 81.638242: 1000000 125 99.98750 45 1 0 1011 23 0 <...>-863 [004] .... 81.638260: 1000000 1721 99.82790 168 7 0 1002 49 41 <...>-864 [005] .... 81.638286: 1000000 263 99.97370 57 6 0 1006 26 2 <...>-865 [006] .... 81.638302: 1000000 109 99.98910 21 3 0 1006 18 1 <...>-866 [007] .... 81.638326: 1000000 7816 99.21840 107 8 0 1016 39 19”…””}”hjŠsbah}”(h]”h ]”h"]”h$]”h&]”jzj{uh1jjh³hÊh´K8hj=h²hubhÌ)”}”(hŒÐIn addition to the regular trace fields (from TASK-PID to TIMESTAMP), the tracer prints a message at the end of each period for each CPU that is running an osnoise/ thread. The osnoise specific fields report:”h]”hŒÐIn addition to the regular trace fields (from TASK-PID to TIMESTAMP), the tracer prints a message at the end of each period for each CPU that is running an osnoise/ thread. The osnoise specific fields report:”…””}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KLhj=h²hubhŒ block_quote”“”)”}”(hXC- The RUNTIME IN US reports the amount of time in microseconds that the osnoise thread kept looping reading the time. - The NOISE IN US reports the sum of noise in microseconds observed by the osnoise tracer during the associated runtime. - The % OF CPU AVAILABLE reports the percentage of CPU available for the osnoise thread during the runtime window. - The MAX SINGLE NOISE IN US reports the maximum single noise observed during the runtime window. - The Interference counters display how many each of the respective interference happened during the runtime window. ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒsThe RUNTIME IN US reports the amount of time in microseconds that the osnoise thread kept looping reading the time.”h]”hÌ)”}”(hŒsThe RUNTIME IN US reports the amount of time in microseconds that the osnoise thread kept looping reading the time.”h]”hŒsThe RUNTIME IN US reports the amount of time in microseconds that the osnoise thread kept looping reading the time.”…””}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hj®ubj²)”}”(hŒvThe NOISE IN US reports the sum of noise in microseconds observed by the osnoise tracer during the associated runtime.”h]”hÌ)”}”(hŒvThe NOISE IN US reports the sum of noise in microseconds observed by the osnoise tracer during the associated runtime.”h]”hŒvThe NOISE IN US reports the sum of noise in microseconds observed by the osnoise tracer during the associated runtime.”…””}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KRhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hj®ubj²)”}”(hŒpThe % OF CPU AVAILABLE reports the percentage of CPU available for the osnoise thread during the runtime window.”h]”hÌ)”}”(hŒpThe % OF CPU AVAILABLE reports the percentage of CPU available for the osnoise thread during the runtime window.”h]”hŒpThe % OF CPU AVAILABLE reports the percentage of CPU available for the osnoise thread during the runtime window.”…””}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hj®ubj²)”}”(hŒ_The MAX SINGLE NOISE IN US reports the maximum single noise observed during the runtime window.”h]”hÌ)”}”(hŒ_The MAX SINGLE NOISE IN US reports the maximum single noise observed during the runtime window.”h]”hŒ_The MAX SINGLE NOISE IN US reports the maximum single noise observed during the runtime window.”…””}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hj®ubj²)”}”(hŒsThe Interference counters display how many each of the respective interference happened during the runtime window. ”h]”hÌ)”}”(hŒrThe Interference counters display how many each of the respective interference happened during the runtime window.”h]”hŒrThe Interference counters display how many each of the respective interference happened during the runtime window.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j¬h³hÊh´KPhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦h³hÊh´KPhj=h²hubhÌ)”}”(hŒËNote that the example above shows a high number of HW noise samples. The reason being is that this sample was taken on a virtual machine, and the host interference is detected as a hardware interference.”h]”hŒËNote that the example above shows a high number of HW noise samples. The reason being is that this sample was taken on a virtual machine, and the host interference is detected as a hardware interference.”…””}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K[hj=h²hubeh}”(h]”Œusage”ah ]”h"]”Œusage”ah$]”h&]”uh1hµhh·h²hh³hÊh´K,ubh¶)”}”(hhh]”(h»)”}”(hŒTracer Configuration”h]”hŒTracer Configuration”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjOh²hh³hÊh´K`ubhÌ)”}”(hŒGThe tracer has a set of options inside the osnoise directory, they are:”h]”hŒGThe tracer has a set of options inside the osnoise directory, they are:”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KbhjOh²hubj§)”}”(hXÜ- osnoise/cpus: CPUs at which a osnoise thread will execute. - osnoise/period_us: the period of the osnoise thread. - osnoise/runtime_us: how long an osnoise thread will look for noise. - osnoise/stop_tracing_us: stop the system tracing if a single noise higher than the configured value happens. Writing 0 disables this option. - osnoise/stop_tracing_total_us: stop the system tracing if total noise higher than the configured value happens. Writing 0 disables this option. - tracing_threshold: the minimum delta between two time() reads to be considered as noise, in us. When set to 0, the default value will be used, which is currently 1 us. - osnoise/options: a set of on/off options that can be enabled by writing the option name to the file or disabled by writing the option name preceded with the 'NO\_' prefix. For example, writing NO_OSNOISE_WORKLOAD disables the OSNOISE_WORKLOAD option. The special DEAFAULTS option resets all options to the default value. ”h]”j­)”}”(hhh]”(j²)”}”(hŒ:osnoise/cpus: CPUs at which a osnoise thread will execute.”h]”hÌ)”}”(hjwh]”hŒ:osnoise/cpus: CPUs at which a osnoise thread will execute.”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kdhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hŒ4osnoise/period_us: the period of the osnoise thread.”h]”hÌ)”}”(hjŽh]”hŒ4osnoise/period_us: the period of the osnoise thread.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KehjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hŒCosnoise/runtime_us: how long an osnoise thread will look for noise.”h]”hÌ)”}”(hj¥h]”hŒCosnoise/runtime_us: how long an osnoise thread will look for noise.”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kfhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hŒŒosnoise/stop_tracing_us: stop the system tracing if a single noise higher than the configured value happens. Writing 0 disables this option.”h]”hÌ)”}”(hŒŒosnoise/stop_tracing_us: stop the system tracing if a single noise higher than the configured value happens. Writing 0 disables this option.”h]”hŒŒosnoise/stop_tracing_us: stop the system tracing if a single noise higher than the configured value happens. Writing 0 disables this option.”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kghjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hŒosnoise/stop_tracing_total_us: stop the system tracing if total noise higher than the configured value happens. Writing 0 disables this option.”h]”hÌ)”}”(hŒosnoise/stop_tracing_total_us: stop the system tracing if total noise higher than the configured value happens. Writing 0 disables this option.”h]”hŒosnoise/stop_tracing_total_us: stop the system tracing if total noise higher than the configured value happens. Writing 0 disables this option.”…””}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KjhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hŒ§tracing_threshold: the minimum delta between two time() reads to be considered as noise, in us. When set to 0, the default value will be used, which is currently 1 us.”h]”hÌ)”}”(hŒ§tracing_threshold: the minimum delta between two time() reads to be considered as noise, in us. When set to 0, the default value will be used, which is currently 1 us.”h]”hŒ§tracing_threshold: the minimum delta between two time() reads to be considered as noise, in us. When set to 0, the default value will be used, which is currently 1 us.”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kmhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubj²)”}”(hXAosnoise/options: a set of on/off options that can be enabled by writing the option name to the file or disabled by writing the option name preceded with the 'NO\_' prefix. For example, writing NO_OSNOISE_WORKLOAD disables the OSNOISE_WORKLOAD option. The special DEAFAULTS option resets all options to the default value. ”h]”hÌ)”}”(hX@osnoise/options: a set of on/off options that can be enabled by writing the option name to the file or disabled by writing the option name preceded with the 'NO\_' prefix. For example, writing NO_OSNOISE_WORKLOAD disables the OSNOISE_WORKLOAD option. The special DEAFAULTS option resets all options to the default value.”h]”hXDosnoise/options: a set of on/off options that can be enabled by writing the option name to the file or disabled by writing the option name preceded with the ‘NO_’ prefix. For example, writing NO_OSNOISE_WORKLOAD disables the OSNOISE_WORKLOAD option. The special DEAFAULTS option resets all options to the default value.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphjubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjrubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1j¬h³hÊh´Kdhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦h³hÊh´KdhjOh²hubeh}”(h]”Œtracer-configuration”ah ]”h"]”Œtracer configuration”ah$]”h&]”uh1hµhh·h²hh³hÊh´K`ubh¶)”}”(hhh]”(h»)”}”(hŒTracer Options”h]”hŒTracer Options”…””}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj.h²hh³hÊh´KwubhÌ)”}”(hŒqThe osnoise/options file exposes a set of on/off configuration options for the osnoise tracer. These options are:”h]”hŒqThe osnoise/options file exposes a set of on/off configuration options for the osnoise tracer. These options are:”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj.h²hubj§)”}”(hXõ- DEFAULTS: reset the options to the default value. - OSNOISE_WORKLOAD: do not dispatch osnoise workload (see dedicated section below). - PANIC_ON_STOP: call panic() if the tracer stops. This option serves to capture a vmcore. - OSNOISE_PREEMPT_DISABLE: disable preemption while running the osnoise workload, allowing only IRQ and hardware-related noise. - OSNOISE_IRQ_DISABLE: disable IRQs while running the osnoise workload, allowing only NMIs and hardware-related noise, like hwlat tracer. ”h]”j­)”}”(hhh]”(j²)”}”(hŒ1DEFAULTS: reset the options to the default value.”h]”hÌ)”}”(hjVh]”hŒ1DEFAULTS: reset the options to the default value.”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjQubj²)”}”(hŒQOSNOISE_WORKLOAD: do not dispatch osnoise workload (see dedicated section below).”h]”hÌ)”}”(hŒQOSNOISE_WORKLOAD: do not dispatch osnoise workload (see dedicated section below).”h]”hŒQOSNOISE_WORKLOAD: do not dispatch osnoise workload (see dedicated section below).”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjQubj²)”}”(hŒXPANIC_ON_STOP: call panic() if the tracer stops. This option serves to capture a vmcore.”h]”hÌ)”}”(hŒXPANIC_ON_STOP: call panic() if the tracer stops. This option serves to capture a vmcore.”h]”hŒXPANIC_ON_STOP: call panic() if the tracer stops. This option serves to capture a vmcore.”…””}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjQubj²)”}”(hŒ}OSNOISE_PREEMPT_DISABLE: disable preemption while running the osnoise workload, allowing only IRQ and hardware-related noise.”h]”hÌ)”}”(hŒ}OSNOISE_PREEMPT_DISABLE: disable preemption while running the osnoise workload, allowing only IRQ and hardware-related noise.”h]”hŒ}OSNOISE_PREEMPT_DISABLE: disable preemption while running the osnoise workload, allowing only IRQ and hardware-related noise.”…””}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjQubj²)”}”(hŒˆOSNOISE_IRQ_DISABLE: disable IRQs while running the osnoise workload, allowing only NMIs and hardware-related noise, like hwlat tracer. ”h]”hÌ)”}”(hŒ‡OSNOISE_IRQ_DISABLE: disable IRQs while running the osnoise workload, allowing only NMIs and hardware-related noise, like hwlat tracer.”h]”hŒ‡OSNOISE_IRQ_DISABLE: disable IRQs while running the osnoise workload, allowing only NMIs and hardware-related noise, like hwlat tracer.”…””}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjQubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1j¬h³hÊh´K|hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦h³hÊh´K|hj.h²hubeh}”(h]”Œtracer-options”ah ]”h"]”Œtracer options”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kwubh¶)”}”(hhh]”(h»)”}”(hŒAdditional Tracing”h]”hŒAdditional Tracing”…””}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjßh²hh³hÊh´K‡ubhÌ)”}”(hŒrIn addition to the tracer, a set of tracepoints were added to facilitate the identification of the osnoise source.”h]”hŒrIn addition to the tracer, a set of tracepoints were added to facilitate the identification of the osnoise source.”…””}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‰hjßh²hubj§)”}”(hXo- osnoise:sample_threshold: printed anytime a noise is higher than the configurable tolerance_ns. - osnoise:nmi_noise: noise from NMI, including the duration. - osnoise:irq_noise: noise from an IRQ, including the duration. - osnoise:softirq_noise: noise from a SoftIRQ, including the duration. - osnoise:thread_noise: noise from a thread, including the duration. ”h]”j­)”}”(hhh]”(j²)”}”(hŒ_osnoise:sample_threshold: printed anytime a noise is higher than the configurable tolerance_ns.”h]”hÌ)”}”(hŒ_osnoise:sample_threshold: printed anytime a noise is higher than the configurable tolerance_ns.”h]”hŒ_osnoise:sample_threshold: printed anytime a noise is higher than the configurable tolerance_ns.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŒhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjubj²)”}”(hŒ:osnoise:nmi_noise: noise from NMI, including the duration.”h]”hÌ)”}”(hjh]”hŒ:osnoise:nmi_noise: noise from NMI, including the duration.”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŽhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjubj²)”}”(hŒ=osnoise:irq_noise: noise from an IRQ, including the duration.”h]”hÌ)”}”(hj6h]”hŒ=osnoise:irq_noise: noise from an IRQ, including the duration.”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjubj²)”}”(hŒDosnoise:softirq_noise: noise from a SoftIRQ, including the duration.”h]”hÌ)”}”(hŒDosnoise:softirq_noise: noise from a SoftIRQ, including the duration.”h]”hŒDosnoise:softirq_noise: noise from a SoftIRQ, including the duration.”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjubj²)”}”(hŒCosnoise:thread_noise: noise from a thread, including the duration. ”h]”hÌ)”}”(hŒBosnoise:thread_noise: noise from a thread, including the duration.”h]”hŒBosnoise:thread_noise: noise from a thread, including the duration.”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K’hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j±hjubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1j¬h³hÊh´KŒhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦h³hÊh´KŒhjßh²hubhÌ)”}”(hXðNote that all the values are *net values*. For example, if while osnoise is running, another thread preempts the osnoise thread, it will start a thread_noise duration at the start. Then, an IRQ takes place, preempting the thread_noise, starting a irq_noise. When the IRQ ends its execution, it will compute its duration, and this duration will be subtracted from the thread_noise, in such a way as to avoid the double accounting of the IRQ execution. This logic is valid for all sources of noise.”h]”(hŒNote that all the values are ”…””}”(hj‡h²hh³Nh´NubhÖ)”}”(hŒ *net values*”h]”hŒ net values”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj‡ubhXÇ. For example, if while osnoise is running, another thread preempts the osnoise thread, it will start a thread_noise duration at the start. Then, an IRQ takes place, preempting the thread_noise, starting a irq_noise. When the IRQ ends its execution, it will compute its duration, and this duration will be subtracted from the thread_noise, in such a way as to avoid the double accounting of the IRQ execution. This logic is valid for all sources of noise.”…””}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K”hjßh²hubhÌ)”}”(hŒ7Here is one example of the usage of these tracepoints::”h]”hŒ6Here is one example of the usage of these tracepoints:”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kœhjßh²hubjk)”}”(hXÀ osnoise/8-961 [008] d.h. 5789.857532: irq_noise: local_timer:236 start 5789.857529929 duration 1845 ns osnoise/8-961 [008] dNh. 5789.858408: irq_noise: local_timer:236 start 5789.858404871 duration 2848 ns migration/8-54 [008] d... 5789.858413: thread_noise: migration/8:54 start 5789.858409300 duration 3068 ns osnoise/8-961 [008] .... 5789.858413: sample_threshold: start 5789.858404555 duration 8812 ns interferences 2”h]”hXÀ osnoise/8-961 [008] d.h. 5789.857532: irq_noise: local_timer:236 start 5789.857529929 duration 1845 ns osnoise/8-961 [008] dNh. 5789.858408: irq_noise: local_timer:236 start 5789.858404871 duration 2848 ns migration/8-54 [008] d... 5789.858413: thread_noise: migration/8:54 start 5789.858409300 duration 3068 ns osnoise/8-961 [008] .... 5789.858413: sample_threshold: start 5789.858404555 duration 8812 ns interferences 2”…””}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”jzj{uh1jjh³hÊh´Kžhjßh²hubhÌ)”}”(hXCIn this example, a noise sample of 8 microseconds was reported in the last line, pointing to two interferences. Looking backward in the trace, the two previous entries were about the migration thread running after a timer IRQ execution. The first event is not part of the noise because it took place one millisecond before.”h]”hXCIn this example, a noise sample of 8 microseconds was reported in the last line, pointing to two interferences. Looking backward in the trace, the two previous entries were about the migration thread running after a timer IRQ execution. The first event is not part of the noise because it took place one millisecond before.”…””}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K£hjßh²hubhÌ)”}”(hX>It is worth noticing that the sum of the duration reported in the tracepoints is smaller than eight us reported in the sample_threshold. The reason roots in the overhead of the entry and exit code that happens before and after any interference execution. This justifies the dual approach: measuring thread and tracing.”h]”hX>It is worth noticing that the sum of the duration reported in the tracepoints is smaller than eight us reported in the sample_threshold. The reason roots in the overhead of the entry and exit code that happens before and after any interference execution. This justifies the dual approach: measuring thread and tracing.”…””}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K©hjßh²hubeh}”(h]”Œadditional-tracing”ah ]”h"]”Œadditional tracing”ah$]”h&]”uh1hµhh·h²hh³hÊh´K‡ubh¶)”}”(hhh]”(h»)”}”(hŒ'Running osnoise tracer without workload”h]”hŒ'Running osnoise tracer without workload”…””}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjçh²hh³hÊh´K°ubhÌ)”}”(hŒÊBy enabling the osnoise tracer with the NO_OSNOISE_WORKLOAD option set, the osnoise: tracepoints serve to measure the execution time of any type of Linux task, free from the interference of other tasks.”h]”hŒÊBy enabling the osnoise tracer with the NO_OSNOISE_WORKLOAD option set, the osnoise: tracepoints serve to measure the execution time of any type of Linux task, free from the interference of other tasks.”…””}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hjçh²hubeh}”(h]”Œ'running-osnoise-tracer-without-workload”ah ]”h"]”Œ'running osnoise tracer without workload”ah$]”h&]”uh1hµhh·h²hh³hÊh´K°ubeh}”(h]”Œosnoise-tracer”ah ]”h"]”Œosnoise tracer”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j9Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jjjLjIj+j(jÜjÙjäjáj juŒ nametypes”}”(j‰jL‰j+‰j܉jä‰j ‰uh}”(jh·jIj=j(jOjÙj.jájßjjçuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.