Cyclictest是 rt-tests 下的一个测试工具,一般主要用来测试使用内核的延迟,从而判断内核的实时性。
1、cyclictest 安装
Debian / Ubuntu 系统下可以直接使用apt-get install rt-tests 来安装cyclictest。
2、cyclictest 的使用
在rt-tests的路径下,我们可以使用 ./cyclictest 来运行cyclictest, 而在别的目录下,我们就需要指定 cyclictest的路径来使用,比如说 /home/long/rt-tests/cyclictest ,或者你也可以直接将 rt-tests的路径下的 cyclictest 拷贝到 /bin/ 下,以后就可以直接使用 cyclictest 而不需要指定路径了
3、cyclictest 的参数介绍
关于cyclictest 的各个参数具体含义建议大家还是用时间具体看看 cyclictest --help 的信息
-p PRIO --prio=PRIO 最高优先级线程的优先级 使用时方法为: -p 90 / --prio=90 -m --mlockall 锁定当前和将来的内存分配
-c CLOCK --clock=CLOCK 选择时钟 cyclictest -c 1 0 = CLOCK_MONOTONIC (默认) 1 = CLOCK_REALTIME
-i INTV --interval=INTV 基本线程间隔,默认为1000(单位为us),下面介绍原理的时候会提到
-l LOOPS --loops=LOOPS 循环的个数,默认为0(无穷个),与 -i 间隔数结合可大致算出整个测试的时间, 比如 -i 1000 -l 1000000 ,总的循环时间为1000*1000000=1000000000 us =1000s ,所以大致为16分钟多。
-n --nanosleep 使用 clock_nanosleep
-h HISTNUM --histogram=US 在执行完后在标准输出设备上画出延迟的直方图(很多线程 有相同的权限) US为最大的跟踪时间限制,这个在下面介绍实例时可以用到,结合gnuplot 可以画出我们测试的结果图。
-q --quiet 使用-q 参数运行时不打印信息,只在退出时打印概要内容,结合-h HISTNUM参数会在退出时 打印HISTNUM 行统计信息以及一个总的概要信息。
-f --ftrace ftrace函数跟踪(通常与-b 配套使用,其实通常使用 -b 即可,不使用 -f )
-b USEC --breaktrace=USEC 当延时大于USEC指定的值时,发送停止跟踪。USEC,单位为谬秒(us)。
推荐参数以及结果实例:
sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
使用 -p 90给cyclictest 赋优先级90,使用-m参数锁定内存分配,使用 -c 0指定使用默认的MONOTONIC 时钟, -i 200 指定一个循环为200us,结合 -l 1000000为总共1000000个循环,此外-n 为使用nanosleep 而不是简单的sleep,-q为在运行时不打印即时信息,-h 100 为总共统计100个信息在最后的结果中。
cyclictest用于测试定时器的精度,假定定时器时间间隔为 interval,定时器启动前记录下当前时间t1,定时器到时后记录下当前时间t2,则测出的时延为 t2 - (t1 + interval)。
4、cyclictest输出结果含义
T: 0 序号为0的线程
P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1 I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)