sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget;/translations/zh_CN/core-api/real-time/kernel-configurationmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/zh_TW/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/it_IT/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/ja_JP/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/ko_KR/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/pt_BR/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget;/translations/sp_SP/core-api/real-time/kernel-configurationmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/core-api/real-time/kernel-configuration.rsthKubhsection)}(hhh](htitle)}(hReal-Time Kernel configurationh]hReal-Time Kernel configuration}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(hTable of Contents h](h)}(hTable of Contentsh]hTable of Contents}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhK ubh bullet_list)}(hhh](h list_item)}(hhh]h paragraph)}(hhh]h reference)}(hhh]h Introduction}(hjhhhNhNubah}(h]id4ah ]h"]h$]h&]refid introductionuh1jhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]j)}(hhh]hConfiguration options}(hj$hhhNhNubah}(h]id5ah ]h"]h$]h&]refidconfiguration-optionsuh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh](h)}(hhh](h)}(hhh]j)}(hhh]hCPU frequency governors}(hjChhhNhNubah}(h]id6ah ]h"]h$]h&]refidcpu-frequency-governorsuh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhj=ubh)}(hhh](h)}(hhh]h)}(hhh]j)}(hhh]hliteral)}(h``CONFIG_CPU_FREQ``h]hCONFIG_CPU_FREQ}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjbubah}(h]id7ah ]h"]h$]h&]refidconfig-cpu-frequh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&]uh1hhjYubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h+``CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE``h]h'CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id8ah ]h"]h$]h&]refid'config-cpu-freq-default-gov-performanceuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjYubh)}(hhh]h)}(hhh]j)}(hhh]h'Non-performance CPU frequency governors}(hjhhhNhNubah}(h]id9ah ]h"]h$]h&]refid'non-performance-cpu-frequency-governorsuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_CPU_IDLE``h]hCONFIG_CPU_IDLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id10ah ]h"]h$]h&]refidconfig-cpu-idleuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_DRM``h]h CONFIG_DRM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id11ah ]h"]h$]h&]refid config-drmuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_EFI_DISABLE_RUNTIME``h]hCONFIG_EFI_DISABLE_RUNTIME}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjBubah}(h]id12ah ]h"]h$]h&]refidconfig-efi-disable-runtimeuh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh]h)}(hhh]j)}(hhh](jf)}(h``CONFIG_NO_HZ``h]h CONFIG_NO_HZ}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjnubh / }(hjnhhhNhNubjf)}(h``CONFIG_NO_HZ_FULL``h]hCONFIG_NO_HZ_FULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjnubeh}(h]id13ah ]h"]h$]h&]refidconfig-no-hz-config-no-hz-fulluh1jhjkubah}(h]h ]h"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_PREEMPT_RT``h]hCONFIG_PREEMPT_RT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id14ah ]h"]h$]h&]refidconfig-preempt-rtuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhj:ubh)}(hhh](h)}(hhh]j)}(hhh](jf)}(h``CONFIG_TRACING``h]hCONFIG_TRACING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubh (and tracing options)}(hjhhhNhNubeh}(h]id15ah ]h"]h$]h&]refid"config-tracing-and-tracing-optionsuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]j)}(hhh](jf)}(h``CONFIG_IRQSOFF_TRACER``h]hCONFIG_IRQSOFF_TRACER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubh and }(hjhhhNhNubjf)}(h``CONFIG_PREEMPT_TRACER``h]hCONFIG_PREEMPT_TRACER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubeh}(h]id16ah ]h"]h$]h&]refid/config-irqsoff-tracer-and-config-preempt-traceruh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]j)}(hhh]hKernel Debug Options}(hj[hhhNhNubah}(h]id17ah ]h"]h$]h&]refidkernel-debug-optionsuh1jhjXubah}(h]h ]h"]h$]h&]uh1hhjUubh)}(hhh](h)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_DEBUG_ATOMIC_SLEEP``h]hCONFIG_DEBUG_ATOMIC_SLEEP}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjzubah}(h]id18ah ]h"]h$]h&]refidconfig-debug-atomic-sleepuh1jhjwubah}(h]h ]h"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(hhh]h)}(hhh]j)}(hhh](jf)}(h``CONFIG_DEBUG_BUGVERBOSE``h]hCONFIG_DEBUG_BUGVERBOSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubh and }(hjhhhNhNubjf)}(h``CONFIG_DEBUG_INFO*``h]hCONFIG_DEBUG_INFO*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubeh}(h]id19ah ]h"]h$]h&]refid-config-debug-bugverbose-and-config-debug-infouh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_DEBUG_FS``h]hCONFIG_DEBUG_FS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id20ah ]h"]h$]h&]refidconfig-debug-fsuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_DEBUG_KERNEL``h]hCONFIG_DEBUG_KERNEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjubah}(h]id21ah ]h"]h$]h&]refidconfig-debug-kerneluh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_LOCKUP_DETECTOR``h]hCONFIG_LOCKUP_DETECTOR}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhj<ubah}(h]id22ah ]h"]h$]h&]refidconfig-lockup-detectoruh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(hhh]h)}(hhh]j)}(hhh]jf)}(h``CONFIG_PROVE_LOCKING``h]hCONFIG_PROVE_LOCKING}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jehNhNhjhubah}(h]id23ah ]h"]h$]h&]refidconfig-prove-lockinguh1jhjeubah}(h]h ]h"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]uh1hhjUubeh}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]j)}(hhh]hSummary}(hjhhhNhNubah}(h]id24ah ]h"]h$]h&]refidsummaryuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]j)}(hhh]h References}(hjhhhNhNubah}(h]id25ah ]h"]h$]h&]refid referencesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhNhNubeh}(h]table-of-contentsah ](contentslocaleh"]table of contentsah$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]refidj uh1hhjhhhhhK ubh)}(hThis document lists the kernel configuration options that might affect a real-time kernel's worst-case latency. It is intended for system integrators.h]hThis document lists the kernel configuration options that might affect a real-time kernel’s worst-case latency. It is intended for system integrators.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]jah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hConfiguration optionsh]hConfiguration options}(hjhhhNhNubah}(h]h ]h"]h$]h&]jj-uh1hhjhhhhhKubh)}(h=Please keep the configuration listings alphabetically orderedh]h=Please keep the configuration listings alphabetically ordered}hj&sbah}(h]h ]h"]h$]h&]hhuh1hhjhhhhhKubh)}(hhh](h)}(hCPU frequency governorsh]hCPU frequency governors}(hj7hhhNhNubah}(h]h ]h"]h$]h&]jjLuh1hhj4hhhhhKubh)}(hhh](h)}(hjih]jf)}(hjih]hCONFIG_CPU_FREQ}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjHubah}(h]h ]h"]h$]h&]jjwuh1hhjEhhhhhKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(h Expectationh]h Expectation}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjehhhKubh field_body)}(henabledh]h)}(hj|h]henabled}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjzubah}(h]h ]h"]h$]h&]uh1jxhjeubeh}(h]h ]h"]h$]h&]uh1jchhhKhj`hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(h*high* h]h)}(h*high*h]hemphasis)}(hjh]hhigh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhj`hhubeh}(h]h ]h"]h$]h&]uh1j^hjEhhhhhKubh)}(hXThe CPU frequency scaling subsystem ensures that the processor can operate at its maximum supported frequency. While, in general, bootloaders are tasked with setting the CPU clock to the highest speed on boot, some do not. It is thus desirable to keep this option enabled.h]hXThe CPU frequency scaling subsystem ensures that the processor can operate at its maximum supported frequency. While, in general, bootloaders are tasked with setting the CPU clock to the highest speed on boot, some do not. It is thus desirable to keep this option enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEhhubhcaution)}(hA real-time kernel is not about being "as fast as possible", however real-time requirements may demand that the CPU is clocked at a particular speed.h]h)}(hA real-time kernel is not about being "as fast as possible", however real-time requirements may demand that the CPU is clocked at a particular speed.h]hA real-time kernel is not about being “as fast as possible”, however real-time requirements may demand that the CPU is clocked at a particular speed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubeh}(h]j}ah ]h"]config_cpu_freqah$]h&]uh1hhj4hhhhhKubh)}(hhh](h)}(hjh]jf)}(hjh]h'CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhK+ubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj"hhhKubjy)}(henabledh]h)}(hj5h]henabled}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj3ubah}(h]h ]h"]h$]h&]uh1jxhj"ubeh}(h]h ]h"]h$]h&]uh1jchhhK-hjhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjPhhhKubjy)}(h*high* h]h)}(h*high*h]j)}(hjgh]hhigh}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhhhK.hjaubah}(h]h ]h"]h$]h&]uh1jxhjPubeh}(h]h ]h"]h$]h&]uh1jchhhK.hjhhubeh}(h]h ]h"]h$]h&]uh1j^hjhhhhhK-ubh)}(hReal-Time workloads expect a fixed CPU frequency during execution. Using the performance governor is an easy way to achieve that purely from kernel configuration.h]hReal-Time workloads expect a fixed CPU frequency during execution. Using the performance governor is an easy way to achieve that purely from kernel configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjhhubh)}(hThis is not an absolute rule. Some setups might prefer to clock the CPU to lower speeds due to thermal packaging or other requirements. The key is that the CPU frequency remains constant once set.h]hThis is not an absolute rule. Some setups might prefer to clock the CPU to lower speeds due to thermal packaging or other requirements. The key is that the CPU frequency remains constant once set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjhhubeh}(h]jah ]h"]'config_cpu_freq_default_gov_performanceah$]h&]uh1hhj4hhhhhK+ubh)}(hhh](h)}(h'Non-performance CPU frequency governorsh]h'Non-performance CPU frequency governors}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhK9ubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(hdisabledh]h)}(hjh]hdisabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhK;hjhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(h *medium* h]h)}(h*medium*h]j)}(hj h]hmedium}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXIf disabling other frequency governors is not an option, use a governor that keeps the CPU frequency fixed. For example, ``CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE`` can be enabled when userspace is responsible for setting a *stable* frequency during system initialization.h](hzIf disabling other frequency governors is not an option, use a governor that keeps the CPU frequency fixed. For example, }(hjQhhhNhNubjf)}(h)``CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE``h]h%CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjQubh< can be enabled when userspace is responsible for setting a }(hjQhhhNhNubj)}(h*stable*h]hstable}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh( frequency during system initialization.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhjhhubh)}(h]If a low CPU frequency is desired, then ``CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE`` can be set.h](h(If a low CPU frequency is desired, then }(hjhhhNhNubjf)}(h)``CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE``h]h%CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubh can be set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKIhjhhubh)}(hThe ``ONDEMAND`` governor should not be enabled on a real-time system. Its frequency changes depend on workload behavior and can significantly harm determinism.h](hThe }(hjhhhNhNubjf)}(h ``ONDEMAND``h]hONDEMAND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubh governor should not be enabled on a real-time system. Its frequency changes depend on workload behavior and can significantly harm determinism.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhjhhubh)}(hBFor more information, see Documentation/admin-guide/pm/cpufreq.rsth]hBFor more information, see Documentation/admin-guide/pm/cpufreq.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubeh}(h]jah ]h"]'non-performance cpu frequency governorsah$]h&]uh1hhj4hhhhhK9ubeh}(h]jRah ]h"]cpu frequency governorsah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hjh]jf)}(hjh]hCONFIG_CPU_IDLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKSubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(henabledh]h)}(hjh]henabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhj ubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKUhjhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj)hhhKubjy)}(h*info* h]h)}(h*info*h]j)}(hj@h]hinfo}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhhhKVhj:ubah}(h]h ]h"]h$]h&]uh1jxhj)ubeh}(h]h ]h"]h$]h&]uh1jchhhKVhjhhubeh}(h]h ]h"]h$]h&]uh1j^hjhhhhhKUubh)}(hX1CPU idle states (C-states) allow the processor to enter low-power modes during periods of inactivity. Very-low CPU idle states may require flushing the CPU caches and lowering or disabling the clocking. This can lower power consumption, but it also increases the entry and exit latency from such states.h]hX1CPU idle states (C-states) allow the processor to enter low-power modes during periods of inactivity. Very-low CPU idle states may require flushing the CPU caches and lowering or disabling the clocking. This can lower power consumption, but it also increases the entry and exit latency from such states.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjhhubh)}(hXWhile disabling this option eliminates cpuidle-related latencies, doing so can significantly impact hardware longevity, warranty, and thermal behavior. Users should cap the maximum C-state to C1 instead. For ACPI platforms, this can be achieved by using the boot parameter [1]_::h](hXWhile disabling this option eliminates cpuidle-related latencies, doing so can significantly impact hardware longevity, warranty, and thermal behavior. Users should cap the maximum C-state to C1 instead. For ACPI platforms, this can be achieved by using the boot parameter }(hjuhhhNhNubhfootnote_reference)}(h[1]_h]h1}(hjhhhNhNubah}(h]id1ah ]h"]h$]h&]jid3docname'core-api/real-time/kernel-configurationuh1j}hjuresolvedKubh:}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hjhhubh literal_block)}(hprocessor.max_cstate=1h]hprocessor.max_cstate=1}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKchjhhubh)}(hHigher C-states can be acceptable depending on the user workload's latency requirements. For ACPI-based platforms, use the ``cpupower idle-info`` command to inspect the available idle states.h](h~Higher C-states can be acceptable depending on the user workload’s latency requirements. For ACPI-based platforms, use the }(hjhhhNhNubjf)}(h``cpupower idle-info``h]hcpupower idle-info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubh. command to inspect the available idle states.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKehjhhubh)}(h!For more information, please see:h]h!For more information, please see:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjhhubh)}(hhh](h)}(h``linux/tools/power/cpupower``h]h)}(hjh]jf)}(hjh]hlinux/tools/power/cpupower}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubah}(h]h ]h"]h$]h&]uh1hhhhKkhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(h(Documentation/admin-guide/pm/cpuidle.rsth]h)}(hjh]h(Documentation/admin-guide/pm/cpuidle.rst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(h'Documentation/admin-guide/pm/index.rst h]h)}(h&Documentation/admin-guide/pm/index.rsth]h&Documentation/admin-guide/pm/index.rst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhj ubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1hhhhKkhjhhubeh}(h]jah ]h"]config_cpu_idleah$]h&]uh1hhjhhhhhKSubh)}(hhh](h)}(hjh]jf)}(hjh]h CONFIG_DRM}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj> ubah}(h]h ]h"]h$]h&]jj)uh1hhj; hhhhhKpubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjW hhhKubjy)}(hdisabledh]h)}(hjj h]hdisabled}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjh ubah}(h]h ]h"]h$]h&]uh1jxhjW ubeh}(h]h ]h"]h$]h&]uh1jchhhKrhjT hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj hhhKubjy)}(h*info* h]h)}(h*info*h]j)}(hj h]hinfo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhhhKshj ubah}(h]h ]h"]h$]h&]uh1jxhj ubeh}(h]h ]h"]h$]h&]uh1jchhhKshjT hhubeh}(h]h ]h"]h$]h&]uh1j^hj; hhhhhKrubh)}(hGPU-accelerated workloads can share system resources with the CPU, including last-level cache (LLC) and memory bandwidth. Modern integrated GPUs optimize graphics performance at the expense of CPU determinism.h]hGPU-accelerated workloads can share system resources with the CPU, including last-level cache (LLC) and memory bandwidth. Modern integrated GPUs optimize graphics performance at the expense of CPU determinism.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj; hhubh)}(hExamples of affected platforms:h]hExamples of affected platforms:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhj; hhubh)}(hhh](h)}(h:Intel processors with integrated graphics (Gen9 and later)h]h)}(hj h]h:Intel processors with integrated graphics (Gen9 and later)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhNubh)}(hAMD APUs with Radeon Graphicsh]h)}(hj h]hAMD APUs with Radeon Graphics}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhNubh)}(h+Xilinx Zynq UltraScale+ MPSoC EG/EV series h]h)}(h*Xilinx Zynq UltraScale+ MPSoC EG/EV seriesh]h*Xilinx Zynq UltraScale+ MPSoC EG/EV series}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhNubeh}(h]h ]h"]h$]h&]j2 j3 uh1hhhhK{hj; hhubh)}(hIf graphics workloads must run alongside real-time tasks, users must conduct thorough stress testing using tools like ``glmark2`` while measuring the overall system latency.h](hvIf graphics workloads must run alongside real-time tasks, users must conduct thorough stress testing using tools like }(hj. hhhNhNubjf)}(h ``glmark2``h]hglmark2}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj. ubh, while measuring the overall system latency.}(hj. hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj; hhubh)}(h#For more information, please check:h]h#For more information, please check:}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj; hhubh)}(hhh](h)}(hLDocumentation/core-api/real-time/hardware.rst ("Regarding hardware" section)h]h)}(hja h]hPDocumentation/core-api/real-time/hardware.rst (“Regarding hardware” section)}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ ubah}(h]h ]h"]h$]h&]uh1hhj\ hhhhhNubh)}(h%Documentation/filesystems/resctrl.rsth]h)}(hjx h]h%Documentation/filesystems/resctrl.rst}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjv ubah}(h]h ]h"]h$]h&]uh1hhj\ hhhhhNubh)}(h`Real-Time and Graphics: A Contradiction? `_ h]h)}(h`Real-Time and Graphics: A Contradiction? `_h](j)}(hj h]h(Real-Time and Graphics: A Contradiction?}(hj hhhNhNubah}(h]h ]h"]h$]h&]name(Real-Time and Graphics: A Contradiction?refuriqhttps://web.archive.org/web/20221025085614/https://linutronix.de/PDF/Realtime_and_graphics-acontradiction2021.pdfuh1jhj ubhtarget)}(ht h]h}(h]&real-time-and-graphics-a-contradictionah ]h"](real-time and graphics: a contradiction?ah$]h&]refurij uh1j referencedKhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhj\ hhhhhNubeh}(h]h ]h"]h$]h&]j2 j3 uh1hhhhKhj; hhubeh}(h]j/ah ]h"] config_drmah$]h&]uh1hhjhhhhhKpubh)}(hhh](h)}(hjGh]jf)}(hjGh]hCONFIG_EFI_DISABLE_RUNTIME}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubah}(h]h ]h"]h$]h&]jjUuh1hhj hhhhhKubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj hhhKubjy)}(henabledh]h)}(hj h]henabled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jxhj ubeh}(h]h ]h"]h$]h&]uh1jchhhKhj hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj hhhKubjy)}(h *medium* h]h)}(h*medium*h]j)}(hj0 h]hmedium}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&]uh1hhhhKhj* ubah}(h]h ]h"]h$]h&]uh1jxhj ubeh}(h]h ]h"]h$]h&]uh1jchhhKhj hhubeh}(h]h ]h"]h$]h&]uh1j^hj hhhhhKubh)}(hX*EFI is the standard boot and firmware interface for multiple architectures. EFI runtime services provide callback functions to be called from the kernel; e.g., as utilized by (``CONFIG_EFI_VARS*``) or (``CONFIG_RTC_DRV_EFI``). For the former, the kernel calls into EFI to update the EFI variables.h](hEFI is the standard boot and firmware interface for multiple architectures. EFI runtime services provide callback functions to be called from the kernel; e.g., as utilized by (}(hjW hhhNhNubjf)}(h``CONFIG_EFI_VARS*``h]hCONFIG_EFI_VARS*}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jehjW ubh) or (}(hjW hhhNhNubjf)}(h``CONFIG_RTC_DRV_EFI``h]hCONFIG_RTC_DRV_EFI}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jehjW ubhJ). For the former, the kernel calls into EFI to update the EFI variables.}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hCalling into EFI means invoking firmware callbacks. During such invocations, the system might not be able to react to interrupts and will thus not be able to perform a context switch. This can cause significant latency spikes for the real-time system.h]hCalling into EFI means invoking firmware callbacks. During such invocations, the system might not be able to react to interrupts and will thus not be able to perform a context switch. This can cause significant latency spikes for the real-time system.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h``CONFIG_PREEMPT_RT`` enables this option by default. If this option is manually disabled at build time, the following boot parameter [1]_ may be used to disable EFI runtime at boot up::h](jf)}(h``CONFIG_PREEMPT_RT``h]hCONFIG_PREEMPT_RT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubhr enables this option by default. If this option is manually disabled at build time, the following boot parameter }(hj hhhNhNubj~)}(h[1]_h]h1}(hj hhhNhNubah}(h]id2ah ]h"]h$]h&]jjjjuh1j}hj jKubh/ may be used to disable EFI runtime at boot up:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(h efi=noruntimeh]h efi=noruntime}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj hhubh)}(hXAlternatively, confine EFI runtime service calls to a housekeeping CPU by restricting the ``efi_runtime`` workqueue CPU affinity. For example, set that workqueue's affinity to CPU #0 and pin your RT tasks to a different CPU range. See Documentation/core-api/workqueue.rsth](hZAlternatively, confine EFI runtime service calls to a housekeeping CPU by restricting the }(hj hhhNhNubjf)}(h``efi_runtime``h]h efi_runtime}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubh workqueue CPU affinity. For example, set that workqueue’s affinity to CPU #0 and pin your RT tasks to a different CPU range. See Documentation/core-api/workqueue.rst}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]j[ah ]h"]config_efi_disable_runtimeah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h(``CONFIG_NO_HZ`` / ``CONFIG_NO_HZ_FULL``h](jf)}(hjsh]h CONFIG_NO_HZ}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubh / }(hj hhhNhNubjf)}(hjh]hCONFIG_NO_HZ_FULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubeh}(h]h ]h"]h$]h&]jjuh1hhj hhhhhKubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj) hhhKubjy)}(hdisabledh]h)}(hj< h]hdisabled}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj: ubah}(h]h ]h"]h$]h&]uh1jxhj) ubeh}(h]h ]h"]h$]h&]uh1jchhhKhj& hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjW hhhKubjy)}(h *medium* h]h)}(h*medium*h]j)}(hjn h]hmedium}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1hhhhKhjh ubah}(h]h ]h"]h$]h&]uh1jxhjW ubeh}(h]h ]h"]h$]h&]uh1jchhhKhj& hhubeh}(h]h ]h"]h$]h&]uh1j^hj hhhhhKubh)}(hzTickless operation can increase kernel-to-userspace transition latency due to the extra accounting and state book-keeping.h]hzTickless operation can increase kernel-to-userspace transition latency due to the extra accounting and state book-keeping.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h&*Guidance by real-time workload type:*h]j)}(hj h]h$Guidance by real-time workload type:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hhh](h)}(hFor periodic workloads; e.g., control loops executing every 100 µs, avoid ``NO_HZ`` modes. Consistent kernel ticks are preferable. h]h)}(hFor periodic workloads; e.g., control loops executing every 100 µs, avoid ``NO_HZ`` modes. Consistent kernel ticks are preferable.h](hKFor periodic workloads; e.g., control loops executing every 100 µs, avoid }(hj hhhNhNubjf)}(h ``NO_HZ``h]hNO_HZ}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubh0 modes. Consistent kernel ticks are preferable.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhNubh)}(hFor computation-intensive workloads; e.g. extended userspace execution, ``NO_HZ_FULL`` may be beneficial. In such cases, users should offload the kernel housekeeping to dedicated CPUs and isolate compute cores. h]h)}(hFor computation-intensive workloads; e.g. extended userspace execution, ``NO_HZ_FULL`` may be beneficial. In such cases, users should offload the kernel housekeeping to dedicated CPUs and isolate compute cores.h](hHFor computation-intensive workloads; e.g. extended userspace execution, }(hj hhhNhNubjf)}(h``NO_HZ_FULL``h]h NO_HZ_FULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubh} may be beneficial. In such cases, users should offload the kernel housekeeping to dedicated CPUs and isolate compute cores.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhNubeh}(h]h ]h"]h$]h&]j2 j3 uh1hhhhKhj hhubh)}(h'See also Documentation/timers/no_hz.rsth]h'See also Documentation/timers/no_hz.rst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]jah ]h"] config_no_hz / config_no_hz_fullah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hjh]jf)}(hjh]hCONFIG_PREEMPT_RT}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj/ ubah}(h]h ]h"]h$]h&]jjuh1hhj, hhhhhKubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjH hhhKubjy)}(henabledh]h)}(hj[ h]henabled}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjY ubah}(h]h ]h"]h$]h&]uh1jxhjH ubeh}(h]h ]h"]h$]h&]uh1jchhhKhjE hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjv hhhKubjy)}(h **fatal** h]h)}(h **fatal**h]hstrong)}(hj h]hfatal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jxhjv ubeh}(h]h ]h"]h$]h&]uh1jchhhKhjE hhubeh}(h]h ]h"]h$]h&]uh1j^hj, hhhhhKubh)}(hiThis option must be enabled, or the resulting kernel will not be fully preemptible and real-time capable.h]hiThis option must be enabled, or the resulting kernel will not be fully preemptible and real-time capable.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj, hhubeh}(h]jah ]h"]config_preempt_rtah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h(``CONFIG_TRACING`` (and tracing options)h](jf)}(hjh]hCONFIG_TRACING}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj ubh (and tracing options)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]jjuh1hhj hhhhhKubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj hhhKubjy)}(henabledh]h)}(hj h]henabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jxhj ubeh}(h]h ]h"]h$]h&]uh1jchhhKhj hhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(h*info* h]h)}(h*info*h]j)}(hj1h]hinfo}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhj hhubeh}(h]h ]h"]h$]h&]uh1j^hj hhhhhKubh)}(hShipping kernels with tracing support enabled (but not actively running) is highly recommended. This will allow the users to extract more information if latency problems arise. Nonetheless, some tracers do incur latency overhead just by being enabled.h]hShipping kernels with tracing support enabled (but not actively running) is highly recommended. This will allow the users to extract more information if latency problems arise. Nonetheless, some tracers do incur latency overhead just by being enabled.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(hUsers should *not* make use of tracers or trace events during production real-time kernel operation as they can add considerable overhead and degrade the system's latency.h]h)}(hUsers should *not* make use of tracers or trace events during production real-time kernel operation as they can add considerable overhead and degrade the system's latency.h](h Users should }(hjjhhhNhNubj)}(h*not*h]hnot}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh make use of tracers or trace events during production real-time kernel operation as they can add considerable overhead and degrade the system’s latency.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjfubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubh)}(hhh](h)}(h7``CONFIG_IRQSOFF_TRACER`` and ``CONFIG_PREEMPT_TRACER``h](jf)}(hj h]hCONFIG_IRQSOFF_TRACER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubh and }(hjhhhNhNubjf)}(hjh]hCONFIG_PREEMPT_TRACER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubeh}(h]h ]h"]h$]h&]jj*uh1hhjhhhhhKubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(hdisabledh]h)}(hjh]hdisabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhjhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(h*high* h]h)}(h*high*h]j)}(hjh]hhigh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhjhhubeh}(h]h ]h"]h$]h&]uh1j^hjhhhhhKubh)}(h]These tracers do incur measurable latency overhead even when tracing is not currently active.h]h]These tracers do incur measurable latency overhead even when tracing is not currently active.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]j0ah ]h"]/config_irqsoff_tracer and config_preempt_tracerah$]h&]uh1hhj hhhhhKubeh}(h]jah ]h"]$config_tracing (and tracing options)ah$]h&]uh1hhjhhhhhKubeh}(h]j3ah ]h"]configuration optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hKernel Debug Optionsh]hKernel Debug Options}(hjPhhhNhNubah}(h]h ]h"]h$]h&]jjduh1hhjMhhhhhKubh)}(hUMost kernel debug options add runtime overhead that increases the worst-case latency.h]hUMost kernel debug options add runtime overhead that increases the worst-case latency.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjMhhubj)}(hXDuring development and early testing, users are encouraged to run their real-time workloads and peripherals with lockdep (:ref:`lockdep`) and other kernel debug options enabled, for a considerable amount of time. Such workloads might trigger kernel code paths that were not triggered during the internal Linux real-time kernel development, thus helping to uncover locking and other types of kernel bugs.h]h)}(hXDuring development and early testing, users are encouraged to run their real-time workloads and peripherals with lockdep (:ref:`lockdep`) and other kernel debug options enabled, for a considerable amount of time. Such workloads might trigger kernel code paths that were not triggered during the internal Linux real-time kernel development, thus helping to uncover locking and other types of kernel bugs.h](hzDuring development and early testing, users are encouraged to run their real-time workloads and peripherals with lockdep (}(hjphhhNhNubh)}(h:ref:`lockdep`h]hinline)}(hjzh]hlockdep}(hj~hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j|hjxubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarn reftargetlockdepuh1hhhhKhjpubhX ) and other kernel debug options enabled, for a considerable amount of time. Such workloads might trigger kernel code paths that were not triggered during the internal Linux real-time kernel development, thus helping to uncover locking and other types of kernel bugs.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjlubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubh)}(hhh](h)}(hjh]jf)}(hjh]hCONFIG_DEBUG_ATOMIC_SLEEP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKubj_)}(hhh]jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(hallowed h]h)}(hallowedh]hallowed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhjhhubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhKubh)}(hThis sanity check catches common kernel programming errors with a tolerable latency cost. It also increases overall scheduling as each ``might_sleep()`` can lead to a context switch.h](hThis sanity check catches common kernel programming errors with a tolerable latency cost. It also increases overall scheduling as each }(hjhhhNhNubjf)}(h``might_sleep()``h]h might_sleep()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubh can lead to a context switch.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]jah ]h"]config_debug_atomic_sleepah$]h&]uh1hhjMhhhhhKubh)}(hhh](h)}(h6``CONFIG_DEBUG_BUGVERBOSE`` and ``CONFIG_DEBUG_INFO*``h](jf)}(hjh]hCONFIG_DEBUG_BUGVERBOSE}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj'ubh and }(hj'hhhNhNubjf)}(hjh]hCONFIG_DEBUG_INFO*}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj'ubeh}(h]h ]h"]h$]h&]jjuh1hhj$hhhhhKubj_)}(hhh]jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjRhhhKubjy)}(hallowed h]h)}(hallowedh]hallowed}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjcubah}(h]h ]h"]h$]h&]uh1jxhjRubeh}(h]h ]h"]h$]h&]uh1jchhhKhjOhhubah}(h]h ]h"]h$]h&]uh1j^hj$hhhhhKubh)}(hThese options increase the kernel image size but have no latency impact. They are also essential for meaningful BUG logs, crash dumps, and profiling.h]hThese options increase the kernel image size but have no latency impact. They are also essential for meaningful BUG logs, crash dumps, and profiling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$hhubeh}(h]jah ]h"].config_debug_bugverbose and config_debug_info*ah$]h&]uh1hhjMhhhhhKubh)}(hhh](h)}(hjh]jf)}(hjh]hCONFIG_DEBUG_FS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKubj_)}(hhh]jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(hallowed h]h)}(hallowedh]hallowed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhKhjhhubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhKubh)}(hpThis is safe to include in real-time kernels, *provided that debugfs is not accessed during production runtime*.h](h.This is safe to include in real-time kernels, }(hjhhhNhNubj)}(hA*provided that debugfs is not accessed during production runtime*h]h?provided that debugfs is not accessed during production runtime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]jah ]h"]config_debug_fsah$]h&]uh1hhjMhhhhhKubh)}(hhh](h)}(hjh]jf)}(hjh]hCONFIG_DEBUG_KERNEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehjubah}(h]h ]h"]h$]h&]jj#uh1hhjhhhhhMubj_)}(hhh]jd)}(hhh](ji)}(h Expectationh]h Expectation}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhj0hhhKubjy)}(hallowed h]h)}(hallowedh]hallowed}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjAubah}(h]h ]h"]h$]h&]uh1jxhj0ubeh}(h]h ]h"]h$]h&]uh1jchhhMhj-hhubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhMubh)}(hMeta-option which allows debug features to be enabled. It has no runtime impact, but beware of any debug features that it may have implicitly enabled.h]hMeta-option which allows debug features to be enabled. It has no runtime impact, but beware of any debug features that it may have implicitly enabled.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]j)ah ]h"]config_debug_kernelah$]h&]uh1hhjMhhhhhMubh)}(hhh](h)}(hjAh]jf)}(hjAh]hCONFIG_LOCKUP_DETECTOR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jehj}ubah}(h]h ]h"]h$]h&]jjOuh1hhjzhhhhhM ubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(hdisabledh]h)}(hjh]hdisabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhMhjhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjhhhKubjy)}(h*high* h]h)}(h*high*h]j)}(hjh]hhigh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jxhjubeh}(h]h ]h"]h$]h&]uh1jchhhMhjhhubeh}(h]h ]h"]h$]h&]uh1j^hjzhhhhhMubh)}(hThe lockup detector creates kernel timer callbacks that execute every few seconds, in hard-IRQ context, even on real-time kernels. These periodic interrupts can cause latency spikes.h]hThe lockup detector creates kernel timer callbacks that execute every few seconds, in hard-IRQ context, even on real-time kernels. These periodic interrupts can cause latency spikes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjzhhubh)}(h}Users should use hardware watchdogs instead, which will provide a similar functionality without the software-induced latency.h]h}Users should use hardware watchdogs instead, which will provide a similar functionality without the software-induced latency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjzhhubj )}(h .. _lockdep:h]h}(h]h ]h"]h$]h&]jlockdepuh1j hMhjzhhhhubeh}(h]jUah ]h"]config_lockup_detectorah$]h&]uh1hhjMhhhhhM ubh)}(hhh](h)}(hjmh]jf)}(hjmh]hCONFIG_PROVE_LOCKING}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jehj3ubah}(h]h ]h"]h$]h&]jj{uh1hhj0hhhhhMubj_)}(hhh](jd)}(hhh](ji)}(h Expectationh]h Expectation}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjLhhhKubjy)}(hdisabledh]h)}(hj_h]hdisabled}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj]ubah}(h]h ]h"]h$]h&]uh1jxhjLubeh}(h]h ]h"]h$]h&]uh1jchhhMhjIhhubjd)}(hhh](ji)}(hSeverityh]hSeverity}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhjzhhhKubjy)}(h*high* h]h)}(h*high*h]j)}(hjh]hhigh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jxhjzubeh}(h]h ]h"]h$]h&]uh1jchhhMhjIhhubeh}(h]h ]h"]h$]h&]uh1j^hj0hhhhhMubh)}(hwProving the correctness of all kernel locking adds substantial overhead and significantly increases worst-case latency.h]hwProving the correctness of all kernel locking adds substantial overhead and significantly increases worst-case latency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj0hhubeh}(h](jj(eh ]h"](config_prove_lockinglockdepeh$]h&]uh1hhjMhhhhhMexpect_referenced_by_name}jjsexpect_referenced_by_id}j(jsubeh}(h]jjah ]h"]kernel debug optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSummaryh]hSummary}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhM$ubh)}(hX^There is no "one size fits all" solution for configuring a real-time Linux system. Beginning with the system real-time requirements, integrators must consider the features and functions of the system's hardware, kernel, and userspace. All such components must be properly configured in order to establish and constrain the system's maximum latency.h]hXfThere is no “one size fits all” solution for configuring a real-time Linux system. Beginning with the system real-time requirements, integrators must consider the features and functions of the system’s hardware, kernel, and userspace. All such components must be properly configured in order to establish and constrain the system’s maximum latency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjhhubh)}(hWith that in mind, any incorrect real-time kernel configuration could cause a new maximum latency that shows up at the wrong time and is catastrophic for the real-time system's latency.h]hWith that in mind, any incorrect real-time kernel configuration could cause a new maximum latency that shows up at the wrong time and is catastrophic for the real-time system’s latency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjhhubeh}(h]jah ]h"]summaryah$]h&]uh1hhhhhhhhM$ubh)}(hhh](h)}(h Referencesh]h References}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhj hhhhhM1ubhfootnote)}(h3See Documentation/admin-guide/kernel-parameters.rsth](hlabel)}(h1h]h1}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh)}(hj"h]h3See Documentation/admin-guide/kernel-parameters.rst}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hj ubeh}(h]jah ]h"]1ah$]h&](jj ejjuh1jhhhM3hj hhjKubeh}(h]jah ]h"] referencesah$]h&]uh1hhhhhhhhM1ubeh}(h]real-time-kernel-configurationah ]h"]real-time kernel configurationah$]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_handlerjzerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _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}1](jj esrefids}j(]jasnameids}(jTjQjjjjjJj3jjRjj}jjjjj8 jj j/j j j j[j) jj jjCjj<j0jjjj!jjjjjjwj)j-jUjj(jjj jjLjjEju nametypes}(jTjjjJjjjjj8 j j j j) j jCj<jj!jjjwj-jjj jLjEuh}(jQhjhjjj3jjRj4j}jEjjjjjjjjj/j; j j j[j j j jj jj, jj j0jjjjMjjjj$jjj)jjUjzj(j0jj0jjjj jj j jj-j$jLjCjwjbjjjjjjj)jjUjBjjnjjjjj*jjdj[jjzjjjjj#jjOj<j{jhjjjju footnote_refs}j](jj es citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes]j a citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h-Hyperlink target "lockdep" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehnjlineMuh1juba transformerN include_log] decorationNhhub.