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

    文章

    1475

    浏览量

    43089
  • Linux
    +关注

    关注

    88

    文章

    11814

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞萨FPB-RA6E2试用】线程+PWM+串口通信

    压缩成结构体,扔进printk_fifo消息队列中;该线程专门负责在后台默默地从队列中取出数据,并通过串口打印到PC上。 #include <zephyr/kernel.h>
    发表于 02-14 15:17

    内核配置项引发网络性能下降的深度剖析

    在嵌入式系统开发中,内核配置对系统性能起着关键作用。近期在对基于 Rockchip 平台的 Linux 内核配置调试时,发现三个内核跟踪器配置项(CONFIG_IRQSOFF_TRACER
    的头像 发表于 02-01 16:48 1810次阅读
    <b class='flag-5'>内核</b>配置项引发网络性能下降的深度剖析

    【瑞萨FPB-RA6E2试用】【瑞萨FPB-RA6E2】RTOS(Real-Time Operating System,实时操作系统)《线程》个人理解及项目实现

    独立的执行流,拥有自己的栈、优先级、入口函数,由内核调度器管理 调度器(Scheduler) 决定哪个线程在何时运行,通常基于优先级或时间片轮转 上下文切换(Context Switch) 从一个线程
    发表于 01-14 11:50

    DR1M90 开源 IgH EtherCAT 主站案例:伺服电机正反转实时控制方案

    转)、0-(-10000)(反转)的加减速循环运行,同步打印通讯周期极值。文档包含 CPU 核心隔离、驱动安装、空载 / 满负荷测试等关键步骤,程序采用 SCHED_FIFO 调度策略保障实时性。通过
    的头像 发表于 01-04 15:40 3042次阅读
    DR1M90 开源 IgH EtherCAT 主站案例:伺服电机正反转实时控制方案

    三防漆哪种好?别再问了!记住这个选型逻辑,比品牌更重要

    “三防漆哪种好?”——这是电子工程师、采购和制造从业者最高频的问题之一。但坦白说,这是一个“伪命题”。就像问“车哪种好?”一样,没有前提条件,答案毫无意义。没有最好的三防漆,只有最适合您产品应用
    的头像 发表于 12-23 17:41 718次阅读
    三防漆哪种好?别再问了!记住这个选型逻辑,比品牌更重要

    UPS电源价格/报价全解析:告别迷茫,一文读懂预算该怎么花

    让人陷入选择迷茫。事实上,专业UPS电源的价格并非一个孤立的数字,而是一套由技术等级、功率大小、后备时间、品牌服务共同构成的精密体系。简单比价毫无意义,关键在于搞
    的头像 发表于 12-15 08:29 905次阅读
    UPS电源价格/报价全解析:告别迷茫,一文读懂预算该怎么花

    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 756次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(下)

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

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

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

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

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

    信号上的噪声幅度 > LSB,则 LSB 分辨的不是“信号”,而是“噪声”! 如果系统本底噪声是 100 μV,那么这个 76 μV LSB 就毫无意义;此时所谓“高分辨率”变成了“伪分辨率”或“无效
    的头像 发表于 06-23 07:38 2334次阅读
    分辨率 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 2013次阅读
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介绍