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. 
 |