编译RT-tests对Linux实时性测试

        当事件发生时,系统响应该事件的时间即为延时。
        延时在不同的上下文有不同的含义,而cyclictest所测得的延时是中断延时加调度延时,如下图。中断延时(interrupt latency),即中断发生到进入中断处理程序ISR的延时。调度延时(scheduling latency),即当任务被唤醒到任务真正获得CPU使用权中间的延时。  

编译RT-tests对Linux实时性测试_第1张图片

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)

编译RT-tests对Linux实时性测试_第2张图片

参考链接:实时性测试:cyclictest详解 - 知乎

你可能感兴趣的:(工具软件,linux,运维,服务器)