嵌入式系统实时性能测试方法与流程

文档序号:12464114阅读:904来源:国知局
嵌入式系统实时性能测试方法与流程

本发明涉及一种嵌入式系统实时性能测试方法。



背景技术:

嵌入式系统的实时性作为嵌入式系统设计、改进和选型的重要依据,准确、高效地进行嵌入式实时性能的测试具有非常重要的意义。目前,针对嵌入式系统实时性能的测试主要方法是基准程序测试法。

文献“嵌入式实时操作系统性能测试方法,指挥控制与仿真,2008,Vol.30(2),p98-101”提出了一种基于用户态模式的嵌入式实时操作系统功能和性能测试方法。该方法首先针对嵌入式操作系统的实时性建立了相应的测试指标体系,包括系统调用时间、任务切换时间、中断相应和延迟时间和数据包吞吐率。针对每一个指标的基准测试程序,在执行前通过在用户态模式下调用系统时间函数获取开始时间值,然后运行性能基准测试程序,在程序完成之后,通过系统时间函数获取结束时间值,根据测试结束与开始的时间差值。但由于得到的系统时间值仅能达到毫秒级精度,存在测试精度差的问题。且此方法缺乏对于多核平台和分区系统的支持,不能实现对多核平台和分区系统实时性的有效测试,存在指标体系不全的问题,不能实现全面的嵌入式系统实时性能评价。

综上所述,现有的嵌入式系统实时性能测试方法多存在测试指标体系不全和测试精度差的问题。



技术实现要素:

为了克服现有嵌入式系统实时性能测试方法精度差的不足,本发明提供一种嵌入式系统实时性能测试方法。该方法将实时性的基础指标、多核指标和分区指标纳入实时性能测试之中,解决了现有测试方法指标体系不全的问题,能够全面评价嵌入式系统的实时性能;通过直接硬件访问机制实现了微秒级的时间获取,并针对指标已有的性能测试算法中存在的问题进行改进。由于采用嵌入式系统实时性能指标体系架构,能够获得更加全面的嵌入式系统实时性能数据,包括嵌入式系统的多核性能和分区性能,为现有的嵌入式系统提供性能改进方向,促进嵌入式系统结构设计和软硬件选型,能够极大程度上提高嵌入式系统的可用性。在性能指标测试阶段,通过使用硬件时间获取方法,并针对嵌入式实时性能相关算法上进行改进,减少了算法的计算复杂度,使实时性测试时间精度达到10-6级别,提高了测试结果的精度。

本发明解决其技术问题所采用的技术方案:一种嵌入式系统实时性能测试方法,其特点是包括以下步骤:

步骤一、构建基础指标模块,包括任务切换时间、任务抢占时间、中断响应时间、中断现场恢复时间、线程创建时间和死锁解除时间。

1)任务切换时间是系统切换两个独立的有效的任务的平均时间,这两个任务不能处于阻塞或睡眠状态,并且有相同的优先级。在开始测试任务切换之前,消除与任务切换时间无关的系统活动,将任务设为高优先级。计算测试代码中的额外开销T0,包括循环控制和信号量操作。在主任务中创建任务A和任务B,任务A和任务B的优先级相等且低于主任务的优先级,记录时间点T1,置主任务的优先级低于任务A和任务B,使主任务挂起,任务A和任务B进入就绪队列。在循环代码的控制下,任务A和任务B不断地获取信号量、释放信号量,进行任务切换,当设定的迭代次数N到了之后,任务A和任务B删除自己回到主任务中,记录时间点T2。得到任务的切换时间Δt为

2)任务抢占时间是高优先级任务抢夺正在运行的低优先级任务对系统的控制权所花的平均时间,发生在高优先级任务响应外部事件从空闲状态转入就绪态的时刻。首先在主任务M中创建两个任务,任务A和任务B,优先级的关系是任务A>任务B,任务A和任务B均低于主任务的优先级。记录时间点T1,置主任务的优先级低于任务A和任务B,测试开始。因为任务A的优先级较高,所以为会先运行,每次测试迭代,让任务A延迟一个时间滴答,任务延迟会挂起任务A,系统控制权切换到任务B。这个任务在每次测试迭代只需要进行空循环。当一个时间滴答的时间延迟到,任务A被唤醒并进入就绪队列,此时由于任务A的优先级高于任务B,任务A抢占系统的控制权,任务B被挂起。当设定的测试次数迭代完成后,回到主任务,记录时间点T2。然后计算循环操作产生的额外时间消耗T0,设测试迭代次数为N,最后计算得出任务抢占时间Δt为

