€•JŠŒ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”Œ1/translations/zh_CN/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/zh_TW/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/it_IT/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ja_JP/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ko_KR/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/pt_BR/trace/rv/runtime-verification”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/sp_SP/trace/rv/runtime-verification”Œ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ŒRuntime Verification”h]”hŒRuntime Verification”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/trace/rv/runtime-verification.rst”h´KubhŒ paragraph”“”)�”}”(hŒãRuntime Verification (RV) is a lightweight (yet rigorous) method that complements classical exhaustive verification techniques (such as *model checking* and *theorem proving*) with a more practical approach for complex systems.”h]”(hŒˆRuntime Verification (RV) is a lightweight (yet rigorous) method that complements classical exhaustive verification techniques (such as ”…”�”}”(hhÍh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*model checking*”h]”hŒmodel checking”…”�”}”(hh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhÍubhŒ and ”…”�”}”(hhÍh²hh³Nh´NubhÖ)�”}”(hŒ*theorem proving*”h]”hŒtheorem proving”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhÍubhŒ5) with a more practical approach for complex systems.”…”�”}”(hhÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒîInstead of relying on a fine-grained model of a system (e.g., a re-implementation at instruction level), RV works by analyzing the trace of the system's actual execution, comparing it against a formal specification of the system behavior.”h]”hŒðInstead of relying on a fine-grained model of a system (e.g., a re-implementation at instruction level), RV works by analyzing the trace of the system’s actual execution, comparing it against a formal specification of the system behavior.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hXÒThe main advantage is that RV can give precise information on the runtime behavior of the monitored system, without the pitfalls of developing models that require a re-implementation of the entire system in a modeling language. Moreover, given an efficient monitoring method, it is possible to execute an *online* verification of a system, enabling the *reaction* for unexpected events, avoiding, for example, the propagation of a failure on safety-critical systems.”h]”(hX1The main advantage is that RV can give precise information on the runtime behavior of the monitored system, without the pitfalls of developing models that require a re-implementation of the entire system in a modeling language. Moreover, given an efficient monitoring method, it is possible to execute an ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ*online*”h]”hŒonline”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhŒ( verification of a system, enabling the ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ *reaction*”h]”hŒreaction”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhŒg for unexpected events, avoiding, for example, the propagation of a failure on safety-critical systems.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒRuntime Monitors and Reactors”h]”hŒRuntime Monitors and Reactors”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjAh²hh³hÊh´KubhÌ)�”}”(hŒÉA monitor is the central part of the runtime verification of a system. The monitor stands in between the formal specification of the desired (or undesired) behavior, and the trace of the actual system.”h]”hŒÉA monitor is the central part of the runtime verification of a system. The monitor stands in between the formal specification of the desired (or undesired) behavior, and the trace of the actual system.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjAh²hubhÌ)�”}”(hXNIn Linux terms, the runtime verification monitors are encapsulated inside the *RV monitor* abstraction. A *RV monitor* includes a reference model of the system, a set of instances of the monitor (per-cpu monitor, per-task monitor, and so on), and the helper functions that glue the monitor to the system via trace, as depicted below::”h]”(hŒNIn Linux terms, the runtime verification monitors are encapsulated inside the ”…”�”}”(hj`h²hh³Nh´NubhÖ)�”}”(hŒ *RV monitor*”h]”hŒ RV monitor”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj`ubhŒ abstraction. A ”…”�”}”(hj`h²hh³Nh´NubhÖ)�”}”(hŒ *RV monitor*”h]”hŒ RV monitor”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj`ubhŒ× includes a reference model of the system, a set of instances of the monitor (per-cpu monitor, per-task monitor, and so on), and the helper functions that glue the monitor to the system via trace, as depicted below:”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjAh²hubhŒ literal_block”“”)�”}”(hX<Linux +---- RV Monitor ----------------------------------+ Formal Realm | | Realm +-------------------+ +----------------+ +-----------------+ | Linux kernel | | Monitor | | Reference | | Tracing | -> | Instance(s) | <- | Model | | (instrumentation) | | (verification) | | (specification) | +-------------------+ +----------------+ +-----------------+ | | | | V | | +----------+ | | | Reaction | | | +--+--+--+-+ | | | | | | | | | +-> trace output ? | +------------------------|--|----------------------+ | +----> panic ? +-------> ”h]”hX<Linux +---- RV Monitor ----------------------------------+ Formal Realm | | Realm +-------------------+ +----------------+ +-----------------+ | Linux kernel | | Monitor | | Reference | | Tracing | -> | Instance(s) | <- | Model | | (instrumentation) | | (verification) | | (specification) | +-------------------+ +----------------+ +-----------------+ | | | | V | | +----------+ | | | Reaction | | | +--+--+--+-+ | | | | | | | | | +-> trace output ? | +------------------------|--|----------------------+ | +----> panic ? +-------> ”…”�”}”hj”sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j’h³hÊh´K$hjAh²hubhÌ)�”}”(hX*In addition to the verification and monitoring of the system, a monitor can react to an unexpected event. The forms of reaction can vary from logging the event occurrence to the enforcement of the correct behavior to the extreme action of taking a system down to avoid the propagation of a failure.”h]”hX*In addition to the verification and monitoring of the system, a monitor can react to an unexpected event. The forms of reaction can vary from logging the event occurrence to the enforcement of the correct behavior to the extreme action of taking a system down to avoid the propagation of a failure.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjAh²hubhÌ)�”}”(hX In Linux terms, a *reactor* is an reaction method available for *RV monitors*. By default, all monitors should provide a trace output of their actions, which is already a reaction. In addition, other reactions will be available so the user can enable them as needed.”h]”(hŒIn Linux terms, a ”…”�”}”(hj²h²hh³Nh´NubhÖ)�”}”(hŒ *reactor*”h]”hŒreactor”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj²ubhŒ% is an reaction method available for ”…”�”}”(hj²h²hh³Nh´NubhÖ)�”}”(hŒ *RV monitors*”h]”hŒ RV monitors”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj²ubhŒ½. By default, all monitors should provide a trace output of their actions, which is already a reaction. In addition, other reactions will be available so the user can enable them as needed.”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K;hjAh²hubhÌ)�”}”(hŒ]For further information about the principles of runtime verification and RV applied to Linux:”h]”hŒ]For further information about the principles of runtime verification and RV applied to Linux:”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hjAh²hubhŒ block_quote”“”)�”}”(hX°Bartocci, Ezio, et al. *Introduction to runtime verification.* In: Lectures on Runtime Verification. Springer, Cham, 2018. p. 1-33. Falcone, Ylies, et al. *A taxonomy for classifying runtime verification tools.* In: International Conference on Runtime Verification. Springer, Cham, 2018. p. 241-262. De Oliveira, Daniel Bristot. *Automata-based formal analysis and verification of the real-time Linux kernel.* Ph.D. Thesis, 2020. ”h]”(hÌ)�”}”(hŒƒBartocci, Ezio, et al. *Introduction to runtime verification.* In: Lectures on Runtime Verification. Springer, Cham, 2018. p. 1-33.”h]”(hŒBartocci, Ezio, et al. ”…”�”}”(hjøh²hh³Nh´NubhÖ)�”}”(hŒ'*Introduction to runtime verification.*”h]”hŒ%Introduction to runtime verification.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjøubhŒE In: Lectures on Runtime Verification. Springer, Cham, 2018. p. 1-33.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KChjôubhÌ)�”}”(hŒ§Falcone, Ylies, et al. *A taxonomy for classifying runtime verification tools.* In: International Conference on Runtime Verification. Springer, Cham, 2018. p. 241-262.”h]”(hŒFalcone, Ylies, et al. ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ8*A taxonomy for classifying runtime verification tools.*”h]”hŒ6A taxonomy for classifying runtime verification tools.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhŒX In: International Conference on Runtime Verification. Springer, Cham, 2018. p. 241-262.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KFhjôubhÌ)�”}”(hŒ�De Oliveira, Daniel Bristot. *Automata-based formal analysis and verification of the real-time Linux kernel.* Ph.D. Thesis, 2020.”h]”(hŒDe Oliveira, Daniel Bristot. ”…”�”}”(hj8h²hh³Nh´NubhÖ)�”}”(hŒP*Automata-based formal analysis and verification of the real-time Linux kernel.*”h]”hŒNAutomata-based formal analysis and verification of the real-time Linux kernel.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj8ubhŒ Ph.D. Thesis, 2020.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KJhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòh³hÊh´KChjAh²hubeh}”(h]”Œruntime-monitors-and-reactors”ah ]”h"]”Œruntime monitors and reactors”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒOnline RV monitors”h]”hŒOnline RV monitors”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjfh²hh³hÊh´KNubhÌ)�”}”(hXMonitors can be classified as *offline* and *online* monitors. *Offline* monitor process the traces generated by a system after the events, generally by reading the trace execution from a permanent storage system. *Online* monitors process the trace during the execution of the system. Online monitors are said to be *synchronous* if the processing of an event is attached to the system execution, blocking the system during the event monitoring. On the other hand, an *asynchronous* monitor has its execution detached from the system. Each type of monitor has a set of advantages. For example, *offline* monitors can be executed on different machines but require operations to save the log to a file. In contrast, *synchronous online* method can react at the exact moment a violation occurs.”h]”(hŒMonitors can be classified as ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ *offline*”h]”hŒoffline”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒ and ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ*online*”h]”hŒonline”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒ monitors. ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ *Offline*”h]”hŒOffline”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒŽ monitor process the traces generated by a system after the events, generally by reading the trace execution from a permanent storage system. ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ*Online*”h]”hŒOnline”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒ_ monitors process the trace during the execution of the system. Online monitors are said to be ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ *synchronous*”h]”hŒ synchronous”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒ‹ if the processing of an event is attached to the system execution, blocking the system during the event monitoring. On the other hand, an ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ*asynchronous*”h]”hŒ asynchronous”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒp monitor has its execution detached from the system. Each type of monitor has a set of advantages. For example, ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ *offline*”h]”hŒoffline”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒo monitors can be executed on different machines but require operations to save the log to a file. In contrast, ”…”�”}”(hjwh²hh³Nh´NubhÖ)�”}”(hŒ*synchronous online*”h]”hŒsynchronous online”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjwubhŒ9 method can react at the exact moment a violation occurs.”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhjfh²hubhÌ)�”}”(hXºAnother important aspect regarding monitors is the overhead associated with the event analysis. If the system generates events at a frequency higher than the monitor's ability to process them in the same system, only the *offline* methods are viable. On the other hand, if the tracing of the events incurs on higher overhead than the simple handling of an event by a monitor, then a *synchronous online* monitors will incur on lower overhead.”h]”(hŒßAnother important aspect regarding monitors is the overhead associated with the event analysis. If the system generates events at a frequency higher than the monitor’s ability to process them in the same system, only the ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ *offline*”h]”hŒoffline”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhŒ™ methods are viable. On the other hand, if the tracing of the events incurs on higher overhead than the simple handling of an event by a monitor, then a ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ*synchronous online*”h]”hŒsynchronous online”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubhŒ' monitors will incur on lower overhead.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K\hjfh²hubhÌ)�”}”(hŒ"Indeed, the research presented in:”h]”hŒ"Indeed, the research presented in:”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kchjfh²hubjó)�”}”(hŒíDe Oliveira, Daniel Bristot; Cucinotta, Tommaso; De Oliveira, Romulo Silva. *Efficient formal verification for the Linux kernel.* In: International Conference on Software Engineering and Formal Methods. Springer, Cham, 2019. p. 315-332. ”h]”hÌ)�”}”(hŒìDe Oliveira, Daniel Bristot; Cucinotta, Tommaso; De Oliveira, Romulo Silva. *Efficient formal verification for the Linux kernel.* In: International Conference on Software Engineering and Formal Methods. Springer, Cham, 2019. p. 315-332.”h]”(hŒLDe Oliveira, Daniel Bristot; Cucinotta, Tommaso; De Oliveira, Romulo Silva. ”…”�”}”(hjYh²hh³Nh´NubhÖ)�”}”(hŒ5*Efficient formal verification for the Linux kernel.*”h]”hŒ3Efficient formal verification for the Linux kernel.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjYubhŒk In: International Conference on Software Engineering and Formal Methods. Springer, Cham, 2019. p. 315-332.”…”�”}”(hjYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KehjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jòh³hÊh´Kehjfh²hubhÌ)�”}”(hX4Shows that for Deterministic Automata models, the synchronous processing of events in-kernel causes lower overhead than saving the same events to the trace buffer, not even considering collecting the trace for user-space analysis. This motivated the development of an in-kernel interface for online monitors.”h]”hX4Shows that for Deterministic Automata models, the synchronous processing of events in-kernel causes lower overhead than saving the same events to the trace buffer, not even considering collecting the trace for user-space analysis. This motivated the development of an in-kernel interface for online monitors.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhjfh²hubhÌ)�”}”(hŒTFor further information about modeling of Linux kernel behavior using automata, see:”h]”hŒTFor further information about modeling of Linux kernel behavior using automata, see:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kohjfh²hubjó)�”}”(hŒºDe Oliveira, Daniel B.; De Oliveira, Romulo S.; Cucinotta, Tommaso. *A thread synchronization model for the PREEMPT_RT Linux kernel.* Journal of Systems Architecture, 2020, 107: 101729. ”h]”hÌ)�”}”(hŒ¹De Oliveira, Daniel B.; De Oliveira, Romulo S.; Cucinotta, Tommaso. *A thread synchronization model for the PREEMPT_RT Linux kernel.* Journal of Systems Architecture, 2020, 107: 101729.”h]”(hŒDDe Oliveira, Daniel B.; De Oliveira, Romulo S.; Cucinotta, Tommaso. ”…”�”}”(hjŸh²hh³Nh´NubhÖ)�”}”(hŒA*A thread synchronization model for the PREEMPT_RT Linux kernel.*”h]”hŒ?A thread synchronization model for the PREEMPT_RT Linux kernel.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjŸubhŒ4 Journal of Systems Architecture, 2020, 107: 101729.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòh³hÊh´Krhjfh²hubeh}”(h]”Œonline-rv-monitors”ah ]”h"]”Œonline rv monitors”ah$]”h&]”uh1hµhh·h²hh³hÊh´KNubh¶)�”}”(hhh]”(h»)�”}”(hŒThe user interface”h]”hŒThe user interface”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÍh²hh³hÊh´KwubhÌ)�”}”(hŒnThe user interface resembles the tracing interface (on purpose). It is currently at "/sys/kernel/tracing/rv/".”h]”hŒrThe user interface resembles the tracing interface (on purpose). It is currently at “/sys/kernel/tracing/rv/â€�.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KyhjÍh²hubhÌ)�”}”(hŒ4The following files/folders are currently available:”h]”hŒ4The following files/folders are currently available:”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjÍh²hubhÌ)�”}”(hŒ**available_monitors**”h]”hŒstrong”“”)�”}”(hjüh]”hŒavailable_monitors”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hjÍh²hubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒ2Reading list the available monitors, one per line ”h]”hÌ)�”}”(hŒ1Reading list the available monitors, one per line”h]”hŒ1Reading list the available monitors, one per line”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K€hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³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´K‚hjÍh²hubj“)�”}”(hŒ!# cat available_monitors wip wwnr”h]”hŒ!# cat available_monitors wip wwnr”…”�”}”hjHsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j’h³hÊh´K„hjÍh²hubhÌ)�”}”(hŒ**available_reactors**”h]”jÿ)�”}”(hjXh]”hŒavailable_reactors”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KˆhjÍh²hubj)�”}”(hhh]”j)�”}”(hŒ4Reading shows the available reactors, one per line. ”h]”hÌ)�”}”(hŒ3Reading shows the available reactors, one per line.”h]”hŒ3Reading shows the available reactors, one per line.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŠhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmh²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³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´KŒhjÍh²hubj“)�”}”(hŒ)# cat available_reactors nop panic printk”h]”hŒ)# cat available_reactors nop panic printk”…”�”}”hjœsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j’h³hÊh´KŽhjÍh²hubhÌ)�”}”(hŒ**enabled_monitors**:”h]”(jÿ)�”}”(hŒ**enabled_monitors**”h]”hŒenabled_monitors”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjªubhŒ:”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hjÍh²hubj)�”}”(hhh]”(j)�”}”(hŒ0Reading lists the enabled monitors, one per line”h]”hÌ)�”}”(hjËh]”hŒ0Reading lists the enabled monitors, one per line”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K•hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆh²hh³hÊh´Nubj)�”}”(hŒ%Writing to it enables a given monitor”h]”hÌ)�”}”(hjâh]”hŒ%Writing to it enables a given monitor”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K–hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆh²hh³hÊh´Nubj)�”}”(hŒ4Writing a monitor name with a '!' prefix disables it”h]”hÌ)�”}”(hjùh]”hŒ8Writing a monitor name with a ‘!’ prefix disables it”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K—hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆh²hh³hÊh´Nubj)�”}”(hŒ2Truncating the file disables all enabled monitors ”h]”hÌ)�”}”(hŒ1Truncating the file disables all enabled monitors”h]”hŒ1Truncating the file disables all enabled monitors”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K˜hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³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´KšhjÍh²hubj“)�”}”(hŒå# cat enabled_monitors # echo wip > enabled_monitors # echo wwnr >> enabled_monitors # cat enabled_monitors wip wwnr # echo '!wip' >> enabled_monitors # cat enabled_monitors wwnr # echo > enabled_monitors # cat enabled_monitors #”h]”hŒå# cat enabled_monitors # echo wip > enabled_monitors # echo wwnr >> enabled_monitors # cat enabled_monitors wip wwnr # echo '!wip' >> enabled_monitors # cat enabled_monitors wwnr # echo > enabled_monitors # cat enabled_monitors #”…”�”}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j’h³hÊh´KœhjÍh²hubhÌ)�”}”(hŒFNote that it is possible to enable more than one monitor concurrently.”h]”hŒFNote that it is possible to enable more than one monitor concurrently.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K©hjÍh²hubhÌ)�”}”(hŒ**monitoring_on**”h]”jÿ)�”}”(hjXh]”hŒ monitoring_on”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K«hjÍh²hubhÌ)�”}”(hŒqThis is an on/off general switcher for monitoring. It resembles the "tracing_on" switcher in the trace interface.”h]”hŒuThis is an on/off general switcher for monitoring. It resembles the “tracing_onâ€� switcher in the trace interface.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K­hjÍh²hubj)�”}”(hhh]”(j)�”}”(hŒ Writing "0" stops the monitoring”h]”hÌ)�”}”(hj€h]”hŒ$Writing “0â€� stops the monitoring”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K°hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{h²hh³hÊh´Nubj)�”}”(hŒ$Writing "1" continues the monitoring”h]”hÌ)�”}”(hj—h]”hŒ(Writing “1â€� continues the monitoring”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K±hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{h²hh³hÊh´Nubj)�”}”(hŒ5Reading returns the current status of the monitoring ”h]”hÌ)�”}”(hŒ4Reading returns the current status of the monitoring”h]”hŒ4Reading returns the current status of the monitoring”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³hÊh´K°hjÍh²hubhÌ)�”}”(hŒNote that it does not disable enabled monitors but stop the per-entity monitors monitoring the events received from the system.”h]”hŒNote that it does not disable enabled monitors but stop the per-entity monitors monitoring the events received from the system.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K´hjÍh²hubhÌ)�”}”(hŒ**reacting_on**”h]”jÿ)�”}”(hjÚh]”hŒ reacting_on”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K·hjÍh²hubj)�”}”(hhh]”(j)�”}”(hŒ,Writing "0" prevents reactions for happening”h]”hÌ)�”}”(hjôh]”hŒ0Writing “0â€� prevents reactions for happening”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¹hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïh²hh³hÊh´Nubj)�”}”(hŒWriting "1" enable reactions”h]”hÌ)�”}”(hj h]”hŒ Writing “1â€� enable reactions”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kºhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïh²hh³hÊh´Nubj)�”}”(hŒ3Reading returns the current status of the reaction ”h]”hÌ)�”}”(hŒ2Reading returns the current status of the reaction”h]”hŒ2Reading returns the current status of the reaction”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K»hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³hÊh´K¹hjÍh²hubhÌ)�”}”(hŒ **monitors/**”h]”jÿ)�”}”(hj@h]”hŒ monitors/”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K½hjÍh²hubhÌ)�”}”(hŒ·Each monitor will have its own directory inside "monitors/". There the monitor-specific files will be presented. The "monitors/" directory resembles the "events" directory on tracefs.”h]”hŒÃEach monitor will have its own directory inside “monitors/â€�. There the monitor-specific files will be presented. The “monitors/â€� directory resembles the “eventsâ€� directory on tracefs.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjÍh²hubhÌ)�”}”(hŒ For example::”h]”hŒ For example:”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÃhjÍh²hubj“)�”}”(hŒl# cd monitors/wip/ # ls desc enable # cat desc wakeup in preemptive per-cpu testing monitor. # cat enable 0”h]”hŒl# cd monitors/wip/ # ls desc enable # cat desc wakeup in preemptive per-cpu testing monitor. # cat enable 0”…”�”}”hjqsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j’h³hÊh´KÅhjÍh²hubhÌ)�”}”(hŒ**monitors/MONITOR/desc**”h]”jÿ)�”}”(hj�h]”hŒmonitors/MONITOR/desc”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÍhjÍh²hubj)�”}”(hhh]”j)�”}”(hŒ5Reading shows a description of the monitor *MONITOR* ”h]”hÌ)�”}”(hŒ4Reading shows a description of the monitor *MONITOR*”h]”(hŒ+Reading shows a description of the monitor ”…”�”}”(hj�h²hh³Nh´NubhÖ)�”}”(hŒ *MONITOR*”h]”hŒMONITOR”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³hÊh´KÏhjÍh²hubhÌ)�”}”(hŒ**monitors/MONITOR/enable**”h]”jÿ)�”}”(hjÇh]”hŒmonitors/MONITOR/enable”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhjÍh²hubj)�”}”(hhh]”(j)�”}”(hŒ"Writing "0" disables the *MONITOR*”h]”hÌ)�”}”(hjáh]”(hŒWriting “0â€� disables the ”…”�”}”(hjãh²hh³Nh´NubhÖ)�”}”(hŒ *MONITOR*”h]”hŒMONITOR”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÓhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜh²hh³hÊh´Nubj)�”}”(hŒ!Writing "1" enables the *MONITOR*”h]”hÌ)�”}”(hjh]”(hŒWriting “1â€� enables the ”…”�”}”(hjh²hh³Nh´NubhÖ)�”}”(hŒ *MONITOR*”h]”hŒMONITOR”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÔhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜh²hh³hÊh´Nubj)�”}”(hŒ3Reading return the current status of the *MONITOR* ”h]”hÌ)�”}”(hŒ2Reading return the current status of the *MONITOR*”h]”(hŒ)Reading return the current status of the ”…”�”}”(hj-h²hh³Nh´NubhÖ)�”}”(hŒ *MONITOR*”h]”hŒMONITOR”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÕhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³hÊh´KÓhjÍh²hubhÌ)�”}”(hŒ**monitors/MONITOR/reactors**”h]”jÿ)�”}”(hjWh]”hŒmonitors/MONITOR/reactors”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jþhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K×hjÍh²hubj)�”}”(hhh]”(j)�”}”(hŒ‰List available reactors, with the select reaction for the given *MONITOR* inside "[]". The default one is the nop (no operation) reactor.”h]”hÌ)�”}”(hŒ‰List available reactors, with the select reaction for the given *MONITOR* inside "[]". The default one is the nop (no operation) reactor.”h]”(hŒ@List available reactors, with the select reaction for the given ”…”�”}”(hjsh²hh³Nh´NubhÖ)�”}”(hŒ *MONITOR*”h]”hŒMONITOR”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhjsubhŒD inside “[]â€�. The default one is the nop (no operation) reactor.”…”�”}”(hjsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÙhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlh²hh³hÊh´Nubj)�”}”(hŒ?Writing the name of a reactor enables it to the given MONITOR. ”h]”hÌ)�”}”(hŒ>Writing the name of a reactor enables it to the given MONITOR.”h]”hŒ>Writing the name of a reactor enables it to the given MONITOR.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÛhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1jh³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´KÝhjÍh²hubj“)�”}”(hŒ‚# cat monitors/wip/reactors [nop] panic printk # echo panic > monitors/wip/reactors # cat monitors/wip/reactors nop [panic] printk”h]”hŒ‚# cat monitors/wip/reactors [nop] panic printk # echo panic > monitors/wip/reactors # cat monitors/wip/reactors nop [panic] printk”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j’h³hÊh´KßhjÍh²hubeh}”(h]”Œthe-user-interface”ah ]”h"]”Œthe user interface”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kwubeh}”(h]”Œruntime-verification”ah ]”h"]”Œruntime verification”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”jŒ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”}”(jàjÝjcj`jÊjÇjØjÕuŒ nametypes”}”(jà‰jc‰jʉj؉uh}”(jÝh·j`jAjÇjfjÕjÍ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.