当事件发生时,系统响应该事件的时间即为延时。
延时在不同的上下文有不同的含义,而cyclictest所测得的延时是中断延时加调度延时,如下图。中断延时(interrupt latency),即中断发生到进入中断处理程序ISR的延时。调度延时(scheduling latency),即当任务被唤醒到任务真正获得CPU使用权中间的延时。
cyclictest原理:
通过启动一个master的普通进程,然后master进程再启动指定数量指定优先级的实时进程,实时进程会设置一个timer周期性的唤醒自己(从timer溢出触发中断并进入ISR调用wake_up_process()唤醒实时进程,到进程真正能被运行,这中间的时间即我们需要测量的延时)。实时进程得到运行后会再次获取当前系统时间,减去睡眠时间时的时间以及睡眠的时间即可得到延时时间,并通过共享内存将该值传递给master进程进行统计,如此周而复始,最终由master进程将结果输出。
注意:当造成延时的事件发生在timer溢出之前,那么这样的延时将不会被捕捉到,所以我们需要足够久的运行cyclictest才能更大概率的抓取全面的延时数据。
运行cyclictest前,我们有几点需要注意的地方。首先是短时间的运行cyclictest得出的结果是无意义的,再就是测试系统上没有合适负载的情况下运行cyslictest所得到的延时统计也是无意义的。所以我们最好在待测系统上模拟出负载并运行cyclictest大于24小时统计出延时。
1,下载源码
git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git git checkout origin/stable/v1.0
2,交叉编译
修改Makefile中的编译器
CC = arm-linux-gnueabihf-gcc AR = arm-linux-gnueabihf-ar
执行make
如果报错: src/cyclictest/rt_numa.h:29:18: fatal error: numa.h: 没有那个文件或目录
1)安装apt-file 来找到依赖库
apt-get install apt-file apt-file update #更新源
2)寻找 numa.h
apt-file install numa.h
3) 安装相应的库
apt-get install libnuma-dev
3,运行cyclictest程序进行实时性测试:
cyclictest -t 5 -p 80 -n
4,cyclictest运行结果详解
T: 0 序号为0的线程 P: 0 线程优先级为0 C: 9397 计数器。线程的时间间隔每达到一次,计数器加1 I: 1000 时间间隔为1000微秒(us) Min: 最小延时(us) Act: 最近一次的延时(us) Avg:平均延时(us) Max: 最大延时(us)
参考链接:实时性测试:cyclictest详解 - 知乎



