搜索
bottom↓
回复: 8

实时性相关的一些话题

[复制链接]

出0入0汤圆

发表于 2015-1-17 12:12:32 | 显示全部楼层 |阅读模式
本帖最后由 lulu爱 于 2015-1-17 14:09 编辑

什么是实时性?这个问题可以分几个方面回答:

1 一些实时应用都具备deadlines,硬件触发之后多久能响应处理这个事件的任务。通俗的说硬件中断来了接收到处理的数据后,多久能响应这个处理数据的任务。这个时间叫做任务延迟,如果衡量一个系统实时性的话会取这个时间的最大值叫做任务的最大延迟时间。

2 硬件中断触发了,多久能响应这个硬件中断,这个时间叫做中断延迟,取最大值叫做系统最大的中断延迟时间。

系统最大的中断延迟时间更多的是一个硬实时的标准,和我们做硬件驱动的更紧密相关,也是衡量一个系统实时性的最重要的标准。

实时性到底对我们做驱动的有啥影响。举几个例子:

假设串口的波特率是115200,硬件接收的fifo为一个字节,那么接收一个字节的时间为100us。 如果fifo到了一个字节触发中断的时候,需要在100us内把这一个字节数据取走,如果不取走的话,后面串口数据还会塞进fifo,但是fifo满了会造成数据的丢失。我们知道一个系统都会有最大的中断延迟时间,根据我个人的经验500M Hz的arm11 cpu 在linux没有任何负载的情况下处理间隔为500us的中断频率会丢失中断。我有一个同事在500M Hz的arm11 cpu做过针式打印机需要在一个特定的时间内,被动接收900多个gpio的中断,中断的间隔为500us, 无论采取什么样的方式都会丢失中断,从而造成打印出问题。另外一个例子是产业线上给酒瓶加上盖子,机器加盖子的时间必须要严格控制时间,不能快也不能慢,不然盖子就会盖歪掉。所以实时性并不单单是快,更多的是在时间上的一个稳定性。

对于一个操作系统而言系统最大的中断延迟时间是天生决定的,一般很难改善,linux下的很多api都采用了spin_lock_irq 这种来采取关中断保护临界区资源,而且tick 中断这种在上半部做的时间也很长,这一点决定了纯linux内核无论如何改善也不可能到达硬实时的级别。不过系统最大的关中断时间可以通过提高cpu的频率来最大改善。对于外面商用的实时操作系统而言,商家给出的数据在100Mhz 的cortex-m 系列的cpu上为30us或者更低。本人写的实时操作系统raw-os由于采用了特殊的技术,系统最大的关中断时间大致在0.6us。在100Mhz 的cortex-m 系列的cpu上。

Linux目前主要用作消费类电子上,很大原因是因为硬实时这块达不到标准。工控设备更多的是采用rtos。

消费类电子对于时间不会太敏感,慢一点,快一点都能接受,因为面向的客户是人的感受。对于语音,视频,一些电信设备更多是注重软实时级别,即之前说的



任务的最大延迟时间以及关注任务的deadline时间,deadline 的时间取决于用户的应用,对于linux内核而言能提供给用户就是上面说的任务的最大延迟时间,只要压缩这个时间,对于软实时级别的实时性能大大提升从而对于上面用户的deadline时间提供更宽裕的时间。

由于linux目前内核的一些局限性,软实时级别的可能有的时候也难以满足要求,一些电信设备对于任务deadline 的时间比较敏感,普通的linux内核可能难以达到应有的效果。我有朋友在阿尔卡特做电信设备,采用的linux是windriver风河公司的实时linux做这块,不过价格昂贵达,需要一百万左右的欧元。


下面谈一下如何改造linux内核的实时性。目前有一个专门的著名linux项目叫做realtime linux patch,采用的技术是从linux内核自身去改善实时性。
大家可能知道Ingo Molnar以及Thomas Gleixner这两个人,内核的均衡调度算法是他们弄得。这个实时linux补丁也主要由他们在负责。目前有很多实时linux补丁的特性合并到了linux主内核,比如中断线程化,rtmutex 等等特性。未来几年这个补丁合并到主内核的可能性比较大。大家感兴趣的可以到这个网站了解一下:
https://rt.wiki.kernel.org/index.php/Main_Page

下面简单的谈一下这个补丁具体是如何来提高linux的实时性的。

