| Cyclictest is a program to test the performance of high-resolution timers on Linux systems. |
| |
| Installation |
| |
| Get the latest source tarball, untar into a directory of your choice and run make in the source directory. |
| |
| You can run the resulting binary from there or install it. |
| |
| Run it |
| |
| Make sure to be root or use sudo to run cyclictest. |
| |
| Without parameters cyclictest creates one thread with a 1ms interval timer. |
| |
| cyclictest -h provides help text for the various options |
| -b USEC --breaktrace=USEC send break trace command when latency > USEC |
| -c CLOCK --clock=CLOCK select clock |
| |
| 0 = CLOCK_MONOTONIC (default) |
| 1 = CLOCK_REALTIME |
| |
| -d DIST --distance=DIST distance of thread intervals in us default=500 |
| -i INTV --interval=INTV base interval of thread in us default=1000 |
| -l LOOPS --loops=LOOPS number of loops: default=0(endless) |
| -n --nanosleep use clock_nanosleep |
| -p PRIO --prio=PRIO priority of highest prio thread |
| -q --quiet print only a summary on exit |
| -r --relative use relative timer instead of absolute |
| -s --system use sys_nanosleep and sys_setitimer |
| -t NUM --threads=NUM number of threads: default=1 |
| -v --verbose output values on stdout for statistics |
| |
| format: n:c:v n=tasknum c=count v=value in us |
| |
| The -b optionis a debugging option to control the latency tracer in the realtime |
| preemption patch. It is useful to track down unexpected large latencies on a system. |
| This option only works with: |
| |
| * CONFIG_PREEMPT_RT=y |
| * CONFIG_LATENCY_TIMING=y |
| * CONFIG_LATENCY_TRACE=y |
| |
| kernel configuration options enabled. The USEC parameter to the -b option defines |
| a maximum latency value, which is compared against the actual latencies of the test. |
| Once the measured latency is higher than the given maximum, the kernel tracer and |
| cyclictest is stopped. The trace can be read from /proc/latency_trace: |
| |
| mybox# cat /proc/latency_trace >trace.log |
| |
| Please be aware that the tracer adds significant overhead to the kernel, so the |
| latencies will be much higher than on a kernel with latency tracing disabled. |
| |
| Using -c CLOCK selects the clock, which is used |
| |
| * 0 selects CLOCK_MONOTONIC, which is the monotonic increasing system time. |
| This is the default selection |
| * 1 selects CLOCK_REALTIME, which is the time of day time. |
| |
| CLOCK_REALTIME can be set by settimeofday, while CLOCK_MONOTONIC can not be |
| modified by the user. |
| |
| This option has no influence when the -s option is given. |
| |
| -d DIST set the distance of thread intervals in microseconds (default is 500us) |
| |
| When cylictest is called with the -t option and more than one thread is created, then this distance value is added to the interval of the threads. |
| |
| Interval(thread N) = Interval(thread N-1) + DIST |
| |
| -i INTV set the base interval of the thread(s) in microseconds (default is 1000us) |
| |
| This sets the interval of the first thread. See also -d. |
| |
| -l LOOPS set the number of loops (default = 0(endless)) |
| |
| This option is useful for automated tests with a given number of test cycles. cyclictest is stopped once the number of timer intervals has been reached. |
| |
| -n use clock_nanosleep instead of posix interval timers |
| |
| Setting this option runs the tests with clock_nanosleep instead of posix interval timers. |
| |
| -p PRIO set the priority of the first thread |
| |
| The given priority is set to the first test thread. Each further thread gets a lower priority: |
| |
| Priority(Thread N) = Priority(Thread N-1) |
| |
| -q run the tests quiet and print only a summary on exit |
| |
| Useful for automated tests, where only the summary output needs to be captured |
| |
| -r use relative timers instead of absolute |
| |
| The default behaviour of the tests is to use absolute timers. This option is there for completeness and should not be used for reproducible tests. |
| |
| -s use sys_nanosleep and sys_setitimer instead of posix timers |
| |
| Note, that -s can only be used with one thread because itimers are per process and not per thread. -s in combination with -n uses the nanosleep syscall and is not restricted to one thread |
| |
| -t NUM set the number of test threads (default is 1) |
| |
| Create NUM test threads. See -d, -i and -p for further information. |
| |
| -v output values on stdout for statistics |
| |
| This option is used to gather statistical information about the latency distribution. The output is sent to stdout. The output format is |
| |
| n:c:v |
| |
| where n=task number c=count v=latency value in us |
| |
| Use this option in combination with -l |
| |
| The OSADL Realtime LiveCD project (http://www.osadl.org/projects-live-cd.0.html) provides a script to plot the latency distribution. |