SylixOS周期定时抖动分析

1.概述

自动化与控制行业中有很多场景需要循环周期控制,而运动控制领域对循环周期控制的时间确定性要求尤为严格,周期抖动的时间确定性和周期控制的极限范围直接影响运动控制产品的质量和性能。
SylixOS作为一款嵌入式实时操作系统,针对不同循环周期和不同程度的时间确定性要求均有对应的周期控制方式,其中就有为周期性任务解决多任务调度冲突并且时间确定性良好的速率单调调度(Rate Monotonic Scheduling RMS),还有传统的以硬件平台定时器作为中断源,以中断服务程序作为实时任务运行载体的周期控制方式。

2.周期定时方式

本文档主要针对SylixOS实时周期任务进行时间确定性的测试,为贴近真实场景,除了实时周期任务,还有多个普通线程以及不间断的串口中断、网络中断等干扰项,以此保证本文档测试数据以及抖动分析有实际参考价值。

2.1 SMP模式的RMS方式

2.1.1 测试模型

测试平台有两个CPU,在应用程序中将实时任务绑定到CPU1上,其他任务则在CPU0上运行,其中SylixOS中断的绑核不提供应用层的接口,因此我们编写了一个.ko文件用于绑定中断(包括串口中断、网络中断、定时器中断等)到CPU0上,测试时加载此.ko模块即可,具体测试模型如图 2-1所示。

图 2-1  SMP模式的RMS方式测试模型

2.1.2 抖动分析

RMS实现说明:基于操作系统tick的软件定时,循环周期高于tick的部分以tick来实现,循环周期低于tick的部分以CPU忙等待处理实现,以此保证时间延时精度。
    SylixOS在高精度时间的CPU忙等待处理中会使用自旋锁,在这一过程中,操作系统不停地获取CPU的时间计数值,每次获取值的过程需要自旋锁加锁、解锁的操作,多核竞争下共享资源使用自旋锁进行互斥访问会对RMS有影响,存在一个极限情况,CPU0在CPU1上的实时任务延时完成之前抢先占有自旋锁,自旋锁被占有的时间会导致SMP模式的RMS最大抖动极限值。

2.1.3 优点

  • SylixOS提供了RMS应用层接口,用户使用方便;
  • RMS有助于解决多个实时任务调度冲突的问题,RMS基于任务的周期指定优先级,周期越短优先级越高。

2.1.4 缺点

  • SMP模式下的自旋锁机制会影响实时任务的抖动;
  • 实时任务周期低于时钟tick周期时会独占CPU运行。

2.2 SMP模式的ISR方式

2.2.1 测试模型

以硬件平台定时器作为中断源,以中断服务程序作为实时任务运行载体,这种SMP模式的ISR方式,将实时线程转化为中断任务,可有效提高任务的响应速度和任务循环周期的时间确定性,具体测试模型如图 2-2所示。

图 2-2  SMP模式的ISR方式测试模型

2.2.2 抖动分析

SMP模式的ISR周期控制方式,SylixOS使用双核平台的私有定时器产生定时中断到中断处理程序开始执行存在一定时间间隔,不可避免。这段时间间隔就是中断响应时间,稳定的中断响应时间可以保证ISR方式的稳定循环周期。存在一个极限情况,前后两次的定时中断分别以最小的中断响应时间和最大的中断响应时间让中断处理程序开始执行,就会导致ISR周期控制方式的最大抖动极限值。SylixOS在双核平台的中断响应时间集中在2-3μs,因此ISR周期控制方式的最大抖动极限值为±1μs。

2.2.3 优点

周期控制方式中时间确定性最好的一种方式。

2.2.4 缺点

因为任务在中断服务程序中执行,要求任务代码短小精悍且不允许有耗时操作,需要根据具体情况决定是否采用此方法,不具备通用性。

2.3 AMP模式的RMS方式

2.3.1 测试模型

SylixOS支持AMP模式,在双核平台的两个CPU上分别运行SylixOS,测试模型与SMP模式的RMS方式类似,具体的测试模型如图 2-3所示。

图 2-3  AMP模式的RMS方式测试模型

2.3.2 抖动分析

AMP模式的RMS周期控制方式相对SMP模式的RMS周期控制方式避免了多核竞争下共享资源使用自旋锁互斥访问的影响,最大抖动主要是和前后两次实时任务运行之前的任务上下文切换时间有关,存在一个极限情况,前后两次任务上下文切换分别以最小切换时间和最大切换时间来完成任务调度,会造成AMP模式的RMS方式的最大抖动极限值。

2.3.3 优点

由于每个CPU单独运行一个操作系统,相比SMP模式下的RMS方式,避免了多核竞争下共享资源使用自旋锁互斥访问的影响,提高了时间确定性。

2.3.4 缺点

AMP模式的RMS方式可能会出现RMS任务独占CPU的情况,SylixOS在双核平台的时钟周期为100μs,当任务延时时间低于100μs(时钟周期)时就会出现任务独占CPU的情况。

3.总结

AMP模式的ISR周期控制方式和SMP模式的ISR控制方式结果类似,不单独列出。
    SylixOS有多种循环周期控制方式可供选择,在对较小循环周期的控制场景下,SylixOS可以以针对性的控制方式保证实时任务的时间确定性,本文档测试场景模拟了一些干扰任务和中断任务,用户可根据自身实际场景选择合适的周期控制方式。

