0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么说内核线程放入SCHED_FIFO的做法毫无意义?

lhl545545 来源:Linuxer 作者:Linuxer 2020-06-09 15:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

背景Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。无论优先级高低,实时进程都会优先于SCHED_NORMAL中的所有进程先执行,因为后者里面都是普通的非实时进程。

具体可以参看Linux阅码场早期文章: 宋宝华:关于Linux进程优先级数字混乱的彻底澄清

内核线程的优先级Linux内核会将大量(并且在不断增加中)工作放置在内核线程中,这些线程是在内核地址空间中运行的特殊进程。大多数内核线程运行在SCHED_NORMAL类中,必须与普通用户空间进程争夺CPU时间。但是有一些内核线程它的开发者们认为它们非常特殊,应该比用户空间进程要有更高优先级。因此也会把这些内核线程放到SCHED_FIFO中去。

那么问题来了,某个内核线程的实时优先级到底该设为多少呢?

要回答这个问题,不仅需要判断这个线程相对于所有其他实时线程是否更加重要,还要跟用户态的实时进程比较谁更重要。这是一个很难回答的问题,更何况在不同的系统和工作模式下这个答案很有可能还会各不相同。所以一般来说,内核开发人员也就是看心情直接随便选一个实时优先级。

现在的一些内核实时线程如下:

最近大神Peter Zijlstra又看到有内核开发者随便给内核线程设置优先级,终于看不下去了, 指责这种把内核线程放入SCHED_FIFO的做法毫无意义:

“the kernel has no clue what actual priority it should use for various things, so it is useless (or worse, counter productive) to even try”

所以他发了一个系列[PATCH 00/23] sched: Remove FIFO priorities from modules 把设置内核线程优先级的接口干脆都给删了,省得再有人瞎搞。

这个系列Patch(点击阅读原文可直达)主要做了下面几件事情:

删除了原有的sched_setschedule() / sched_setattr() 接口

增加了

sched_set_fifo(p)

sched_set_fifo_low(p)

sched_set_normal(p, nice)

其中调用sched_set_fifo()会将指定进程放到SCHED_FIFO类中,其优先级为50——这只是min和max之间的一半位置。

对于需求不那么迫切的线程,sched_set_fifo_low()将优先级设置为最低值(1)。

而调用sched_set_normal()会将线程返回给定好的值SCHED_NORMAL类。

通过只留下这三个接口可以避免开发者们再不停地去随机选取内核线程优先级,因为这样本来毫无意义,当然如果需要的话系统管理员还是可以按需调整不同进/线程的优先级。

到目前为止,这个系列Patch已经有不少得到Reviewed-by,相信如果合入后,内核线程混乱的优先级状况会得到持续改善。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    4

    文章

    1436

    浏览量

    42496
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218010
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux-RT特点及简单应用

    属性 pthread_attr_t attr; pthread_attr_init( attr); // 设置线程调度策略为SCHED_FIFO,并设置优先级
    发表于 12-05 07:37

    【飞凌OK153-S开发板评测】系统实时性及codesys测试

    , -t:创建4个SCHED_FIFO实时线程 -p:线程的优先级80 -a:绑定线程到指定的cpu,0,1...n stress-ng命令可以用于给CPU、DDR、Flash加压。
    发表于 11-28 14:00

    【飞凌OK-T153 开发板试用】实时性测试

    对吞吐考虑,实测时我们可以采用实时内核以获取更准确性能指标,测试方法一样 隔离核 专事专办 为了更准确获得实际应用场景的中断时延,必需充分评估实际应用的负载程度,失去这个前提测出来的数据将毫无意义
    发表于 11-22 05:29

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(下)

    本文围绕创龙科技研发的 TL3588-EVM 评估板,介绍 IgH EtherCAT 主站开发案例,含 IgH EtherCAT 简介、案例测试(电机正反转,SCHED_FIFO
    的头像 发表于 10-15 15:06 434次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(下)

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)

    本文围绕创龙科技研发的 TL3588-EVM 评估板,介绍 IgH EtherCAT 主站开发案例,含 IgH EtherCAT 简介、案例测试(电机正反转,SCHED_FIFO
    的头像 发表于 10-14 11:55 334次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)

    rtth studio中nano 如何创建动态线程

    有没有大佬,可以一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 09-11 06:01

    线程超时函数中 assert 失败是什么原因导致的?

    最近调试 gd32h759 遇到了一个十分奇怪的问题,在初步调通所有的逻辑功能后,发现系统经常会在运行一段时间后死在一个奇怪的线程超时函数中 assert 失败导致卡死。用 cmbacktrace
    发表于 09-09 06:56

    rtt studio中nano 如何创建动态线程

    有没有大佬,可以一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 08-22 06:19

    分辨率 vs 噪声 —— ADC的挑战

    信号上的噪声幅度 > LSB,则 LSB 分辨的不是“信号”,而是“噪声”! 如果系统本底噪声是 100 μV,那么这个 76 μV LSB 就毫无意义;此时所谓“高分辨率”变成了“伪分辨率”或“无效
    的头像 发表于 06-23 07:38 1486次阅读
    分辨率 vs 噪声 —— ADC的挑战

    大牛多年研发电源问题汇总(受益匪浅)

    钻牛角尖,做技术切记钻牛角尖,那你能谈谈为什么普遍电源不工作在1.5HZ,这个才有意义,你做出1.5HZ的电源纯属毫无意义的事情) 提醒:做技术人员切记钻牛角尖,咱们不是校园研究派,是需要将理论
    发表于 06-04 17:54

    智多晶FIFO_Generator IP介绍

    FIFO_Generator是智多晶设计的一款通用型FIFO IP。当前发布的FIFO_Generator IP是2.0版本,相比之前的1.1版本主要新增了非等比输入输出数据位宽支持和异步FI
    的头像 发表于 04-25 17:24 1473次阅读
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介绍

    求助,关于CAN接收问题求解

    。 有些消息总是发送,有些则不发送。我不知道是什么导致了这个问题,但看起来有些块没有在应该执行的时候执行。 我对 Simulink 设置不是很熟悉。我尝试将 RX 子系统设置为原子(可能毫无意义),但
    发表于 04-01 06:27

    AXI接口FIFO简介

    AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式:AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外,AXI FIFO
    的头像 发表于 03-17 10:31 1783次阅读
    AXI接口<b class='flag-5'>FIFO</b>简介

    用RC低通滤波的话,转折频率是可以满足,但是RC滤波器中,充电时间常数RC能满足△-∑型ADC的采样时间要求吗?

    )=1k Hz。得RC=160uS,那么ADC的采样时间最大也只有1uS.那当ADC采样时,电容的充电时间还不足1个时间常数,ADC采集到的电压值远远低于实际的电压,这样得出的结果是毫无意义的。 不知道我的理解哪里错了,望解答,谢谢!
    发表于 01-16 07:43

    FIFO IP核的使用教程

    在数字设计中,利用FIFO进行数据处理是非常普遍的应用,例如,实现时钟域交叉、低延时存储器缓存、总线位宽调整等。下图给出了FIFO生成器支持的一种可能配置。
    的头像 发表于 01-03 09:36 4021次阅读
    <b class='flag-5'>FIFO</b> IP核的使用教程