μC/OS-II实时性能测试与分析

任务切换时间和中断响应时间是嵌入式实时操作系统实时性能的重要指标。本文对μC/OS-II的上述指标进行了测试,并给出了测试方法;分析了不同的情况对μC/OS-II实时性能的影响。实验结果表明:实时性能与CPU运行频率成正比,而CPU利用率对实时性能影响较小。

关键词 实时性能 μC/OS-II 任务切换时间 中断响应时间

  实时性是指系统能够在限定的时间内完成任务并对外部的异步事件作出及时响应。在大多数工业控制中,对实时性的要求非常高。

  实时操作系统是能够满足实时系统中实时任务的处理响应时间要求的操作系统。实时操作系统是事件驱动(eventdriven)的,能对来自外界的作用和信号在限定的时间范围内作出响应。它强调的是实时性、可靠性和灵活性,与实时应用软件相结合成为有机的整体,起着核心作用;由它来管理和协调各项工作,为应用软件提供良好的运行软件环境及开发环境。在多任务实时系统中,必然由实时操作系统来对实时任务进行管理。

  μC/OS-II是一种结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。

  现在许多工业控制系统用到了μC/OS-II,为了对其实时性有更深入具体的了解,本文对μC/OS-II的实时性进行了测试和分析,在实时系统设计中具有现实意义。

1  μC/OS-II实时性能测试指标

  衡量嵌入式实时操作系统的好坏一般主要参考以下主要性能指标参数: 任务切换时间、中断响应时间、任务响应时间、任务创建/删除时间、交替信号量时间、取得/释放信号量时间、交替消息队列传输时间等。本文仅对前2个最重要的指标参数进行测试分析。

1.1  任务切换时间

  任务切换时间(Task Content Switch Time)可以反映出RTOS执行任务的速度。

  μC/OS-II使用的是占先式内核,以保证系统的响应时间。每个任务都被赋予一定的优先级,最高优先级的任务一旦就绪,就能得到CPU的控制权。当一个运行着的任务通过信号量等机制使一个更高优先级的任务进入了就绪态,μC/OS-II会进行任务调度。这时当前任务的CPU使用权就要被剥夺,那个高优先级的任务会立刻得到CPU的控制权。

  每个任务都有自己的一套CPU寄存器和栈空间。任务的切换实际上就是CPU寄存器内容的切换。CPU内部寄存器越多,额外负荷就越重。

  在任务切换之前还需要在就绪表中查找出优先级最高的任务,它由任务调度函数OSSched()完成,是比较花费时间的。因为这个函数有固定长度的语句,所以它的执行时间是常数,与应用程序建立了多少个任务没有关系。

  所以任务切换时间取决于CPU有多少寄存器要出入栈,以及相关调度函数的执行速度。

1.2  中断响应时间

  中断响应时间(Interrupt Response Time)可以反映出RTOS对外界变化的反应速度,是指从中断发生起到执行中断处理程序的第一条指令所用的时间。它是衡量嵌入式实时操作系统实时性能的最主要、最具有代表性的性能指标。

  中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间

  中断延迟时间=关中断的最长时间+开始执行中断服务子程序(ISR)的第1条指令的时间

  关中断的最长时间取决于运行时不同的情况,其他参数在其系统中都有固定长度代码。中断响应是系统在最坏情况下响应中断的时间。

2  μC/OS-II实时性能测试原理

2.1  任务切换时间测试原理

  任务切换时间测试是利用系统内部的定时器计算任务切换时间。给定时器一个初始值a1,并建立两个任务;在任务1中开启定时器,利用消息邮箱切换到任务2,停止计时,记录定时器的值为a2。设系统时钟的计数频率为f,任务切换时间为Ttcst,则:

2.2  中断响应时间测试原理

  中断响应时间测试同样也是利用定时器计算中断响应时间。给定时器一个初始值a1,建立一个任务和定时器中断服务函数,在任务中开启定时器;当定时器自减为0时,进入中断服务子函数,在该子函数中关闭定时器,记录定时器的值为a2。注意: 定时器归0后自动变为初始值a1。设系统时钟的计数频率为f,中断响应时间为Tirt,则:

3  μC/OS-II实时性能测试步骤及结果

  本文测试使用的硬件平台为2410开发板,其中处理器采用Samsung公司的S3C2410X。S3C2410X是一款基于ARM920T内核的16/32位RISC嵌入式处理器,系统主频是202.8 MHz。

