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

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

    关注

    3

    文章

    1309

    浏览量

    39833
  • Linux
    +关注

    关注

    87

    文章

    10975

    浏览量

    206671
收藏 人收藏

    评论

    相关推荐

    TLF35584寄存器VMONSTAT出现异常行为的原因?

    (跟踪器)正常也毫无意义换句话说,当 QVR 无法运行时,QT1 和 QT2 能正常工作是没有意义的。 这就是我在 VMONSTAT 上看到的内容: 另外一个问题是,VMONSTAT
    发表于 01-22 06:16

    内核hotplug回调线程唤醒

    hotplug回调线程唤醒 内核使用以下流程唤醒特定cpu的hotplug线程,用于执行实际的cpu启动流程: 由于cpu启动时需要与一系列模块交互以执行相应的准备工作,为此内核为其定
    的头像 发表于 12-05 15:55 182次阅读
    <b class='flag-5'>内核</b>hotplug回调<b class='flag-5'>线程</b>唤醒

    Linux线程线程与异步编程、协程与异步介绍

    线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核线程的辅助。 协程是编程语言(或者 lib)提供的特性(协程之间的
    的头像 发表于 11-11 11:35 411次阅读
    Linux<b class='flag-5'>线程</b>、<b class='flag-5'>线程</b>与异步编程、协程与异步介绍

    同步FIFO和异步FIFO的区别 同步FIFO和异步FIFO各在什么情况下应用

    同步FIFO和异步FIFO的区别 同步FIFO和异步FIFO各在什么情况下应用? 1. 同步FIFO和异步
    的头像 发表于 10-18 15:23 990次阅读

    OS_OPT_POST_NO_SCHED的意思是什么?

    教程里使用了OS_OPT_POST_NO_SCHED发送完消息后才调度,如果不使用的话意思是发送过程中就调度?感觉很奇怪,那OSQPost函数后面的代码还能执行吗?
    发表于 10-18 08:09

    LogiCORE IP AXI4-Stream FIFO内核解决方案

    LogiCORE IP AXI4-Stream FIFO内核允许以内存映射方式访问一个AXI4-Stream接口。该内核可用于与AXI4-Stream IP接口,类似于LogiCORE IP AXI以太网
    的头像 发表于 09-25 10:55 572次阅读
    LogiCORE IP AXI4-Stream <b class='flag-5'>FIFO</b><b class='flag-5'>内核</b>解决方案

    ASML CEO:孤立中国毫无意义,他们能找到解决办法

    然而,ASML 的首席执行官并不是唯一一个强调知识移民需求的人。经合组织建议,如果荷兰想要保持经济增长,针对移民工人的规则必须变得更加灵活。荷兰多个行业的技术工人日益短缺,所需数量将超过欧盟工人。
    的头像 发表于 09-08 16:42 829次阅读
    ASML CEO:孤立中国<b class='flag-5'>毫无意义</b>,他们能找到解决办法

    普通人转行“提示工程师”毫无意义

    这是一个“虽迟但到”的提示工程师(Prompt Engineer)职业驱魅指南
    的头像 发表于 08-02 09:15 740次阅读

    linux内核线程就这样诞生了么?

    线程是操作系统的重要组成部件之一,linux内核中,内核线程是如何创建的,在内核启动过程中,诞生了哪些支撑整个系统运转的
    的头像 发表于 07-10 10:45 459次阅读
    linux<b class='flag-5'>内核</b><b class='flag-5'>线程</b>就这样诞生了么?

    PLC中学习指令和功能块最好的方法

    指令,也就是学习PLC不等于学习编程,编程不等于指令! 因为, PLC的最终目的是作为控制器,让机器设备可靠的运行,而不是让指令在那里空转。 有些指令,不结合实际工艺,根本毫无意义。比如PID指令,如果你连PID是什么,能干什么都搞不懂,那还怎
    的头像 发表于 06-17 10:26 1020次阅读
    PLC中学习指令和功能块最好的方法

    C语言-宏定义中使用do{...} while(0)到底图个啥

    在 Linux 内核中,经常会看到do{} while(0)这样的语句,许多人开始都会疑惑,认为do{} while(0)毫无意义,因为它只会执行一次,加不加do{} while(0)效果是完全一样的,其实do {}while(0)的用法主要用于宏定义中。
    的头像 发表于 06-11 10:59 474次阅读

    自动驾驶系统涉及哪些技术

    自动驾驶作为一个庞杂的系统工程,其所涉及的技术点比较多,本文主要从硬件和软件两方面简要谈谈自动驾驶汽车所涉及的 相关。对于自动驾驶汽车而言,如果没有硬件而单独谈自动驾驶,那是毫无意义的。下图我们将用一张图来表示自动
    发表于 06-01 15:04 0次下载
    自动驾驶系统涉及哪些技术

    FIFO设计—异步FIFO

    异步FIFO主要由五部分组成:写控制端、读控制端、FIFO Memory和两个时钟同步端
    发表于 05-26 16:17 1023次阅读
    <b class='flag-5'>FIFO</b>设计—异步<b class='flag-5'>FIFO</b>

    稳压二极管代换器件有哪些?

    零米”做为高度基准单位,才能恒量某物体的高度,是一个道理。失去了“海拔基准”的参照,个别物体的高、低是无法界定和毫无意义的。
    的头像 发表于 05-09 10:17 2695次阅读
    稳压二极管代换器件有哪些?

    JavaScript定时器与执行机制介绍

    浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。 为了避免因为某些长时间任务造成的无意义等待,JS引入了异步的概念,用另一个
    的头像 发表于 04-21 14:31 860次阅读