3)中断响应时间是指从中断发生到开始执行特定中断服务程序的第一条指令之间的时间。首先在主任务中装载中断服务程序ISR,创建任务A。任务A在设定的测试次数内不停的记录时间点T1,触发中断。当中断发生,任务A被挂起,系统转向执行中断服务程序ISR。由于ISR是事先设置好的,进入ISR的第一步就是记录时间点T2,退出ISR后,系统继续调度任务A运行,测试持续进行直到迭代次数完成。中断响应时间Δt为Δt=T2-T1

4)中断现场恢复时间是指系统从中断上下文离开进入任务继续运行的时间;首先在主任务中装载特定的中断服务程序ISR,创建测试任务集Task1至TaskN,创建中断触发任务Trigger。任务集中的任务优先级相同,任务集中的任务就是请求同步对象,当请求成功后就记录时间点T2,无限循环。任务Trigger的优先级低于任务集,任务Trigger的工作就是不断触发指定的向量号,这一向量号已经在主任务中与指定的ISR绑定了。中断被触发后,会进入中断服务程序ISR。ISR的功能就是释放任务集请求的同步对象,记录时间点T1。中断发生之前,任务集中的N个任务因为请求同步对象而被挂起,中断响应后执行ISR,ISR释放同步对象并退出,这时任务集中会有一个任务i被调度执行。中断线程恢复时间Δt即为Δt=T2-T1

5)死锁解除时间是指在当一个高优先级任务抢占一个低优先级任务对资源控制的时间;首先禁止时间片轮转调度,避免时间片轮转调度影响测试。创建互斥信号量和优先级分别为高、中、低的任务A、任务B、任务C。主任务降低自身优先级开始测试。优先级较高的任务A和任务B进入后先挂起自己,系统调度任务C运行。任务C运行后先进入临界区,然后唤醒任务A,由于任务A的优先级高于任务C,会抢占任务C运行。其进入临界区前记录时间点T1,由于临界资源被任务C占有,所以任务A只能挂起并等待临界资源被释放。任务C继续被调度执行,激活任务B,由于任务B的优先级也高于任务C,所以任务B抢占任务C开始运行。而任务B开始运行后进入无限循环,若无外力协助,任务A将永远分配不到必需的资源而无法继续运行无限等待临界资源,这就产生了死锁。此时,操作系统会采用合理的方法来解除死锁。当任务A成功进入临界区时,记录时间T2。死锁解除时间Δt即为Δt=T2-T1

6)线程创建时间是指操作系统用于创建一个线程所需要花费的时间开销,其中包括对一个线程运行所需全部资源的分配操作;首先在系统中启动主线程函数,设置线程创建数为0,并记录当前时间为T1,调用VxWorks的线程创建函数pthread_create创建N个线程,线程创建完成之后记录当前时间为T2,最终计算得到线程创建时间Δt为

步骤二、构建多核指标模块,包括核间通信时间和线程迁移时间。

1)核间通信时间是指位于不同CPU核上的不同任务之间为了数据间的共享与同步所进行的数据发送操作所需的时间;首先在主线程中创建线程1,然后将线程1绑定到与主线程不同的CPU核上,然后主线程启动线程1,并记录时间值为T1,然后线程1先主线程发送信号,主线程接收到信号后,给线程发回。测试过程中使用信号量控制型号通信。经过N次测试以后记录当前时间为T2,最终计算得到核间通信时间Δt为

2)线程迁移时间是指操作系统将某个CPU核中正在运行的任务中断后,迁移到另一个CPU核中继续运行所花费的时间开销,其中包括线程上下文的保存与恢复操作。首先在一个CPU核上运行主线程,并开始计时,记录时间为T1,调用VxWorks的关键函数pthread_setaffinity_np,设定线程亲和性,进而实现线程的迁移。循环进行N次操作,最终计算得到线程迁移的时间Δt为

步骤三、构建分区指标模块,包括分区切换时间和队列端口通信延迟时间。