3.1  任务切换时间测试步骤及结果

  ①  系统时钟初始化。这里只用到定时器0。PCLK = FCLK /4 = 202.8 MHz /4 = 50.7 MHz,预分频值设置为0,除法器设为1/4,所以最小分频为0.08 μs,f = 12.5 MHz。计时器0初始值TCNTB0设为60 000,即a1=60 000。


图1  任务切换时间测试

  ②  如图1所示,建立两个任务:  Task_TCST_Start()和Task_TCST_End()。Task_TCST_End优先级高,运行后因等待邮箱的消息而挂起等待;然后Task_TCST_Start开始运行,向邮箱发送一则消息,同时定时器开始计时;之后该任务延时一段时间,进入挂起状态。Task_TCST_End收到邮箱消息,由等待状态进入就绪态,因为拥有就绪态队列中的最高优先级,所以获得CPU使用权。它进入运行态后立即停止计时,记为a2。
  ③  根据式(1)计算结果。
  ④  重复10次实验,取最大值为5.36 μs。

  需要注意2点: 其一,有意义的任务切换时间和中断响应时间是系统在最坏情况下发生的,所以不能取平均值,应该取最大值。其二,因为定时器是循环计数的,即从初始值自减到0,然后恢复初始值,继续自减。所以停止计时时,定时器可能经过了两次或多次循环。设计程序时要注意这一点。在本次实验中,循环最大间隔为60 000×0.08 μs = 4 800 μs,远大于一次任务切换时间或中断响应时间,所以定时器没有经过多次循环。

3.2  中断响应时间测试步骤及结果

  ①  同任务切换时间测试。


图2  中断响应时间测试

  ②  如图2所示,建立一个任务Task_IRT_Test和定时器0对应的中断服务子程序Timer0_IRT_Test。在任务中开启定时器0,当定时器0自减到0时,CPU响应该中断,CPU的中断向量跳转到定时器0的中断服务子程序Timer0_IRT_Test,由它保存CPU的全部寄存器;然后通知内核进入中断服务子程序,同时将堆栈指针保存到当前任务控制块OS_TCB中,之后用户的中断服务代码开始执行,在此停止定时器0,读出它的数值a2。
  ③  根据式(2)计算结果。
  ④  重复10次实验,取最大值0.24 μs。

4  CPU运行频率对μC/OS-II实时性的影响

  将CPU运行频率分别降低到152.00 MHz、101.25 MHz、67.50 MHz和33.75 MHz。

  测试方法不变,其测试结果分别如图3和图4所示。其中,任务切换时间的最大值分别为7.14 μs、10.74 μs、16.35 μs、32.71 μs;中断响应时间的最大值分别为0.32 μs、0.47 μs、0.95 μs、1.90 μs。


图3  CPU运行频率对任务切换时间的影响


图4  CPU运行频率对中断响应时间的影响

  测试结果分析: 总体上,随着CPU运行频率的增加,任务切换时间和中断响应时间都会减小,且呈非线性变化。特别是CPU运行频率较低时,其变化对实时性能影响较大;当CPU运行在较高的频率时,其变化幅度相对要小些。其非线性变化是与最小分频时间相关的。

  这说明CPU运行频率对实时性能起着非常重要的作用。因为它直接决定指令的处理周期,频率增加时,指令周期减小,系统用于同步等待的时间缩短,CPU执行每条语句的速度加快,保存和恢复CPU寄存器内容的速度也相应加快,因此实时性能变得更好。

5  CPU利用率对μC/OS-II实时性能的影响

  之前的测试都是在CPU负荷较小的情况下进行的,当CPU负荷增大(即利用率升高)时,实时性又会如何变化呢?这里建立了N个相同的任务,同时进行大批量的浮点运算。再建立一个任务,利用μC/OS-II自带函数OSStat()计算CPU利用率。对应不同的N值,有不同的CPU利用率,分别测试其实时性,得到的结果如图5所示。测试结果表明: 当CPU负荷增大时,任务切换时间会增加,中断响应时间也会略有增加。CPU利用率对系统的实时性能有一定的影响,但不是很大。


图5  CPU利用率对任务切换时间和中断响应时间的影响

6  结论

  本文在特定的硬件平台上测得μC/OS-II在不同情况下的任务切换时间和中断响应时间,能较好地反映出它的实时性能。测试方法在没有精密仪器的条件下即可完成,具有简单易行、硬件依赖性低、可信度高的特点,为开发人员将μC/OS-II用于嵌入式操作系统的实时应用提供了依据

转载于:https://www.cnblogs.com/yanglin1228/archive/2009/11/30/4812076.html

