您的位置:  首页 > 技术杂谈 > 正文

系统实时性评估指标-中断延迟简介

2022-09-19 16:00 https://my.oschina.net/u/5443273/blog/5578799 中移物联OneOS 次阅读 条评论

实时系统的主要特点是必须保证处理结果的时间确定性,我们通常使用基准程序法对其进行性能指标评估。通过对实时系统的性能评估,就可以确认系统的时间确定性、可靠性、稳定性等指标。

衡量实时操作系统实时性能的重要指标有很多,本文将对运用最为广泛的指标之一,中断延迟时间,进行介绍。那么什么是中断延迟?如何测得实时操作系统的中断延迟呢?让我们一起来看看吧!

什么是中断延迟?

中断延迟(Interrupt Latency)是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。也就是计算机接收到中断信号到操作系统作出响应,并完成换到转入中断服务程序的时间。

由于外部事件的发生常常是以一个中断申请信号的形式来通知处理器,然后才运行中断服务程序中来处理该事件,所以中断延迟是影响系统实时性的一个重要因素。

为了进一步描述清楚中断延迟,我们把中断延迟的时间分为以下三种:

  1. 识别中断时间:外界硬件发生了中断后,CPU到中断处理器读取中断向量,并且查找中断向量表,找到对应的中断服务子程序(ISR)的首地址,然后跳转到对应的ISR去做相应处理。
  2. 等待中断打开时间:在允许中断嵌套的实时操作系统中,中断也是基于优先级的,允许高优先级中断抢断正在处理的低优先级中断。所以,如果当前正在处理更高优先级的中断,即使此时有低优先级的中断,也系统不会立刻响应,而是等到高优先级的中断处理完之后才会响应。即使在不支持中断嵌套的系统中(即中断是没有优先级的,中断是不允许被中断的),如果当前系统正在处理一个中断,而此时另一个中断到来了,系统也是不会立即响应的,而只是等处理完当前的中断之后,才会处理后来的中断。
  3. 关闭中断时间:当前中断来了,但由于之前某个程序访问共享区,而关闭中断了,导致当前中断得不到处理。而只有等待其访问完成共享区之后,再开中断。

怎样减少中断延迟?

明白了什么是中断延迟,以及哪些因素会影响中断延迟,那么,怎样减少中断延迟呢?在OneOS系统中,经过开发前期分析与实测,我们发现通过对内核加锁粒度优化可以减少中断延迟。

大粒度的加锁位置为:

  1. 任务栈切换流程;
  2. 时钟中断处理流程。

在任务栈切换流程中,OneOS采用了前置计算待调度任务算法,可以有效降低该流程的加锁粒度。

在时钟中断处理流程中,因为要判断有哪些睡眠任务和阻塞任务已超时,往往要处理多个在TICK队列上的任务,若采用一把大锁,势必导致加锁粒度过大、影响外部中断响应时间(嵌入式系统一般都是支持中断抢占的)。OneOS采用每处理完1个在TICK队列上的任务后开中断,之后再关中断的方式,可以降低加锁粒度。(不过这样做会导致任务调度系统复杂,必须要认真处理此微小时隙所带来的额外资源冲突问题噢~)

如何测试中断延迟?

既然已经找到了减少中断延迟的方法,那我们来测试一下优化后的结果吧!

为了满足测试要求,首先系统选取一个定时器中断,并且设置定时器中断的优先级比其他所有中断优先级都高(这样就屏蔽掉等待中断打开时间)。

设置定时器的计数模式为递增模式,这样定时器产生中断时会重新装入0到定时器计数器中。在中断定时器中断服务函数中直接读取定时器计数值,通过定时器计数值除以定时器时钟得到中断延迟时间。

同时,为了避免关中断的时间内发生多次定时器中断,建议定时器中断的周期大于1ms。在多次产生定时器中断后我们记录下最大的中断延迟作为测试结果,最后我们还需要添加内核接口的调用。具体的流程下图所示。

根据以上测试方法,可以获得如下测试结果:

测试结果可以看出,OneOS的实时性得到了强有力的保证。

在第三方的测试中,基于同样的硬件平台,OneOS内核性能主要指标均领先于竞品,实时性跑分大幅领先。未来,OneOS将继续努力,朝着成为业界领先的国产操作系统的目标不断前行!

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接