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. 
