实时系统的主要特点是必须保证处理结果的时间确定性,我们通常使用基准程序法对其进行性能指标评估。通过对实时系统的性能评估,就可以确认系统的时间确定性、可靠性、稳定性等指标。
衡量实时操作系统实时性能的重要指标有很多,本文将对运用最为广泛的指标之一,中断延迟时间,进行介绍。那么什么是中断延迟?如何测得实时操作系统的中断延迟呢?让我们一起来看看吧!
中断延迟(Interrupt Latency)是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。也就是计算机接收到中断信号到操作系统作出响应,并完成换到转入中断服务程序的时间。
由于外部事件的发生常常是以一个中断申请信号的形式来通知处理器,然后才运行中断服务程序中来处理该事件,所以中断延迟是影响系统实时性的一个重要因素。
为了进一步描述清楚中断延迟,我们把中断延迟的时间分为以下三种:
明白了什么是中断延迟,以及哪些因素会影响中断延迟,那么,怎样减少中断延迟呢?在OneOS系统中,经过开发前期分析与实测,我们发现通过对内核加锁粒度优化可以减少中断延迟。
大粒度的加锁位置为:
在任务栈切换流程中,OneOS采用了前置计算待调度任务算法,可以有效降低该流程的加锁粒度。
在时钟中断处理流程中,因为要判断有哪些睡眠任务和阻塞任务已超时,往往要处理多个在TICK队列上的任务,若采用一把大锁,势必导致加锁粒度过大、影响外部中断响应时间(嵌入式系统一般都是支持中断抢占的)。OneOS采用每处理完1个在TICK队列上的任务后开中断,之后再关中断的方式,可以降低加锁粒度。(不过这样做会导致任务调度系统复杂,必须要认真处理此微小时隙所带来的额外资源冲突问题噢~)
既然已经找到了减少中断延迟的方法,那我们来测试一下优化后的结果吧!
为了满足测试要求,首先系统选取一个定时器中断,并且设置定时器中断的优先级比其他所有中断优先级都高(这样就屏蔽掉等待中断打开时间)。
设置定时器的计数模式为递增模式,这样定时器产生中断时会重新装入0到定时器计数器中。在中断定时器中断服务函数中直接读取定时器计数值,通过定时器计数值除以定时器时钟得到中断延迟时间。
同时,为了避免关中断的时间内发生多次定时器中断,建议定时器中断的周期大于1ms。在多次产生定时器中断后我们记录下最大的中断延迟作为测试结果,最后我们还需要添加内核接口的调用。具体的流程下图所示。
根据以上测试方法,可以获得如下测试结果:
测试结果可以看出,OneOS的实时性得到了强有力的保证。
在第三方的测试中,基于同样的硬件平台,OneOS内核性能主要指标也均领先于竞品,实时性跑分大幅领先。未来,OneOS将继续努力,朝着成为业界领先的国产操作系统的目标不断前行!
|