实时操作系统的实时性测试方法与流程

文档序号:32858242发布日期:2023-01-07 00:18阅读:703来源:国知局
实时操作系统的实时性测试方法与流程

1.本发明涉及操作系统性能测试技术领域,具体涉及实时操作系统的实时性测试方法。


背景技术:

2.随着实时操作系统(rtos)在工控、军事等领域的广泛应用。系统实时性是衡量一个实时操作系统的重要指标,也是用户系统设计、选型和改进的重要参考依据。它是指系统能够及时响应外部事件的请求,在规定的时间内完成对该时间的处理,并控制所有实时任务协调一致地运行。
3.目前现有的实时性测试手段,主要集中在linux系统生态中(如cyclictest等)。而对于rtos这类软件生态不太完善的系统来说,并没有现成的测试软件。cyclitest目前只能测试基于定时器的任务调度延时,而对于实时系统来说,我们更关心的是多种及时响应下的多项指标,如中断延时、信号量延时等等。除此之外,在实时性测试中还存在误差过大的情况。以示波器时间采集手段为例,其只能采集单次或者多次数据。以至于最后的算法计算中样本数据太少,导致误差较大。如果想要采集大量的设备,则需要外部设备的配合。


技术实现要素:

4.为解决已有技术存在的不足,本发明提供了一种实时操作系统的实时性测试方法,包括:步骤s1:针对实时系统,构建第三任务;由第三任务获取通过循环触发中断的第一任务所产生的中断响应时延及中断到任务切换时延,并获取通过创建用于切换的第二任务及第四任务所产生的任务间切换时延;步骤s2:第三任务循环采集时延数据,直至测试执行预定次数后,对所获取的各组时延数据进行方差计算,输出所测试的时延数据的最大值、最小值、平均值及方差,用于反应系统实时性能稳定程度。
5.其中,所述中断响应时延的获取方法包括:步骤s11:使用gpio引脚作为中断触发信号,同时设置另外一个gpio引脚作为中断输入;步骤s12:新建第一任务作为循环触发中断的任务,在第一任务中通过循环拉高io电平来产生脉冲信号,同时在io电平置高的上升沿标识时间戳t1;步骤s13:当另外一个gpio引脚收到上升沿电平以后,对应的cpu进入中断响应流程,最终进入中断处理函数interrupt handler,并在中断处理函数interrupt handler中将电平拉低,同时标识时间戳为t2;步骤s14:通过公式delay1=t2-t1得到中断响应时延。
6.其中,在interrupt handler中唤醒第三任务进行中断响应时延的数据采集和结果计算,第三任务等级优先于第一任务,待第三任务计算完成后第一任务再继续触发下一
次中断流程。
7.其中,中断到任务切换时延的获取方法包括:在interrupt handler中唤醒第三任务时标识时间戳为t3,第三任务真正开始运行时标识时间戳为t4,则delay2=t4
ꢀ‑
t3就是本次中断到任务切换时延。
8.其中,任务间切换时延包括因拿不到信号量而导致的任务间切换时延以及,因释放信号量导致的上下文切换时延,其中,因拿不到信号量而导致的任务间切换时延的获取方法包括:步骤s1a:关闭用于产生中断响应时延及中断到任务切换时延的第一任务;步骤s1b:创建第二任务及第四任务,优先级别如下:第三任务》第二任务》第四任务;步骤s1c:首先运行第二任务,在第二任务中执行信号量获取,此时标识时间戳为t5,第二任务因拿不到信号量而休眠;步骤s1d:系统转而调度执行第四任务,当第四任务真正开始运行时,标识时间戳为t6;步骤s1e:delay3=t6-t5为因拿不到信号量而导致的任务间切换时延。
9.其中,因释放信号量导致的上下文切换时延的获取方法包括:步骤s1f:第四任务唤醒第三任务进行因拿不到信号量而导致的任务间切换时延的测试数据的采集和计算;步骤s1g:第三任务执行完毕后第四任务继续执行,随后第四任务向第二任务释放信号量,此时标识时间戳为t7;步骤s1h:第二任务收到信号量后准备开始被调度运行,当第二任务真正开始运行时,标识时间戳为t8;步骤s1i:delay4=t8-t7为因释放信号量导致的上下文切换时延。
10.其中,还包括步骤s1j:第二任务唤醒第三任务,进行因释放信号量导致的上下文切换时延的测试数据的采集和计算。
11.其中,在中断响应时延、中断到任务切换时延以及任务间切换时延的获取中,所涉及到的所有的时间戳,均通过通用定时器作为高精度时间源来获取。
12.其中,所述通用定时器选自armv8通用定时器。
13.其中,第三任务共循环采集百万次时延数据以提高时延数据的精确度。
14.本发明提供的实时操作系统的实时性测试方法,构建了一套实时性评价指标,利用硬件架构自带的通用定时器作为实时性测试的高精度时钟源,配合算法分析模块的自动采集和计算,使得本测试系统不需要依赖于外部硬件设备。完善了实时性测试指标,指标的最终计算结果依赖于一百万次的数据样本,使得计算结果更加精确。
附图说明
15.图1:本发明所使用的armv8架构下的通用定时器结构图。
16.图2:本发明的中断响应时延及中断到任务切换时延的获取逻辑图。
17.图3:本发明的任务切换时延的获取逻辑图。
18.图4:本发明的算法分析模块的执行流程图。
具体实施方式
19.为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
20.本发明的目的是通过可操作的测试手段,得到一系列高精度的时延量化指标。并以此作为实时操作系统的实时性能的评价标准。
21.本发明首先构建一个完善的基础指标测试模块,它包含了任务响应的各种模型,这样可以覆盖到实际应用中多种场景下的任务响应情况。其次,为了满足时钟源的精度和简易的要求,我们采用cpu自带的通用定时器(generic timer)作为测试的高精度时钟源。这样在保证了精度的前提下,又避免引入外部设备。将从时钟源读取的时间戳插入到测试模块中作为时延的数据采集点。最后还需构建一个算法分析模块,该模块通过收集数据采集点数据作为样本,进行百万次的数据分析和计算,最终得出数据的分布、方差以及参考值等。最终得出各个指标的精确数据。
22.本发明的具体实施选用armv8架构作为硬件平台。rtos系统选用freertos实时操作系统作为实验对象。armv8平台通过烧录的uboot程序,引导freertos系统运行。本发明所构建的基础指标测试模块和算法分析模块均是基于freertos系统工作。
23.主要系统软件版本号为:freertos版本号:v10.0.1一、armv8通用定时器作为高精度时钟源如果想要保证实时性测试的精度,那么首先作为时钟源的基准精度应该符合要求。一般常用的方法主要是使用外部时钟源或者示波器作为实时性测试的时间基准。本发明通过实验验证选取了arm generic timer作为测试的高精度时钟源,如图1所示。arm generic timer的硬件block主要是soc上的system counter以及附着在各个processor上的timer组成。system counter由系统时钟system clock提供计数脉冲,并进行累加计数。system counter的counter value分发到各个timer。timer可以定义系统事件system events,当满足事件触发条件就会assert一个外部的输出信号(可以输出到gic,作为一个interrupt source)。由此可见timer的时间计数全部由硬件电路实现,不会受到freertos系统运行的影响。其精度由系统时钟和定时器配置决定,基本都在ns级以上。在实时性测试中,只需在需要记录时间戳的位置使用armv8 mrrc指令,直接读取该cpu的general timer的计数,再通过脉冲频率最终计算得出软件当前的时间。这样完成一次时间戳的记录过程。
24.二、构建基础指标测试模块这里的基础指标我们选用了中断响应时延、中断到任务切换时延、任务间切换时延三个数据。对于实时系统来说,最紧急的事件响应肯定是放在中断中来完成,所以中断响应时延是最小的,也是要求最严格的。其次是在中断中调用任务来完成事件响应,它比中断时延要大,但是重点是可以在这是进行任务调度,不会导致中断函数一直霸占cpu。这种机制类似于linux系统的中断底半部机制。最后任务间切换时延是衡量一个实时系统实时性的重要指标。这三个时延数据覆盖了我们最关心的不同应用场景下的时延情况。1、中断响应时延本发明使用armv8硬件平台的gpio引脚作为中断触发信号,同时设置另外一个gpio引脚作为中断输入。新建task a作为循环触发中断的任务。在task a中通过循环拉高
io电平来产生脉冲信号。同时在io电平置高的上升沿标识时间戳t1,如图2所示。当另外一个gpio引脚收到上升沿电平以后,对应的cpu则会进入中断响应流程,最终进入interrupt handler,并在interrupt handler中将电平拉低,同时标识时间戳为t2。则delay1=t2-t1,就是本指标的中断响应时延。在interrupt handler中唤醒图4中的算法分析模块task c。task c进行数据采集和结果计算。本指标测试中,任务等级为:task c 》 task a。之所以要保证任务的优先级顺序是因为,我们必须保证中断中唤醒的task c不会被task a所抢占,只有当算法分析模块task c的计算完成以后,才会继续task a触发下一次中断的流程。
25.2、中断到任务切换时延在指标1中,在interrupt handler中唤醒task c时标识时间戳为t3,task c真正开始运行时标识时间戳为t4。则delay2=t4
ꢀ‑
t3就是本指标中断到任务切换时延。
26.3、任务间切换时延该指标构建时需要关闭指标1、2中的task a,如图3所示。目的是排除task a触发中断对本指标带来的影响。首先创建task b、task d两个任务,其中优先级task c》task b 》 task d,则task b首先运行(task c在不执行算法任务时处于休眠状态)。在task b中执行信号量获取(xsemaphoretake),此时标识时间戳为t5,这时task b因拿不到信号量而休眠。信号量一般用来进行资源管理和任务同步。这里使用二进制信号量,二进制信号量可以被认为是长度为1的队列。信号量使用者不必关心存储在队列中的数据,只需关心队列是否为空。在程序中信号量被定义为初始值为空的全局变量,也就是说新创建的信号量处于无效状态。这时task b首次运行去获取信号量(xsemaphoretake)时,因信号量为空所以任务休眠。)因为系统中处于就绪状态的只有task d,那么系统转而调度执行task d。当task d真正开始运行时,标识时间戳为t6。那么delay3=t6-t5就是因拿不到信号量而导致的任务间切换时延。这时task d唤醒算法分析模块task c,task c进行数据采集计算和记录。因为task c的优先级最高,所以只有task c的计算任务完成以后task d 才会继续运行。随后task d向task b释放信号量(semaphoregive),此时标识时间戳为t7。task b收到信号量后准备开始被调度运行。当task b真正开始运行时,标识时间戳为t8。则delay4=t8-t7,就是释放信号量导致的上下文切换时延。这时task b唤醒task c,task c进行数据采集计算和记录。
27.上文中提到信号量是一个队列。程序通过xsemaphoretake去获取信号量,如果队列为空则任务变为休眠状态。程序通过semaphoregive去释放一个信号量,实际上就是一次入队操作。执行semaphoregive并不会使程序进入休眠态。在task d中并没有进行获取信号量的操作xsemaphoretake,所以task d不会休眠。
28.也就是说程序执行semaphoregive以后,信号量队列就不会为空。这时如果另外一个任务去执行xsemaphoretake获取信号量时,任务将会退出休眠而继续执行。
29.三、构建算法分析模块算法分析模块task c,如图4所示。运行于最高优先级,且开始运行便处于休眠状态。直到有有任务切换的时延指标计算请求,则进入运行态。模块进入运行态以后首先判断基础指标测试模块所触发的计算请求的类型(如计算中断响应时延、中断到任务切换时延、任务间切换时延的请求)。然后根据具体的请求类型去读取相应测试模块所标识的时间戳,
使用calcdiff_ns函数计算出纳秒单位的时延。将该时延与之前的计算时延进行比较,更新累计计算的最大值和最小值。然后将本次时延数据保存在内存中,用于后续的方差计算。当测试执行一百万次以后,算法分析模块认为样本数量已经满足要求,则退出数据采集循环,进行一百万次数据的方差计算。并最终输出测试数据的最大值、最小值、平均值以及方差。计算方差反应了系统实时性能的稳定程度。
30.本发明的有益效果如下:1、构建了一套适用于rtos系统的实时性评价指标,包括中断响应时延、中断到任务切换时延、任务间切换时延。完善了实时性测试指标。
31.2、采用高精度的时钟系统作为测试的时钟源,保证测试时钟的精度。
32.3、采集一百万次以上的数据,作为实时性算法的数据样本,保证实时性算法的精度。
33.4、本发明基于armv8架构,由于armv8的通用定时器的计数只依赖于系统硬件时钟,不会受到系统软件、指标测试模块、算法分析模块运行的影响,这就保证了测试系统的稳定性和有效性。由于本发明只需要armv8系统本身,利用硬件架构自带的通用定时器作为实时性测试的高精度时钟源。配合算法分析模块的自动采集和计算,使得本测试系统不需要依赖于外部硬件设备。克服了传统实时性测试方法中依赖于示波器或者数据采集计算服务器的问题,大大简化了测试流程和测试成本。
34.5、本发明构建了四个任务,将指标测试和算法分析模块分开,使得两个模块在同一系统中不会互相影响。
35.虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1