This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
realtime:documentation:howto:tools:cyclictest:start [2018/08/21 12:09] ebugden [Test Design] Update link |
realtime:documentation:howto:tools:cyclictest:start [2025/01/19 17:42] (current) costa.shul remove link to empty result-examples |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Cyclictest ====== | ====== Cyclictest ====== | ||
- | Cyclictest accurately and repeatedly measures the difference between a thread's intended wake-up time and the time at which it actually wakes up in order to provide statistics about the system's latencies. It can measure latencies in real-time systems caused by the hardware, the firmware, and the operating system. | + | Cyclictest accurately and repeatedly measures the difference between a thread's intended wake-up time and the time at which it actually wakes up from [[https://man7.org/linux/man-pages/man2/clock_nanosleep.2.html|clock_nanosleep]] in order to provide statistics about the system's latencies. It can measure latencies in real-time systems caused by the hardware, the firmware, and the operating system. |
The original test was written by Thomas Gleixner (tglx), but several people have subsequently contributed modifications. Cyclictest is currently maintained by Clark Williams and John Kacur and is part of the test suite [[realtime:documentation:howto:tools:rt-tests|rt-tests]]. | The original test was written by Thomas Gleixner (tglx), but several people have subsequently contributed modifications. Cyclictest is currently maintained by Clark Williams and John Kacur and is part of the test suite [[realtime:documentation:howto:tools:rt-tests|rt-tests]]. | ||
Line 33: | Line 33: | ||
</code> | </code> | ||
- | The options above are not relevant for every situation on every system. The Cyclictest [[realtime:documentation:howto:tools:cyclictest:test-design|Test Design]] page goes into more detail about how to choose the right options for measuring a specific latency on a given system. Additionally, ''cyclictest -h'' provides a quick description of the different program options and more detailed explanations can be found by running ''man ./src/cyclictest/cyclictest.8'' from the root of the [[realtime:documentation:howto:tools:rt-tests|rt-tests]] files. | + | The options above are not relevant for every situation on every system. The Cyclictest [[realtime:documentation:howto:tools:cyclictest:test-design#option-selection|Test Design]] page goes into more detail about how to choose the right options for measuring a specific latency on a given system. Additionally, ''cyclictest -h'' provides a quick description of the different program options and more detailed explanations can be found by running ''man ./src/cyclictest/cyclictest.8'' from the root of the [[realtime:documentation:howto:tools:rt-tests|rt-tests]] files. |
Running Cyclictest without any options is not recommended as it will not necessarily measure anything useful. Without parameters, Cyclictest creates one thread with an intended wake-up period of 1 ms. | Running Cyclictest without any options is not recommended as it will not necessarily measure anything useful. Without parameters, Cyclictest creates one thread with an intended wake-up period of 1 ms. | ||
Line 50: | Line 50: | ||
The table below contains a description of the abbreviated labels in the results: | The table below contains a description of the abbreviated labels in the results: | ||
- | <WRAP center 400px> | + | <WRAP center> |
- | ^Abbreviation ^ Label ^ Description | | + | ^ abr. ^ Label ^ Description ^ |
- | |T | Thread | Thread index and thread ID | | + | | T | Thread | Thread index and thread ID | |
- | |P | Priority | RT thread priority | | + | | P | Priority | RT thread priority | |
- | |I | Interval | Intended wake up period for the latency measuring threads (in us) | | + | | I | Interval | Intended wake up period for the latency measuring threads (in us) | |
- | |C | Count | Number of times the latency was measured i.e. iteration count | | + | | C | Count | Number of times the latency was measured i.e. iteration count | |
- | |Min | Minimum | Minimum latency that was measured (in us) | | + | | Min | Minimum | Minimum latency that was measured (in us) | |
- | |Act | Actual | Latency measured during the latest completed iteration (in us) | | + | | Act | Actual | Latency measured during the latest completed iteration (in us) | |
- | |Max | Maximum | Maximum latency that was measured (in us) | | + | | Max | Maximum | Maximum latency that was measured (in us) | |
</WRAP> | </WRAP> | ||
Line 78: | Line 78: | ||
It can also be interesting to compare with results from other systems that were running loads, using various Cyclictest parameters, and running different real-time and non real-time kernels. These results give a general idea of the order of magnitude that the latencies should be. They also show the effect that different test conditions and parameters can have on the Cyclictest results. | It can also be interesting to compare with results from other systems that were running loads, using various Cyclictest parameters, and running different real-time and non real-time kernels. These results give a general idea of the order of magnitude that the latencies should be. They also show the effect that different test conditions and parameters can have on the Cyclictest results. | ||
- | |||
- | <WRAP rightalign>[[realtime:documentation:howto:tools:cyclictest:result-examples|Read detailed examples of results]]</WRAP> | ||
===== Test Design ===== | ===== Test Design ===== | ||
Line 89: | Line 87: | ||
===== Limitations ===== | ===== Limitations ===== | ||
- | The latencies measured by Cyclictest may be slightly optimistic depending on the final application that will execute on the system. This is because Cyclictest measuring threads essentially have the shortest possible wake-up time that an RT userspace task can have. So, if the application tasks have a slower wake-up time they will experience a longer latency than a Cyclictest measuring thread in an identical situation. | + | The latencies measured by Cyclictest may be slightly optimistic depending on the final application that will execute on the system. This is because [[realtime:documentation:howto:tools:cyclictest:options:nanosleep|nanosleep]] is used by the Cyclictest measuring threads, so they essentially have the shortest possible wake-up time that an RT userspace task can have. When using nanosleep, the Cyclictest thread timer expiry path is executed directly in hard interrupt context with no additional indirection. So, if an application task's wake-up is not completed in hard interrupt context (e.g. threaded interrupt context), the application task will experience a longer wake-up latency than a Cyclictest measuring thread in an identical situation due to the additional level of indirection. In a case like this, the Cyclictest thread's latency measurement will be optimistic even if the latency starts at the exact time that the Cyclictest thread is intended to execute and the thread is affected by the full duration of the latency. |
- | In a case like this, the Cyclictest thread's measurement will be optimistic even if the latency starts at the exact time that the Cyclictest thread is intended to execute and the thread is affected by the full duration of the latency. | + | |
<WRAP rightalign>[[realtime:documentation:howto:tools:cyclictest:limitations|Read more about Cyclictest limitations]]</WRAP> | <WRAP rightalign>[[realtime:documentation:howto:tools:cyclictest:limitations|Read more about Cyclictest limitations]]</WRAP> | ||
Line 97: | Line 94: | ||
* [[realtime:documentation:howto:tools:cyclictest:faq|Cyclictest FAQ]] | * [[realtime:documentation:howto:tools:cyclictest:faq|Cyclictest FAQ]] | ||
+ | * [[https://man.archlinux.org/man/cyclictest.8.en|cyclictest manpage]] | ||
+ | * [[https://man.archlinux.org/man/get_cyclictest_snapshot.8.en|get_cyclictest_snapshot]] – get a snapshot of running instances of cyclictest | ||
+ |