115 lines
4.4 KiB
Plaintext
115 lines
4.4 KiB
Plaintext
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.
|