1)分区切换时间是指在嵌入式分区操作系统中上一个分区窗口执行结束到下一个分区窗口启动完成所花费的时间;首先,假设系统包含n个分区(P1,P2,...,Pn),一个主调度框架为每一个分区分配一个时间槽,且n个时间槽的长度(t1,t2,...,tn)之和与主调度框架时间T相等,即没有空闲时间槽。那么理论上系统执行N次主调度框架轮转需要的时间长度为N*T。因为存在分区切换时间,系统执行N次主调度框架轮转需要的实际时间大于N*T,假设为T',T'的数值能够通过记录N次主调度框架轮转的总时间得出。每一次分区切换消耗的时间用Δt1,Δt2,...,Δtn表示,超出N*T的这段时间位移Δt实际就是T'时间内分区切换所占用的总时间假设执行N次主调度框架轮转共发生分区切换的次数为M,则求得一次分区切换时间的平均值ΔTa=ΔT/M。其中M与ΔT的计算方法分别为M=N*n-1,ΔT=T'-N*T。

根据分区切换时间、分区切换次数和分区切换平均时间得出单次分区切换的平均时间计算方法为

2)队列端口通信延迟是指嵌入式分区操作系统中一个消息段从源队列端口发出到目标队列端口接收所消耗的时间。通过队列端口发送的消息需要系统将其从发送缓冲区中取出,并经过通道发送到接收缓冲区中,这一过程是产生通信延迟的主要原因。为实现任意两个分区间都能够通过队列端口进行消息收发,需要在每个分区中都运行一个测试程序。对于每个源端口分别调用队列端口消息发送服务发送一次消息,对于每个目标端口分别新建一个进程循环调用获取端口状态服务进行监听。程序将每次发送消息时的时刻Ts作为消息内容,这样当目标端口监听进程检测到目标端口有数据到达时,记录此时的时刻Tr,就能够计算出这一次消息发送的通信延迟Δt=Tr-Ts。由于分区操作系统中端口都是两两配对使用,为了排除某一个端口有多个消息在缓冲区内等待的情况对测试结果的影响,采取如下措施:

(a)任意两个分区若有多个端口配对,相同方向的传输路径只保留一对。假设分区1中有源端口A和源端口B,分别对应分区2中目标端口C和目标端口D,那么只对源端口A/目标端口C这一组合进行测试。

(b)每一次只允许一个分区发送消息,其它分区接收消息。

本发明的有益效果是:该方法将实时性的基础指标、多核指标和分区指标纳入实时性能测试之中,解决了现有测试方法指标体系不全的问题,能够全面评价嵌入式系统的实时性能;通过直接硬件访问机制实现了微秒级的时间获取,并针对指标已有的性能测试算法中存在的问题进行改进。由于采用嵌入式系统实时性能指标体系架构,能够获得更加全面的嵌入式系统实时性能数据,包括嵌入式系统的多核性能和分区性能,为现有的嵌入式系统提供性能改进方向,促进嵌入式系统结构设计和软硬件选型,能够极大程度上提高嵌入式系统的可用性。在性能指标测试阶段,通过使用硬件时间获取方法,并针对嵌入式实时性能相关算法上进行改进,减少了算法的计算复杂度,使实时性测试时间精度达到10-6级别,提高了测试结果的精度。

下面结合附图和具体实施方式对本发明作详细说明。

附图说明

图1是本发明方法的实时性指标体系结构图,用于说明本发明的实时性能指标体系结构。

图2是本发明方法依赖的运行环境图,用于说明如何使用本发明方法进行嵌入式实时性能测试。

具体实施方式

参照图1-2。本发明嵌入式系统实时性能测试方法具体步骤如下:

整个指标体系结构构建三个模块:

步骤一、构建基础指标模块:基础指标模块是指传统嵌入式系统所具有的实时性指标,包括任务切换时间、任务抢占时间、中断响应时间、中断现场恢复时间、线程创建时间和死锁解除时间6个指标。

1)任务切换时间是系统切换两个独立的有效的任务的平均时间,这两个任务不能处于阻塞或睡眠状态,并且有相同的优先级。在开始测试任务切换之前,需要消除与任务切换时间无关的系统活动,比如时间片轮转,为了将这种影响减至最小,应该将任务设为尽可能高的优先级。接着计算测试代码中的额外开销T0,主要包括循环控制和信号量操作。在主任务中创建任务A和B,这两个任务的优先级相等且低于主任务的优先级,记录时间点T1,置主任务的优先级低于任务A和B,这样使主任务挂起,任务A和B进入就绪队列。在循环代码的控制下,任务A和B不断地获取信号量、释放信号量,进行任务切换,当设定的迭代次数N到了之后,两个任务删除自己回到主任务中,记录时间点T2。最后可得任务的切换时间Δt为