1        spinlock 不关抢占,提供抢了抢占的可能性,spinlock通过rtmutex的实现来完成这个功能。当然原先的spin_lock功能也需要保留,可以通过raw_spinlock来替代。

2        spinlock 以及semaphore 也实现了优先级继承的功能。

3        整个中断线程化,softirq 也搬到外部线程环境执行,不过中断注册在irq环境内也是可以的。

通过以上3点可以很大的提高linux的软实时性。下面简单的解释一下这3点的作用。

我们知道一旦一个线程关了抢占后,这个线程在执行期间内是不允许被其他线程抢占的,这样就会绑死一个cpu,即使有更高优先级的线程就绪,也只能等这个线程开抢占。Linux内核的协议栈中大量用到了spinlock ,会对任务延迟这个时间急剧的增大,从而造成实时性的降低,所以这一点是最重要的一点。

优先级反转对于实时性的损害非常之大,后面会谈到什么是优先级反转以及如何解决优先级反转的问题。所以spinlock 以及semaphore,尤其是spinlock解决优先级反转是必须要的。
我们都知道linux的中断在上半部的时候处理中断是关了cpu的中断的,这样会直接造成系统最大关中断时间的急剧上升。从而造成硬实时性能的下降。所以中断线程化也是必需的一个标准。

出0入0汤圆

发表于 2015-1-17 13:13:41 | 显示全部楼层
好文。
按照linux的处理方式,就算能较快中断,CPU耗费也太大,不划算。
不过,上次有位哥们给我出了个主意,把一个进程指定到一个核上,使用轮询,然后把其他的进程都迁走,这个核差不多就独占了……不过现在只是个想法

出0入0汤圆

发表于 2015-1-17 13:46:39 | 显示全部楼层
假设串口的波特率是115200,硬件接收的fifo为一个字节,那么接收一个字节的时间为1ms。-------------------算错了,正确参数是不到100us

出0入0汤圆

 楼主| 发表于 2015-1-17 14:07:06 | 显示全部楼层
NJ8888 发表于 2015-1-17 13:46
假设串口的波特率是115200,硬件接收的fifo为一个字节,那么接收一个字节的时间为1ms。------------------- ...

是100us,算错了。多谢指出。

出0入0汤圆

发表于 2015-1-17 15:17:13 | 显示全部楼层
linux在运行一个低优先级别的核心态任务,而此时又有一些优先级更高的实时任务要处理,但内核不支持抢占性,只有等到正在运行的低优先级的任务执行结束后,才能运行优先级别高的任务,这样就不能保证系统对于实时性任务的响应时间,这在实时操作系统中一般是不允许发生的。

Linux内核对于中断处理采用 Bottom Half Handling方法(详细请自己查谷歌),这种处理方法在处理中断过程中,屏蔽了系统其它中断,而且优先级别高的任务也不能抢占处理,所以linux中断句柄是不可调度的;但在实时系统中,有事期望能在一个可调度整体内处理这些中断句柄,从而能更有效地区分不同实时任务的密度,分配不同的优先级。因此,单纯采用bottom half hadling缩短时间片方法在对实时性恩能够严格要求的场合仍有些不适合。

Linux中硬件时钟中断的默认时间间隔是10MS,所有的软件时钟都是靠硬件来触发的。linux内核的任务调度也依靠这个时钟,时钟频率直接影响到系统响应速度和上下文切换的系统开销。最小时间片为10MS,决定了linux任务调度能提供最小10MS的调度粒度,对于许多实时系统来说,通常需要做微秒级的响应,这种调度精度很难满足实时系统对系统响应速度的要求。

转帖:http://kb.cnblogs.com/page/512849/

出0入0汤圆

发表于 2015-1-17 18:45:49 | 显示全部楼层
用FPGA,一切都不是问题

出0入0汤圆

发表于 2015-1-17 18:50:49 | 显示全部楼层
lulu爱 发表于 2015-1-17 14:07
是100us,算错了。多谢指出。

100us也不对   

出0入0汤圆

发表于 2015-1-17 19:04:04 | 显示全部楼层

大致啊,115200 10位(起始+8数据+停止)的话1/11520

出0入0汤圆

发表于 2015-1-17 22:05:43 来自手机 | 显示全部楼层
写的不错 谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 06:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表