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

文档序号:12464114阅读:来源:国知局

技术特征:

1.一种嵌入式系统实时性能测试方法,其特征在于包括以下步骤:

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

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

<mrow> <mi>&Delta;</mi> <mi>t</mi> <mo>=</mo> <mfrac> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>T</mi> <mn>1</mn> </msub> <mo>)</mo> <mo>-</mo> <msub> <mi>T</mi> <mi>o</mi> </msub> </mrow> <mrow> <mn>2</mn> <mo>*</mo> <mi>N</mi> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

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

<mrow> <mi>&Delta;</mi> <mi>t</mi> <mo>=</mo> <mfrac> <mrow> <mo>(</mo> <msub> <mi>T</mi> <mn>2</mn> </msub> <mo>-</mo> <msub> <mi>T</mi> <mn>1</mn> </msub> <mo>)</mo> <mo>-</mo> <msub> <mi>T</mi> <mi>o</mi> </msub> </mrow> <mi>N</mi> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

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;

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

<mrow> <msub> <mi>&Delta;T</mi> <mi>a</mi> </msub> <mo>=</mo> <mfrac> <mrow> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>-</mo> <mi>N</mi> <mo>*</mo> <mi>T</mi> </mrow> <mrow> <mi>N</mi> <mo>*</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

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

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

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

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