2)任务抢占时间是高优先级任务抢夺正在运行的低优先级任务对系统的控制权所花的平均时间,发生在高优先级任务响应外部事件从空闲状态转入就绪态的时刻。首先在主任务M中创建两个任务,A和B,优先级的关系是A>B,但是都低于主任务的优先级。记录时间点T1,置主任务的优先级低于这两个任务,测试开始。因为任务A的优先级较高,所以为会先运行,每次测试迭代,让任务A延迟一个时间滴答,任务延迟会挂起任务A,系统控制权切换到任务B。这个任务在每次测试迭代只需要进行空循环。当一个时间滴答的时间延迟到,任务A被唤醒并进入就绪队列,此时由于任务A的优先级高于任务B,任务A抢占系统的控制权,任务B被挂起。当设定的测试次数迭代完成后,回到主任务,记录时间点T2。然后计算循环操作产生的额外时间消耗T0,设测试迭代次数为N,最后计算得出任务抢占时间Δt为

3)中断响应时间是指从中断发生到开始执行特定中断服务程序的第一条指令之间的时间。首先在主任务中装载特定中断服务程序ISR,创建任务A。任务A在设定的测试次数内不停的记录时间点T1,触发中断。当中断发生,任务A被挂起,系统转向执行中断服务程序ISR。由于ISR是事先设置好的,进入ISR的第一步就是记录时间点T2,退出ISR后,系统继续调度任务A运行,测试持续进行直到迭代次数完成。中断响应时间Δt为Δt=T2-T1

4)中断现场恢复时间是指系统从中断上下文离开进入任务继续运行的时间;首先在主任务中装载特定的中断服务程序ISR,创建测试任务集Task1至TaskN,创建中断触发任务Trigger。任务集中的任务优先级相同,这些任务就是请求同步对象,当请求成功后就记录时间点T2,无限循环。任务Trigger的优先级低于任务集,他的工作就是不断触发指定的向量号,这一向量号已经在主任务中与指定的ISR绑定了。中断被触发后,会进入特定的中断服务程序ISR。ISR的功能就是释放任务集请求的同步对象,记录时间点T1。中断发生之前,任务集中的N个任务因为请求同步对象而被挂起,中断响应后执行ISR,ISR释放同步对象并退出,这时任务集中会有一个任务i被调度执行。中断线程恢复时间Δt即为Δt=T2-T1

5)死锁解除时间是指在当一个高优先级任务抢占一个低优先级任务对资源控制的时间;首先禁止时间片轮转调度,避免时间片轮转调度影响测试。创建互斥信号量和优先级分别为高、中、低的任务A、B、C。主任务降低自身优先级开始测试。优先级较高的任务A和B进入后先挂起自己,系统调度任务C运行。任务C运行后先进入临界区,然后唤醒任务A,由于A的优先级高于C,会抢占C运行。其进入临界区前记录时间点T1,由于临界资源被C占有,所以任务A只能挂起并等待临界资源被释放。任务C继续被调度执行,激活任务B,由于B的优先级也高于C,所以任务B抢占C开始运行。而任务B开始运行后进入无限循环,若无外力协助,A将永远分配不到必需的资源而无法继续运行无限等待临界资源,这就产生了死锁。此时,操作系统会采用合理的方法来解除死锁。当任务A成功进入临界区时,记录时间T2。死锁解除时间Δt即为Δt=T2-T1

6)线程创建时间是指操作系统用于创建一个线程所需要花费的时间开销,其中包括对一个线程运行所需全部资源的分配等操作;首先在系统中启动主线程函数,并设置线程创建数为0,并记录当前时间为T1,调用VxWorks的线程创建函数pthread_create创建N个线程,线程创建完成之后记录当前时间为T2,最终计算得到线程创建时间Δt为

步骤二、构建多核指标模块:多核指标模块是指嵌入式多核系统所特有的实时性指标,包括核间通信时间和线程迁移时间2个指标。

1)核间通信时间是指位于不同CPU核上的不同任务之间为了数据间的共享与同步所进行的数据发送操作所需的时间;首先在主线程中创建线程1,然后将线程1绑定到与主线程不同的CPU核上,然后主线程启动线程1,并记录时间值为T1,然后线程1先主线程发送信号,主线程接收到信号后,给线程发回。测试过程中使用信号量控制型号通信,因为信号量相比管道,队列等通信方式更加稳定,相应得到的测试结果也更加稳定。经过N次测试以后记录当前时间为T2,最终计算得到核间通信时间Δt为

