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