μC/OS-II实时性能测试与分析相关推荐

  1. 嵌入式实时操作系统μC/OS II(一)

    嵌入式实时操作系统μC/OS II 为什么要学习μC/OS-II ㈠.凡从事嵌入式系统开发工作的人,必须对嵌入式操作系统有足够的了解. ㈡.对于初学者,从μC/OS-II开始是个明智的选择. 1.μC ...

  2. 【实测】基于开源硬加速平台RIFFA架构的PCIe DMA性能测试及分析

    众所周知,GPU出现的最初目的仅仅是为了图像和视频并行处理的加速,但随着OpenCL 和 NVIDIA 的 CUDA 语言和工具链的出现使 GPU 更易于使用,目前已经成为一种通用的并行加速平台.然而 ...

  3. Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...

    转自:http://www.36dsj.com/archives/28590 Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分 ...

  4. UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

    UART0串口编程之在UC/OS-II中遭遇的危机 一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂.尤其是接收状态为被动状态时,只能靠串行口中断来 ...

  5. UA MATH571B 试验设计II 简单试验的分析方法

    UA MATH571B 试验设计II 简单试验的分析方法 Type I Error与Type II Error 单正态总体样本的假设检验 Z检验 t检验 双正态总体样本的假设检验 Z检验 t检验 同方 ...

  6. am335x linux内核烧写_实时 Linux 抖动分析 Step by step

    本文首次发表于 实时 Linux 抖动分析 Step by step 前段时间有同学问到: 大家有显卡方面实时性调优经验交流吗?我现在是 x86,不加显示任务实时性可以保持在 20us 内,如果加上显 ...

  7. 付力力: 基于 ImpalaS 构建实时用户行为分析引擎

    本文来自神策数据联合创始人&首席架构师付力力在 QCon 北京 2017 年全球软件开发者大会上的精彩分享,主题是"基于 ImpalaS 构建实时用户行为分析引擎". 付力 ...

  8. 软件测试性能测试结果,软件性能测试结果分析工具的研究与设计

    摘要: 随着软件行业的发展,针对软件系统尤其是Web应用系统的性能测试技术已经成为了软件测试领域的热点.虽然许多测试工具对性能测试提供了自动化支持,但性能测试的执行过程仍具有极高的专业性和复杂度,这一 ...

  9. java时序图工具_基于时序数据库,实现百亿级话单实时全景监控分析

    背景 随着流量业务的高速发展以及已经到来的5G时代,业务支撑系统的规模不断增大.服务不断增多,业务.应用和系统运行性能指标数据持续以指数级的速度增长,每日计费话单量已突破百亿.系统监控的实时性.准确性 ...

最新文章

  1. mysql 两列计数_MySQL在两列上计算唯一值,并为每列连接这些计数
  2. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页
  3. debian安装flash插件
  4. txtv28pw河南某中学_中学生骑行典型交通事故案例集 | 知危险会避险
  5. JAVA面试要点007---equals和==的区别小结
  6. 笨办法学python4_笨办法学Python(四十)
  7. 【更新汇总】FastReport系列更新|附下载
  8. Python字符串isalpha()
  9. 编译Notepad2语法高亮记事本源码心得
  10. 认识端口与计算机入侵防范
  11. 文献调研(一):基于集成学习和能耗模式分类的办公楼小时能耗预测
  12. 个人编程语言的学习感悟
  13. ReactNative--控件小记-更新中
  14. 陈情令和明月照我心都有超常镜头,为何前者被原谅,后者被唾弃
  15. 女子连WiFi结果收到巨额话费单:有些WiFi其实是收费的
  16. html文本怎么转化为数字html,将阿拉伯数字转换为html文件中的阿拉伯/波斯数字...
  17. 【C++】ios::sync_with_stdio(false) 与 cin.tie(nullptr) 加速 IO
  18. 原创 | GIS国产化除了软件还有什么
  19. 交通灯2-核心器件选型报告
  20. 基于OpenCV的火焰检测(三)——HSI颜色判据

热门文章

  1. 典型的DIV+CSS布局(左中右)
  2. Git生成ssh密钥
  3. c++11 多线程 顺序执行_前阿里P8架构师总结的一些关于Java多线程的编程经验丨干货...
  4. Quick Sort(三向切分的快速排序)(Java)
  5. 微信公众平台开发,API接入与推送事件(1)
  6. 2014广东高考分数线
  7. 两个栈实现队列+两个队列实现栈----java
  8. OSChina 周五乱弹 ——变态要从娃娃抓起
  9. 常见的mysql集群
  10. 梅西精彩过人绝技,太帅了!