2)线程迁移时间是指操作系统将某个CPU核中正在运行的任务中断后,迁移到另一个CPU核中继续运行所花费的时间开销,其中包括线程上下文的保存与恢复等操作。首先在一个特定的CPU核上运行主线程,并开始计时,记录时间为T1,调用VxWorks的关键函数pthread_setaffinity_np,设定线程亲和性,进而实现线程的迁移。循环进行N次操作,最终计算得到线程迁移的时间Δt为

步骤三、构建分区指标模块:分区指标模块是指分区系统所特有的实时性指标,包括分区切换时间和队列端口通信延迟时间2个指标。

1)分区切换时间是指在嵌入式分区操作系统中上一个分区窗口执行结束到下一个分区窗口启动完成所花费的时间;首先,假设系统包含n个分区(P1,P2,...,Pn),一个主调度框架为每一个分区分配一个时间槽,且n个时间槽的长度(t1,t2,...,tn)之和与主调度框架时间T相等,也就是说没有空闲时间槽。那么理论上系统执行N次主调度框架轮转需要的时间长度为N*T。因为存在分区切换时间,系统执行N次主调度框架轮转需要的实际时间大于N*T,假设为T',T'的数值可以通过记录N次主调度框架轮转的总时间得出。每一次分区切换消耗的时间用Δt1,Δt2,...,Δtn表示,超出N*T的这段时间位移Δt实际就是T'时间内分区切换所占用的总时间假设执行N次主调度框架轮转共发生分区切换的次数为M,那么可以求得一次分区切换时间的平均值ΔTa=ΔT/M。其中M与ΔT的计算方法分别为M=N*n-1,ΔT=T'-N*T。

根据分区切换时间、分区切换次数、分区切换平均时间可以得出单次分区切换的平均时间计算方法为

2)队列端口通信延迟是指嵌入式分区操作系统中一个消息段从源队列端口发出到目标队列端口接收所消耗的时间。通过队列端口发送的消息需要系统将其从发送缓冲区中取出,并经过通道发送到接收缓冲区中,这一过程是产生通信延迟的主要原因。为实现任意两个分区间都可以通过队列端口进行消息收发,需要在每个分区中都运行一个测试程序。对于每个源端口分别调用队列端口消息发送服务发送一次消息,对于每个目标端口分别新建一个进程循环调用获取端口状态服务进行监听。程序将每次发送消息时的时刻Ts作为消息内容,这样当目标端口监听进程检测到目标端口有数据到达时,记录此时的时刻Tr,就可以计算出这一次消息发送的通信延迟Δt=Tr-Ts。由于分区操作系统中端口都是两两配对使用,为了排除某一个端口有多个消息在缓冲区内等待的情况对测试结果的影响,可以采取如下措施:

(a)任意两个分区若有多个端口配对,相同方向的传输路径只保留一对。例如,假设分区1中有源端口A和源端口B,分别对应分区2中目标端口C和目标端口D,那么只对源端口A/目标端口C这一组合进行测试。

(b)每一次只允许一个分区发送消息,其它分区接收消息。

参考图2,本发明构建的通用实时性指标的测试工具集最终会运行在嵌入式计算机及其兼容机上,其运行环境包括:硬件系统,测试工具集运行库和嵌入式实时操作系统VxWorks。VxWorks操作系统采用主机/目标机的交叉开发环境,测试控制软件为Tornado开发环境。整个运行过程如下:

第一步、通过配置文件进行实时性能指标评测程序的裁剪与构建,配置文件包括选取的性能指标模块和模块中的实时性能指标,配置文件以xml文件的形式存在;

第二步、嵌入式编译器通过xml解析器读取配置文件,根据配置文件的选项完成相应评测指标测试程序的编译、链接等工作,并生成可以在目标机上运行的可执行文件;

第三步、通过Tornado测试控制软件和代理服务器之间的通信机制把测试程序加载到指定的地址空间。

第四步、Tornado测试控制软件发出启动命令,控制目标机上的测试程序运行,获取相应性能指标的实时性数据;

第五步、实时性数据通过性能数据采集器进行包装,通过目标机上的代理服务器把数据回传到主机。

与目前存在的嵌入式系统实时性测试方法相比,本发明提供了更加完善的实时性指标体系,不仅可以进行传统基础指标的实时性测试,也具有测试多核平台下和分区系统实时性的能力,具有较大的适用范围。在进行指标体系实时性测试时,本方法通过使用新的测试算法,保证了测试数据的准确性。

总之,本发明方法在嵌入式系统实时性测试方面能够提供更加全面和精确的实时性测试。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1