时间: 2024-10-10 13:53:31

SylixOS周期定时抖动分析的相关文章

MySQL存储写入性能严重抖动分析

案例描述: 通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差: 两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常. 也就是说,在对系统.数据库监控中,出现了性能波谷,存储写入性能严重抖动,为什么? 一.原理过程 由上原理图,进行过程解析: 1.事务提交,修改buffer_pool中的数据形成脏页,并且同时生成redo日志,将日志写入磁盘redo log中: 2.事务提交成功: 假设,有三组redo log文件,

SylixOS 之epoll异常分析

1. SylixOS epoll介绍 SylixOS为了兼容Linux的epoll,创建了epoll的兼容子系统,并支持了epoll的部分功能.SylixOS epoll兼容子系统是由select子系统模拟出来的,所以效率没有select高. 2. epoll异常分析 2.1epoll异常场景 在使用线程A创建AF_UNIX匿名套接字发送数据:线程B把套接字加入epoll监听,且设置属性为一次有效:线程C等待epoll事件产生,并读取套接字中的数据.如程序清单 2-1所示.           

Android时钟应用的定时框架分析

Android系统闹钟定时功能框架,总体来说就是用数据库存储定时数据,有一个状态管理器来统一管理这些定时状态的触发和更新.在Andriod系统中实现定时功能,最终还是要用到系统提供的AlarmManager,只是当一个定时完成后怎么继续处理,或者中间怎么更新定时的时间或者状态,像闹钟这种应用程序,每天重复定时,或者一周选择其中的几天,闹钟响了延迟5分钟再次响铃,这时候就需要想一种好的办法来让管理这些数据和状态,下面就分析一下Android系统闹钟的实现. 1.基本结构 Alarm 代表一条定时数

Fragment生命周期中方法分析

Fragment是相当常用的控件,下面我以本人对其生命周期的方法的理解进行分析. 也是本人对知识点的一个巩固及梳理,有理解不对的地方,欢迎指正. 首先附一张android官网为我们提供的生命周期图,以便分析! onAttach(): attach翻译成中文是依附,贴上.即当Fragment第一次被依附到Activity中的时候调用. onCreate(): 这个方法相信大家都不陌生,当Fragment第一次被创建并初始化. onCreateView(): Fragment必写的一个方法,返回的V

基于GPRS模块G510开发自动校时大功率周期定时控制器

duang!duang!duang!嚯!嚯!嚯!经过漫长的熬夜,感谢上帝给我机会让我每天可以看到黎明的曙光,并成功的把小作完成.朋友总是提醒我 你这样熬下去迟早猝死.好怕怕,所以每天夜幕降临的时候,我特么都在担心,明天会不会有日出.我每天下班回来都暗自发誓,今天一定要早点睡,然而每次都没兑现过,比对女孩子说的honey都假.废话少说,我是正经人,说正经事.   相信有些朋友看过我之前发的一个帖子:基于esp8266 SOC手动远程同步10kW大功率4路控制器 http://club.gizwit

周期/定时运行+进程守护工具,服务器维护利器

大家好,很久没写博客了,最近在部署网站的时候,需要将写成console运算模块一并部署到服务器上. 然而Windows自带的任务计划程序是满足不了了,之前的公司有人开发过GerneralServiceHost,也就是个托管服务的程序,可惜没源码,那么自己写一个! 特点: 指定一个可执行文件作为任务,可以管理这个任务做增删改 指定任务的运行方式,可以周期运行,也可以一次运行 有进程守护功能(挂掉直接重新运行),还有不间断运行模式(挂掉或者正常结束后都重新运行). 运行状态和运行统计,日志查看和导出

Mono生命周期函数调用机制分析

1.生命周期函数的调用机制是反射,而并非继承. 我们打开Mono后发现其的确也没有生命周期函数的实现,向上翻父类中也没有,好,可以确定其就不是继承了. 下面验证下是否是反射,拿void start()函数来说,其原本是private,但如果你硬要改成public,其执行起来也什么影响(但你肯定不想外界去手动调用你的Start吧),甚至于你把它设置成private IEnumerator Start()都可以,因为是发射调用嘛,名字对了就可以.如下图             (针对Start使用I

SylixOS-IgH系统平台搭建

1.参考手册 下面7个文件存放在本地服务器"\\10.9.1.11\3.研发部\9.ExchangeFolder\郑磊"路径下 <RealEvo-IDE使用手册> <SylixOS应用开发手册> <SylixOSshell用户手册> <SylixOS-IgH使用说明> <SylixOS上IgH移植技术笔记> <CiA-402-2-version-3.0.0> -- CANOPEN运动控制协议 <M001109

android ScheduleExecutorService定时周期执行指定任务

一:简单说明 ScheduleExecutorService接口中有四个重要的方法,其中scheduleAtFixedRate和scheduleWithFixedDelay在实现定时程序时比较方便. 下面是该接口的原型定义 java.util.concurrent.ScheduleExecutorService extends ExecutorService extends Executor 接口scheduleAtFixedRate原型定义及参数说明 [java] view plaincopy