C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

亚星游戏官网-yaxin222  新兵

注册:2010-4-14
发表于 2020-2-26 10:13:49 |显示全部楼层
linux任务延时优化的思路总结一。随着设备功能的复杂性等原因,操作系统比如linux的应用日益广泛,但随之而来就带来一个缺陷,也就是任务延时的加长、抖动、不可控。本文主要针对这个问题的解决思路,进行总结归纳。
二。延时产生的原因和解决方法
1。业务不够优化。这种原因需要研究具体业务。不在本文讨论范围之内。
2。硬件处理单元性能不够强。需要硬件参数设置为硬件最大值,或者超频。
具体操作举例:如果在操作系统下,需要更改时钟模块。
3。接口耗时大。需要优化接口,比如开启dma,多通道动态分分配,使用更先进的机制比如中断。
具体操作举例:如果在操作系统下,需要添加新的dma设备,同时在驱动层把接口设备和dma设备关联起来,比如挂中断后的回调钩子。
4。系统调度不力。
具体有很多原因,比如调度延时,锁延时,拷贝延时。这里不具体区分,直接说解决思路。
4.1更改用户层,比如建立实时线程,更改线程优先级,无锁编程。
但也会遇到一些问题,比如如果这个线程是消费者,优先级提的太好可能会挤占生产者的资源导致自己饿死,所以需要整体规划,其他线程配合修改。
4.2多核下,线程和cpu绑定。一般是应用层线程绑定,内核层绑定需要完整方案,在后面描述。
4.3应用层驱动。具体有两种当时,uio和自己直接写。前者是linux已经提供的方式,缺点是比自己写要复杂点,好处是可以使用中断。自己直接在应用层写驱动简单粗暴,但没法直接用中断。
需要注意的是,一些系统外协议栈比如dpdk,就是用的uio机制。同时,这种方法的思路使用地址映射也减少了延时,类似于零拷贝。
4.4直接修改特定驱动。
理论上可行,但需要具体情况具体分析。比如在特定内核任务中禁止抢占,保存中断。
4.5改变linux的menu配置。
比如提高任务调度时钟频率,允许或禁止内核抢占,内存锁定等。经常和上一条配合使用。
4.6实时linux补丁
目前有三四种常见补丁,其支撑版本、实现机制、最终效果各不相同。本方法其实是前面提到的一些方法的整体集成方案,可以一劳永逸、修改后也应用广泛,但实际修改和后续使用的工作中,需要对补丁自身有较为深入的了解,才可以方便的进行。
其中,RT-preempt是和主分支距离较近,软硬件支撑也较好的,但效果相对较差。其他几种,如果没有对内核的一定了解且确实性能要求很好,咱们还是算了吧。
三。linux的设计目标,更注重吞吐量,而不是延时。所以在linux下改进延时,是个相对牵涉较广,比较复杂的工作。
以上总结,限于个人水平有限,肯定有错误,请大家海涵,同时也欢迎大家指教。



举报本楼

本帖有 1 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-15 17:04 , Processed in 0.125642 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图